| // Copyright 2020 The Chromium OS 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 POWER_MANAGER_POWERD_POLICY_THERMAL_EVENT_HANDLER_H_ |
| #define POWER_MANAGER_POWERD_POLICY_THERMAL_EVENT_HANDLER_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include <base/macros.h> |
| #include <base/memory/weak_ptr.h> |
| #include <dbus/exported_object.h> |
| |
| #include "power_manager/common/power_constants.h" |
| #include "power_manager/powerd/system/thermal/thermal_device_observer.h" |
| |
| namespace dbus { |
| class MethodCall; |
| } |
| |
| namespace power_manager { |
| |
| class Clock; |
| |
| namespace system { |
| class DBusWrapperInterface; |
| class ThermalDeviceInterface; |
| enum class DeviceThermalState; |
| } // namespace system |
| |
| namespace policy { |
| |
| class ThermalEventHandler : public system::ThermalDeviceObserver { |
| public: |
| ThermalEventHandler( |
| std::vector<system::ThermalDeviceInterface*> thermal_devices, |
| system::DBusWrapperInterface* dbus_wrapper); |
| ThermalEventHandler(const ThermalEventHandler&) = delete; |
| ThermalEventHandler& operator=(const ThermalEventHandler&) = delete; |
| |
| ~ThermalEventHandler() override; |
| |
| Clock* clock_for_testing() { return clock_.get(); } |
| |
| bool Init(); |
| |
| // ThermalDeviceObserver implementations. |
| // Query all thermal devices and report thermal state of the entire device to |
| // Chrome. Note that charger's cooling device thermal state is ignored when |
| // power source is battery. |
| void OnThermalChanged(system::ThermalDeviceInterface* device) override; |
| |
| void OnGetThermalStateMethodCall( |
| dbus::MethodCall* method_call, |
| dbus::ExportedObject::ResponseSender response_sender); |
| |
| // Should be called when the power source changes. |
| void HandlePowerSourceChange(PowerSource source); |
| |
| private: |
| system::DBusWrapperInterface* dbus_wrapper_ = nullptr; // Not owned. |
| std::vector<system::ThermalDeviceInterface*> thermal_devices_; // Not owned. |
| |
| // Clock for current timestamp. |
| std::unique_ptr<Clock> clock_; |
| |
| // Last DeviceThermalState sent to Chrome. |
| system::DeviceThermalState last_state_; |
| |
| PowerSource power_source_; |
| |
| base::WeakPtrFactory<ThermalEventHandler> weak_ptr_factory_; |
| }; |
| |
| } // namespace policy |
| } // namespace power_manager |
| |
| #endif // POWER_MANAGER_POWERD_POLICY_THERMAL_EVENT_HANDLER_H_ |