// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_ #define BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_ #include "base/base_export.h" #include "base/power_monitor/power_observer.h" #include "base/synchronization/lock.h" #include "build/build_config.h" namespace base { // Communicates power state changes to the power monitor. class BASE_EXPORT PowerMonitorSource { public: PowerMonitorSource(); PowerMonitorSource(const PowerMonitorSource&) = delete; PowerMonitorSource& operator=(const PowerMonitorSource&) = delete; virtual ~PowerMonitorSource(); // Normalized list of power events. enum PowerEvent { POWER_STATE_EVENT, // The Power status of the system has changed. SUSPEND_EVENT, // The system is being suspended. RESUME_EVENT // The system is being resumed. }; // Reads the current DeviceThermalState, if available on the platform. // Otherwise, returns kUnknown. virtual PowerThermalObserver::DeviceThermalState GetCurrentThermalState(); // Reads the initial operating system CPU speed limit, if available on the // platform. Otherwise returns PowerThermalObserver::kSpeedLimitMax. // Only called on the main thread in PowerMonitor::Initialize(). // The actual speed limit value will be updated asynchronously via the // ProcessSpeedLimitEvent() if/when the value changes. virtual int GetInitialSpeedLimit(); // Update the result of thermal state. virtual void SetCurrentThermalState( PowerThermalObserver::DeviceThermalState state); // Platform-specific method to check whether the system is currently // running on battery power. virtual bool IsOnBatteryPower() = 0; #if BUILDFLAG(IS_ANDROID) // Read and return the current remaining battery capacity (microampere-hours). virtual int GetRemainingBatteryCapacity(); #endif // BUILDFLAG(IS_ANDROID) static const char* DeviceThermalStateToString( PowerThermalObserver::DeviceThermalState state); protected: friend class PowerMonitorTest; // Friend function that is allowed to access the protected ProcessPowerEvent. friend void ProcessPowerEventHelper(PowerEvent); friend void ProcessThermalEventHelper( PowerThermalObserver::DeviceThermalState); // Process*Event should only be called from a single thread, most likely // the UI thread or, in child processes, the IO thread. static void ProcessPowerEvent(PowerEvent event_id); static void ProcessThermalEvent( PowerThermalObserver::DeviceThermalState new_thermal_state); static void ProcessSpeedLimitEvent(int speed_limit); }; } // namespace base #endif // BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_