Home | History | Annotate | Download | only in tools
      1 /*
      2  * Copyright 2016 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef ThermalManager_DEFINED
      9 #define ThermalManager_DEFINED
     10 
     11 #include "../private/SkTArray.h"
     12 #include "SkString.h"
     13 
     14 #if defined(SK_BUILD_FOR_ANDROID) || defined(SK_BUILD_FOR_UNIX)
     15 #    define THERMAL_MANAGER_SUPPORTED
     16 #endif
     17 
     18 #ifdef THERMAL_MANAGER_SUPPORTED
     19 
     20 /*
     21  * This simple class monitors the thermal part of sysfs to ensure we don't trigger thermal events
     22  */
     23 
     24 class ThermalManager {
     25 public:
     26     ThermalManager(int32_t threshold, uint32_t sleepIntervalMs, uint32_t timeoutMs);
     27 
     28     bool coolOffIfNecessary();
     29 
     30 private:
     31     static int32_t OpenFileAndReadInt32(const char* path);
     32 
     33     // current temperature can be read from /thermalZonePath/temp
     34     static int32_t GetTemp(SkString thermalZonePath) {
     35         SkString temperatureFilePath(thermalZonePath);
     36         temperatureFilePath.appendf("/temp");
     37         return OpenFileAndReadInt32(temperatureFilePath.c_str());
     38     }
     39 
     40     struct TripPoint {
     41         TripPoint(SkString thermalZoneRoot, SkString pointName, int32_t threshold);
     42 
     43         bool willTrip();
     44 
     45         SkString fThermalZoneRoot;
     46         SkString fPointName;
     47         int32_t fBase;
     48         int32_t fPoint;
     49         int32_t fThreshold;
     50 
     51         // Certain trip points seem to start tripped.  For example, I have seen trip points of 0 or
     52         // negative numbers.
     53         bool fDisabled;
     54     };
     55 
     56     SkTArray<TripPoint> fTripPoints;
     57     uint32_t fSleepIntervalMs;
     58     uint32_t fTimeoutMs;
     59 };
     60 #endif
     61 #endif
     62