| /* |
| * 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) |
| # define THERMAL_MANAGER_SUPPORTED |
| #endif |
| |
| #ifdef THERMAL_MANAGER_SUPPORTED |
| |
| /* |
| * This simple class monitors the thermal part of sysfs to ensure we don't trigger thermal events |
| */ |
| |
| class ThermalManager { |
| public: |
| ThermalManager(int32_t threshold, uint32_t sleepIntervalMs, uint32_t timeoutMs); |
| |
| bool coolOffIfNecessary(); |
| |
| private: |
| static int32_t OpenFileAndReadInt32(const char* path); |
| |
| // current temperature can be read from /thermalZonePath/temp |
| static int32_t GetTemp(SkString thermalZonePath) { |
| SkString temperatureFilePath(thermalZonePath); |
| temperatureFilePath.appendf("/temp"); |
| 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; |
| }; |
| #endif |
| #endif |