| Index: tools/ThermalManager.h
|
| diff --git a/tools/ThermalManager.h b/tools/ThermalManager.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..74e9dd1eacd3623b6f622e2b47e22bd7e1174188
|
| --- /dev/null
|
| +++ b/tools/ThermalManager.h
|
| @@ -0,0 +1,61 @@
|
| +/*
|
| + * 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 "SkString.h"
|
| +#include "SkTArray.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
|
|
|