blob: b32e476d22a2b06bc46efbf90c2aeb7ce120efcf [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_TASK_SEQUENCE_MANAGER_THREAD_CONTROLLER_POWER_MONITOR_H_
#define BASE_TASK_SEQUENCE_MANAGER_THREAD_CONTROLLER_POWER_MONITOR_H_
#include "base/base_export.h"
#include "base/power_monitor/power_observer.h"
namespace base {
namespace sequence_manager {
namespace internal {
// A helper class that keeps track of the power state and handles power
// notifications. The class register itself to the PowerMonitor and receives
// notifications on the bound thread (see BindToCurrentThread(...)).
class BASE_EXPORT ThreadControllerPowerMonitor : public PowerSuspendObserver {
public:
ThreadControllerPowerMonitor();
~ThreadControllerPowerMonitor() override;
ThreadControllerPowerMonitor(const ThreadControllerPowerMonitor&) = delete;
ThreadControllerPowerMonitor& operator=(const ThreadControllerPowerMonitor&) =
delete;
// Register this class to the power monitor to receive notifications on this
// thread. It is safe to call this before PowerMonitor is initialized.
void BindToCurrentThread();
// Returns whether the process is between power suspend and resume
// notifications.
bool IsProcessInPowerSuspendState();
// Initializes features for this class. See `base::features::Init()`.
static void InitializeFeatures();
static void OverrideUsePowerMonitorForTesting(bool use_power_monitor);
static void ResetForTesting();
// base::PowerSuspendObserver:
void OnSuspend() override;
void OnResume() override;
private:
// Power state based on notifications delivered to this observer.
bool is_power_suspended_ = false;
// Whether PowerMonitor observer is registered.
bool is_observer_registered_ = false;
};
} // namespace internal
} // namespace sequence_manager
} // namespace base
#endif // BASE_TASK_SEQUENCE_MANAGER_THREAD_CONTROLLER_POWER_MONITOR_H_