blob: 747cf52691362f7a5c52fe0f38d63b99c209e740 [file] [log] [blame]
* Copyright 2016 Google Inc.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
#ifndef ThermalManager_DEFINED
#define ThermalManager_DEFINED
#include "../private/SkTArray.h"
#include "SkString.h"
#if defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_UNIX)
* This simple class monitors the thermal part of sysfs to ensure we don't trigger thermal events
class ThermalManager {
ThermalManager(int32_t threshold, uint32_t sleepIntervalMs, uint32_t timeoutMs);
bool coolOffIfNecessary();
static int32_t OpenFileAndReadInt32(const char* path);
// current temperature can be read from /thermalZonePath/temp
static int32_t GetTemp(SkString thermalZonePath) {
SkString temperatureFilePath(thermalZonePath);
return OpenFileAndReadInt32(temperatureFilePath.c_str());
struct TripPoint {
TripPoint(SkString thermalZoneRoot, SkString pointName, int32_t threshold);
bool willTrip();
SkString fThermalZoneRoot;
SkString fPointName;
int32_t fBase;
int32_t fPoint;
int32_t fThreshold;
// Certain trip points seem to start tripped. For example, I have seen trip points of 0 or
// negative numbers.
bool fDisabled;
SkTArray<TripPoint> fTripPoints;
uint32_t fSleepIntervalMs;
uint32_t fTimeoutMs;