diff options
author | 2017-12-06 15:05:26 -0500 | |
---|---|---|
committer | 2017-12-06 21:25:29 +0000 | |
commit | bbfe51547439fd02265c9775115001033f9312c1 (patch) | |
tree | a12b8de211c48e5a8ccd03774f9bafce063a9c75 /tools | |
parent | 7f4dd6cc079f9a7389a3d962e4588a6e9383cfdd (diff) |
remove ThermalManager
It throttles 1000x more than intended, and I suspect that some of the
trip points it uses to decide when to throttle make no sense. We've
already turned it off on the Nexus 5x.
Change-Id: Idf556a83fe61ccc5f63c7bede3eecbe80087e28b
Reviewed-on: https://skia-review.googlesource.com/81303
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/ThermalManager.cpp | 113 | ||||
-rw-r--r-- | tools/ThermalManager.h | 61 |
2 files changed, 0 insertions, 174 deletions
diff --git a/tools/ThermalManager.cpp b/tools/ThermalManager.cpp deleted file mode 100644 index e0c7c44c69..0000000000 --- a/tools/ThermalManager.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2016 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "ThermalManager.h" - -#include "SkOSFile.h" - -#include <stdio.h> - -#ifndef SK_BUILD_FOR_WIN32 - #include <unistd.h> -#endif - -#ifdef THERMAL_MANAGER_SUPPORTED - -/* - * ThermalManager is completely dependent on sysfs to monitor thermal temperatures. In sysfs - * thermal management is controlled by a number of thermal zones. They are laid out as follows: - * /sys/class/thermal/thermal_zoneN where N is the number of the thermal zone starting at 0. - * - * Inside each thermal_zone folder is a file called 'temp,' which has the current temperature - * reading from the sensor in that zone, as well as 0 or more files called 'trip_point_N_temp.' - * - * When the reading in temp is greater than one of the numbers in the trip_point files, then the - * kernel will take some kind of action. This is all documented online. - * - * In any case, the goal of this class is to sleep right before a trip point is about to be - * triggered, thus naturally cooling the system and preventing thermal throttling. - */ - -ThermalManager::ThermalManager(int32_t threshold, uint32_t sleepIntervalMs, uint32_t timeoutMs) - : fSleepIntervalMs(sleepIntervalMs) - , fTimeoutMs(timeoutMs) { - static const char* kThermalZonePath = "/sys/class/thermal/"; - SkOSFile::Iter it(kThermalZonePath); - SkString path; - while (it.next(&path, true)) { - if (!path.contains("thermal_zone")) { - continue; - } - - SkString fullPath(kThermalZonePath); - fullPath.append(path); - SkOSFile::Iter thermalZoneIt(fullPath.c_str()); - - SkString filename; - while (thermalZoneIt.next(&filename)) { - if (!(filename.contains("trip_point") && filename.contains("temp"))) { - continue; - } - - fTripPoints.push_back(TripPoint(fullPath, filename, threshold)); - } - } -} - -bool ThermalManager::coolOffIfNecessary() { - uint32_t i = 0, totalTimeSleptMs = 0; - while (i < (uint32_t)fTripPoints.count() && totalTimeSleptMs < fTimeoutMs) { - if (fTripPoints[i].willTrip()) { - sleep(fSleepIntervalMs); - totalTimeSleptMs += fSleepIntervalMs; - } else { - i++; - } - } - - return totalTimeSleptMs < fTimeoutMs; -} - -int32_t ThermalManager::OpenFileAndReadInt32(const char* path) { - FILE* tempFile = fopen(path, "r"); - SkASSERT(tempFile); - int32_t value; - int ret = fscanf(tempFile, "%d", &value); - if (!ret) { - SkDebugf("Could not read temperature\n"); - SkASSERT(false); - } - - fclose(tempFile); - return value; -} - -ThermalManager::TripPoint::TripPoint(SkString thermalZoneRoot, SkString pointName, - int32_t threshold) - : fThermalZoneRoot(thermalZoneRoot) - , fPointName(pointName) { - SkString fullPath(thermalZoneRoot); - fullPath.appendf("/%s", pointName.c_str()); - fPoint = OpenFileAndReadInt32(fullPath.c_str()); - fBase = GetTemp(fThermalZoneRoot); - fThreshold = threshold; - fDisabled = fBase + fThreshold >= fPoint; // We disable any trip point which start off - // triggered -} - -bool ThermalManager::TripPoint::willTrip() { - int32_t currentTemp = GetTemp(fThermalZoneRoot); - bool wouldTrip = !fDisabled && currentTemp + fThreshold >= fPoint; - - if (wouldTrip) { - SkDebugf("%s/%s would trip {%d,%d,%d,%d}\n", fThermalZoneRoot.c_str(), - fPointName.c_str(), fBase, currentTemp, fPoint, fThreshold); - } - return wouldTrip; -} - -#endif diff --git a/tools/ThermalManager.h b/tools/ThermalManager.h deleted file mode 100644 index 747cf52691..0000000000 --- a/tools/ThermalManager.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 |