0

Shift PowerMonitor to non static

Bug: 346931324
Change-Id: I80fab35a422083c5a9db1d9ee4a2ccd34e11d32f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5806403
Reviewed-by: Peter Kasting <pkasting@chromium.org>
Owners-Override: Peter Kasting <pkasting@chromium.org>
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1350494}
This commit is contained in:
Helmut Januschka
2024-09-03 23:49:18 +00:00
committed by Chromium LUCI CQ
parent ca632a2f83
commit bcf73217bf
94 changed files with 553 additions and 515 deletions
ash/login/ui
base
chrome
chromeos
components
content
google_apis/gcm/engine
gpu
ios/web/init
media
net
services
third_party/blink
common
tools
blinkpy
ui

@ -79,8 +79,8 @@ LockScreenMediaView::LockScreenMediaView(
hide_media_view_callback_(hide_media_view_callback) { hide_media_view_callback_(hide_media_view_callback) {
// Observe power events and if created in power suspended state, post // Observe power events and if created in power suspended state, post
// OnSuspend() call to run after LockContentsView is initialized. // OnSuspend() call to run after LockContentsView is initialized.
if (base::PowerMonitor::AddPowerSuspendObserverAndReturnSuspendedState( if (base::PowerMonitor::GetInstance()
this)) { ->AddPowerSuspendObserverAndReturnSuspendedState(this)) {
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask( base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(&LockScreenMediaView::OnSuspend, FROM_HERE, base::BindOnce(&LockScreenMediaView::OnSuspend,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
@ -137,7 +137,7 @@ LockScreenMediaView::LockScreenMediaView(
} }
LockScreenMediaView::~LockScreenMediaView() { LockScreenMediaView::~LockScreenMediaView() {
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

@ -16,62 +16,50 @@ namespace base {
void PowerMonitor::Initialize(std::unique_ptr<PowerMonitorSource> source) { void PowerMonitor::Initialize(std::unique_ptr<PowerMonitorSource> source) {
DCHECK(!IsInitialized()); DCHECK(!IsInitialized());
PowerMonitor* power_monitor = GetInstance(); source_ = std::move(source);
power_monitor->source_ = std::move(source);
// When a power source is associated with the power monitor, ensure the // When a power source is associated with the power monitor, ensure the
// initial state is propagated to observers, if needed. // initial state is propagated to observers, if needed.
PowerMonitor::NotifyPowerStateChange( NotifyPowerStateChange(Source()->GetBatteryPowerStatus());
PowerMonitor::Source()->GetBatteryPowerStatus());
PowerMonitor::PowerMonitor::NotifyThermalStateChange( NotifyThermalStateChange(Source()->GetCurrentThermalState());
PowerMonitor::Source()->GetCurrentThermalState());
PowerMonitor::PowerMonitor::NotifySpeedLimitChange( NotifySpeedLimitChange(Source()->GetInitialSpeedLimit());
PowerMonitor::Source()->GetInitialSpeedLimit());
} }
bool PowerMonitor::IsInitialized() { bool PowerMonitor::IsInitialized() const {
return GetInstance()->source_.get() != nullptr; return source_ != nullptr;
} }
// static
void PowerMonitor::AddPowerSuspendObserver(PowerSuspendObserver* obs) { void PowerMonitor::AddPowerSuspendObserver(PowerSuspendObserver* obs) {
GetInstance()->power_suspend_observers_->AddObserver(obs); power_suspend_observers_->AddObserver(obs);
} }
// static
void PowerMonitor::RemovePowerSuspendObserver(PowerSuspendObserver* obs) { void PowerMonitor::RemovePowerSuspendObserver(PowerSuspendObserver* obs) {
GetInstance()->power_suspend_observers_->RemoveObserver(obs); power_suspend_observers_->RemoveObserver(obs);
} }
// static
void PowerMonitor::AddPowerStateObserver(PowerStateObserver* obs) { void PowerMonitor::AddPowerStateObserver(PowerStateObserver* obs) {
GetInstance()->power_state_observers_->AddObserver(obs); power_state_observers_->AddObserver(obs);
} }
// static
void PowerMonitor::RemovePowerStateObserver(PowerStateObserver* obs) { void PowerMonitor::RemovePowerStateObserver(PowerStateObserver* obs) {
GetInstance()->power_state_observers_->RemoveObserver(obs); power_state_observers_->RemoveObserver(obs);
} }
// static
void PowerMonitor::AddPowerThermalObserver(PowerThermalObserver* obs) { void PowerMonitor::AddPowerThermalObserver(PowerThermalObserver* obs) {
GetInstance()->thermal_state_observers_->AddObserver(obs); thermal_state_observers_->AddObserver(obs);
} }
// static
void PowerMonitor::RemovePowerThermalObserver(PowerThermalObserver* obs) { void PowerMonitor::RemovePowerThermalObserver(PowerThermalObserver* obs) {
GetInstance()->thermal_state_observers_->RemoveObserver(obs); thermal_state_observers_->RemoveObserver(obs);
} }
// static
bool PowerMonitor::AddPowerSuspendObserverAndReturnSuspendedState( bool PowerMonitor::AddPowerSuspendObserverAndReturnSuspendedState(
PowerSuspendObserver* obs) { PowerSuspendObserver* obs) {
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(is_system_suspended_lock_);
AutoLock auto_lock(power_monitor->is_system_suspended_lock_); power_suspend_observers_->AddObserver(obs);
power_monitor->power_suspend_observers_->AddObserver(obs); return is_system_suspended_;
return power_monitor->is_system_suspended_;
} }
// static // static
@ -84,84 +72,79 @@ bool PowerMonitor::AddPowerStateObserverAndReturnOnBatteryState(
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitor::AddPowerStateObserverAndReturnBatteryPowerStatus( PowerMonitor::AddPowerStateObserverAndReturnBatteryPowerStatus(
PowerStateObserver* obs) { PowerStateObserver* obs) {
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(battery_power_status_lock_);
AutoLock auto_lock(power_monitor->battery_power_status_lock_); power_state_observers_->AddObserver(obs);
power_monitor->power_state_observers_->AddObserver(obs); return battery_power_status_;
return power_monitor->battery_power_status_;
} }
// static // static
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
PowerMonitor::AddPowerStateObserverAndReturnPowerThermalState( PowerMonitor::AddPowerStateObserverAndReturnPowerThermalState(
PowerThermalObserver* obs) { PowerThermalObserver* obs) {
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(power_thermal_state_lock_);
AutoLock auto_lock(power_monitor->power_thermal_state_lock_); thermal_state_observers_->AddObserver(obs);
power_monitor->thermal_state_observers_->AddObserver(obs); return power_thermal_state_;
return power_monitor->power_thermal_state_;
} }
PowerMonitorSource* PowerMonitor::Source() { const PowerMonitorSource* PowerMonitor::Source() const {
return GetInstance()->source_.get(); return source_.get();
} }
bool PowerMonitor::IsOnBatteryPower() { bool PowerMonitor::IsOnBatteryPower() const {
DCHECK(IsInitialized()); DCHECK(IsInitialized());
return GetBatteryPowerStatus() == return GetBatteryPowerStatus() ==
PowerStateObserver::BatteryPowerStatus::kBatteryPower; PowerStateObserver::BatteryPowerStatus::kBatteryPower;
} }
PowerStateObserver::BatteryPowerStatus PowerMonitor::GetBatteryPowerStatus() { PowerStateObserver::BatteryPowerStatus PowerMonitor::GetBatteryPowerStatus()
const {
DCHECK(IsInitialized()); DCHECK(IsInitialized());
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(battery_power_status_lock_);
AutoLock auto_lock(power_monitor->battery_power_status_lock_); return battery_power_status_;
return power_monitor->battery_power_status_;
} }
TimeTicks PowerMonitor::GetLastSystemResumeTime() { TimeTicks PowerMonitor::GetLastSystemResumeTime() const {
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(is_system_suspended_lock_);
AutoLock auto_lock(power_monitor->is_system_suspended_lock_); return last_system_resume_time_;
return power_monitor->last_system_resume_time_;
} }
void PowerMonitor::ShutdownForTesting() { void PowerMonitor::ShutdownForTesting() {
GetInstance()->source_ = nullptr; source_ = nullptr;
PowerMonitor* power_monitor = GetInstance();
{ {
AutoLock auto_lock(power_monitor->is_system_suspended_lock_); AutoLock auto_lock(is_system_suspended_lock_);
power_monitor->is_system_suspended_ = false; is_system_suspended_ = false;
power_monitor->last_system_resume_time_ = TimeTicks(); last_system_resume_time_ = TimeTicks();
} }
{ {
AutoLock auto_lock(power_monitor->battery_power_status_lock_); AutoLock auto_lock(battery_power_status_lock_);
power_monitor->battery_power_status_ = battery_power_status_ =
PowerStateObserver::BatteryPowerStatus::kExternalPower; PowerStateObserver::BatteryPowerStatus::kExternalPower;
} }
{ {
AutoLock auto_lock(power_monitor->power_thermal_state_lock_); AutoLock auto_lock(power_thermal_state_lock_);
power_monitor->power_thermal_state_ = power_thermal_state_ = PowerThermalObserver::DeviceThermalState::kUnknown;
PowerThermalObserver::DeviceThermalState::kUnknown;
} }
} }
// static // static
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState PowerMonitor::GetCurrentThermalState()
PowerMonitor::GetCurrentThermalState() { const {
DCHECK(IsInitialized()); DCHECK(IsInitialized());
return GetInstance()->source_->GetCurrentThermalState(); return source_->GetCurrentThermalState();
} }
// static // static
void PowerMonitor::SetCurrentThermalState( void PowerMonitor::SetCurrentThermalState(
PowerThermalObserver::DeviceThermalState state) { PowerThermalObserver::DeviceThermalState state) {
DCHECK(IsInitialized()); DCHECK(IsInitialized());
GetInstance()->source_->SetCurrentThermalState(state); source_->SetCurrentThermalState(state);
} }
#if BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID)
int PowerMonitor::GetRemainingBatteryCapacity() { int PowerMonitor::GetRemainingBatteryCapacity() const {
DCHECK(IsInitialized()); DCHECK(IsInitialized());
return PowerMonitor::Source()->GetRemainingBatteryCapacity(); return Source()->GetRemainingBatteryCapacity();
} }
#endif // BUILDFLAG(IS_ANDROID) #endif // BUILDFLAG(IS_ANDROID)
@ -188,11 +171,10 @@ void PowerMonitor::NotifyPowerStateChange(
<< " battery"; << " battery";
} }
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(battery_power_status_lock_);
AutoLock auto_lock(power_monitor->battery_power_status_lock_); if (battery_power_status_ != battery_power_status) {
if (power_monitor->battery_power_status_ != battery_power_status) { battery_power_status_ = battery_power_status;
power_monitor->battery_power_status_ = battery_power_status; power_state_observers_->Notify(
GetInstance()->power_state_observers_->Notify(
FROM_HERE, &PowerStateObserver::OnBatteryPowerStatusChange, FROM_HERE, &PowerStateObserver::OnBatteryPowerStatusChange,
battery_power_status); battery_power_status);
} }
@ -204,13 +186,12 @@ void PowerMonitor::NotifySuspend() {
TRACE_EVENT_SCOPE_PROCESS); TRACE_EVENT_SCOPE_PROCESS);
DVLOG(1) << "Power Suspending"; DVLOG(1) << "Power Suspending";
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(is_system_suspended_lock_);
AutoLock auto_lock(power_monitor->is_system_suspended_lock_); if (!is_system_suspended_) {
if (!power_monitor->is_system_suspended_) { is_system_suspended_ = true;
power_monitor->is_system_suspended_ = true; last_system_resume_time_ = TimeTicks::Max();
power_monitor->last_system_resume_time_ = TimeTicks::Max(); power_suspend_observers_->Notify(FROM_HERE,
GetInstance()->power_suspend_observers_->Notify( &PowerSuspendObserver::OnSuspend);
FROM_HERE, &PowerSuspendObserver::OnSuspend);
} }
} }
@ -222,13 +203,12 @@ void PowerMonitor::NotifyResume() {
TimeTicks resume_time = TimeTicks::Now(); TimeTicks resume_time = TimeTicks::Now();
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(is_system_suspended_lock_);
AutoLock auto_lock(power_monitor->is_system_suspended_lock_); if (is_system_suspended_) {
if (power_monitor->is_system_suspended_) { is_system_suspended_ = false;
power_monitor->is_system_suspended_ = false; last_system_resume_time_ = resume_time;
power_monitor->last_system_resume_time_ = resume_time; power_suspend_observers_->Notify(FROM_HERE,
GetInstance()->power_suspend_observers_->Notify( &PowerSuspendObserver::OnResume);
FROM_HERE, &PowerSuspendObserver::OnResume);
} }
} }
@ -238,11 +218,10 @@ void PowerMonitor::NotifyThermalStateChange(
DVLOG(1) << "ThermalStateChange: " DVLOG(1) << "ThermalStateChange: "
<< PowerMonitorSource::DeviceThermalStateToString(new_state); << PowerMonitorSource::DeviceThermalStateToString(new_state);
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(power_thermal_state_lock_);
AutoLock auto_lock(power_monitor->power_thermal_state_lock_); if (power_thermal_state_ != new_state) {
if (power_monitor->power_thermal_state_ != new_state) { power_thermal_state_ = new_state;
power_monitor->power_thermal_state_ = new_state; thermal_state_observers_->Notify(
GetInstance()->thermal_state_observers_->Notify(
FROM_HERE, &PowerThermalObserver::OnThermalStateChange, new_state); FROM_HERE, &PowerThermalObserver::OnThermalStateChange, new_state);
} }
} }
@ -251,11 +230,10 @@ void PowerMonitor::NotifySpeedLimitChange(int speed_limit) {
DCHECK(IsInitialized()); DCHECK(IsInitialized());
DVLOG(1) << "SpeedLimitChange: " << speed_limit; DVLOG(1) << "SpeedLimitChange: " << speed_limit;
PowerMonitor* power_monitor = GetInstance(); AutoLock auto_lock(power_thermal_state_lock_);
AutoLock auto_lock(power_monitor->power_thermal_state_lock_); if (speed_limit_ != speed_limit) {
if (power_monitor->speed_limit_ != speed_limit) { speed_limit_ = speed_limit;
power_monitor->speed_limit_ = speed_limit; thermal_state_observers_->Notify(
GetInstance()->thermal_state_observers_->Notify(
FROM_HERE, &PowerThermalObserver::OnSpeedLimitChange, speed_limit); FROM_HERE, &PowerThermalObserver::OnSpeedLimitChange, speed_limit);
} }
} }

@ -26,11 +26,13 @@ class PowerMonitorSource;
// of test contexts where the PowerMonitor global is never created. // of test contexts where the PowerMonitor global is never created.
class BASE_EXPORT PowerMonitor { class BASE_EXPORT PowerMonitor {
public: public:
static PowerMonitor* GetInstance();
// Initializes global PowerMonitor state. Takes ownership of |source|, which // Initializes global PowerMonitor state. Takes ownership of |source|, which
// will be leaked on process teardown. May only be called once. Not threadsafe // will be leaked on process teardown. May only be called once. Not threadsafe
// - no other PowerMonitor methods may be called on any thread while calling // - no other PowerMonitor methods may be called on any thread while calling
// Initialize(). |source| must not be nullptr. // Initialize(). |source| must not be nullptr.
static void Initialize(std::unique_ptr<PowerMonitorSource> source); void Initialize(std::unique_ptr<PowerMonitorSource> source);
PowerMonitor(const PowerMonitor&) = delete; PowerMonitor(const PowerMonitor&) = delete;
PowerMonitor& operator=(const PowerMonitor&) = delete; PowerMonitor& operator=(const PowerMonitor&) = delete;
@ -38,7 +40,7 @@ class BASE_EXPORT PowerMonitor {
// Returns true if Initialize() has been called. Safe to call on any thread, // Returns true if Initialize() has been called. Safe to call on any thread,
// but must not be called while Initialize() or ShutdownForTesting() is being // but must not be called while Initialize() or ShutdownForTesting() is being
// invoked. // invoked.
static bool IsInitialized(); bool IsInitialized() const;
// Add and remove an observer. // Add and remove an observer.
// Can be called from any thread. |observer| is notified on the sequence // Can be called from any thread. |observer| is notified on the sequence
@ -47,12 +49,12 @@ class BASE_EXPORT PowerMonitor {
// //
// It is safe to add observers before the PowerMonitor is initialized. It is // It is safe to add observers before the PowerMonitor is initialized. It is
// safe to remove an observer even if it was not added as an observer. // safe to remove an observer even if it was not added as an observer.
static void AddPowerSuspendObserver(PowerSuspendObserver* observer); void AddPowerSuspendObserver(PowerSuspendObserver* observer);
static void RemovePowerSuspendObserver(PowerSuspendObserver* observer); void RemovePowerSuspendObserver(PowerSuspendObserver* observer);
static void AddPowerStateObserver(PowerStateObserver* observer); void AddPowerStateObserver(PowerStateObserver* observer);
static void RemovePowerStateObserver(PowerStateObserver* observer); void RemovePowerStateObserver(PowerStateObserver* observer);
static void AddPowerThermalObserver(PowerThermalObserver* observer); void AddPowerThermalObserver(PowerThermalObserver* observer);
static void RemovePowerThermalObserver(PowerThermalObserver* observer); void RemovePowerThermalObserver(PowerThermalObserver* observer);
// Atomically add a PowerSuspendObserver and read the current power suspended // Atomically add a PowerSuspendObserver and read the current power suspended
// state. This variant must be used to avoid race between adding an observer // state. This variant must be used to avoid race between adding an observer
@ -61,54 +63,53 @@ class BASE_EXPORT PowerMonitor {
// if (PowerMonitor::IsSystemSuspended()) { ... } // if (PowerMonitor::IsSystemSuspended()) { ... }
// //
// Returns true if the system is currently suspended. // Returns true if the system is currently suspended.
static bool AddPowerSuspendObserverAndReturnSuspendedState( bool AddPowerSuspendObserverAndReturnSuspendedState(
PowerSuspendObserver* observer); PowerSuspendObserver* observer);
// Returns true if the system is on-battery. // Returns true if the system is on-battery.
static bool AddPowerStateObserverAndReturnOnBatteryState( bool AddPowerStateObserverAndReturnOnBatteryState(
PowerStateObserver* observer); PowerStateObserver* observer);
static PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
AddPowerStateObserverAndReturnBatteryPowerStatus( AddPowerStateObserverAndReturnBatteryPowerStatus(
PowerStateObserver* observer); PowerStateObserver* observer);
// Returns the power thermal state. // Returns the power thermal state.
static PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
AddPowerStateObserverAndReturnPowerThermalState( AddPowerStateObserverAndReturnPowerThermalState(
PowerThermalObserver* observer); PowerThermalObserver* observer);
// Is the computer currently on battery power. May only be called if the // Is the computer currently on battery power. May only be called if the
// PowerMonitor has been initialized. // PowerMonitor has been initialized.
static bool IsOnBatteryPower(); bool IsOnBatteryPower() const;
// Returns the current state of the battery power, that can be unknown if the // Returns the current state of the battery power, that can be unknown if the
// value isn't initialized yet. May only be called if the PowerMonitor has // value isn't initialized yet. May only be called if the PowerMonitor has
// been initialized. // been initialized.
static PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus(); PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus() const;
// Returns the time of the last system resume. If no system suspend/resume was // Returns the time of the last system resume. If no system suspend/resume was
// observed, returns an empty time. If the system is currently suspended, // observed, returns an empty time. If the system is currently suspended,
// returns TimeTicks::Max(). // returns TimeTicks::Max().
static TimeTicks GetLastSystemResumeTime(); TimeTicks GetLastSystemResumeTime() const;
// Read the current DeviceThermalState if known. Can be called on any thread. // Read the current DeviceThermalState if known. Can be called on any thread.
// May only be called if the PowerMonitor has been initialized. // May only be called if the PowerMonitor has been initialized.
static PowerThermalObserver::DeviceThermalState GetCurrentThermalState(); PowerThermalObserver::DeviceThermalState GetCurrentThermalState() const;
// Update the result of thermal state. // Update the result of thermal state.
static void SetCurrentThermalState( void SetCurrentThermalState(PowerThermalObserver::DeviceThermalState state);
PowerThermalObserver::DeviceThermalState state);
#if BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID)
// Read and return the current remaining battery capacity (microampere-hours). // Read and return the current remaining battery capacity (microampere-hours).
// Only supported with a device power source (i.e. not in child processes in // Only supported with a device power source (i.e. not in child processes in
// Chrome) and on devices with Android >= Lollipop as well as a power supply // Chrome) and on devices with Android >= Lollipop as well as a power supply
// that supports this counter. Returns 0 if unsupported. // that supports this counter. Returns 0 if unsupported.
static int GetRemainingBatteryCapacity(); int GetRemainingBatteryCapacity() const;
#endif // BUILDFLAG(IS_ANDROID) #endif // BUILDFLAG(IS_ANDROID)
// Uninitializes the PowerMonitor. Should be called at the end of any unit // Uninitializes the PowerMonitor. Should be called at the end of any unit
// test that mocks out the PowerMonitor, to avoid affecting subsequent tests. // test that mocks out the PowerMonitor, to avoid affecting subsequent tests.
// There must be no live observers when invoked. Safe to call even if the // There must be no live observers when invoked. Safe to call even if the
// PowerMonitor hasn't been initialized. // PowerMonitor hasn't been initialized.
static void ShutdownForTesting(); void ShutdownForTesting();
private: private:
friend class PowerMonitorSource; friend class PowerMonitorSource;
@ -117,27 +118,25 @@ class BASE_EXPORT PowerMonitor {
PowerMonitor(); PowerMonitor();
~PowerMonitor(); ~PowerMonitor();
static PowerMonitorSource* Source(); const PowerMonitorSource* Source() const;
static void NotifyPowerStateChange(bool on_battery_power); void NotifyPowerStateChange(bool on_battery_power);
static void NotifyPowerStateChange( void NotifyPowerStateChange(
PowerStateObserver::BatteryPowerStatus battery_power_status); PowerStateObserver::BatteryPowerStatus battery_power_status);
static void NotifySuspend(); void NotifySuspend();
static void NotifyResume(); void NotifyResume();
static void NotifyThermalStateChange( void NotifyThermalStateChange(
PowerThermalObserver::DeviceThermalState new_state); PowerThermalObserver::DeviceThermalState new_state);
static void NotifySpeedLimitChange(int speed_limit); void NotifySpeedLimitChange(int speed_limit);
static PowerMonitor* GetInstance();
bool is_system_suspended_ GUARDED_BY(is_system_suspended_lock_) = false; bool is_system_suspended_ GUARDED_BY(is_system_suspended_lock_) = false;
Lock is_system_suspended_lock_; mutable Lock is_system_suspended_lock_;
TimeTicks last_system_resume_time_ GUARDED_BY(is_system_suspended_lock_); TimeTicks last_system_resume_time_ GUARDED_BY(is_system_suspended_lock_);
PowerStateObserver::BatteryPowerStatus battery_power_status_ PowerStateObserver::BatteryPowerStatus battery_power_status_
GUARDED_BY(battery_power_status_lock_) = GUARDED_BY(battery_power_status_lock_) =
PowerStateObserver::BatteryPowerStatus::kExternalPower; PowerStateObserver::BatteryPowerStatus::kExternalPower;
Lock battery_power_status_lock_; mutable Lock battery_power_status_lock_;
PowerThermalObserver::DeviceThermalState power_thermal_state_ PowerThermalObserver::DeviceThermalState power_thermal_state_
GUARDED_BY(power_thermal_state_lock_) = GUARDED_BY(power_thermal_state_lock_) =

@ -8,7 +8,7 @@
namespace base { namespace base {
bool PowerMonitorDeviceSource::IsOnBatteryPower() { bool PowerMonitorDeviceSource::IsOnBatteryPower() const {
return GetBatteryPowerStatus() == return GetBatteryPowerStatus() ==
PowerStateObserver::BatteryPowerStatus::kBatteryPower; PowerStateObserver::BatteryPowerStatus::kBatteryPower;
} }

@ -62,7 +62,8 @@ class BASE_EXPORT PowerMonitorDeviceSource : public PowerMonitorSource {
// These two methods is used for handling thermal state update requests, such // These two methods is used for handling thermal state update requests, such
// as asking for initial state when starting lisitening to thermal change. // as asking for initial state when starting lisitening to thermal change.
PowerThermalObserver::DeviceThermalState GetCurrentThermalState() override; PowerThermalObserver::DeviceThermalState GetCurrentThermalState()
const override;
void SetCurrentThermalState( void SetCurrentThermalState(
PowerThermalObserver::DeviceThermalState state) override; PowerThermalObserver::DeviceThermalState state) override;
#endif #endif
@ -109,29 +110,31 @@ class BASE_EXPORT PowerMonitorDeviceSource : public PowerMonitorSource {
// Platform-specific method to check whether the system is currently // Platform-specific method to check whether the system is currently
// running on battery power. Returns true if running on batteries, // running on battery power. Returns true if running on batteries,
// false otherwise. // false otherwise.
bool IsOnBatteryPower() final; bool IsOnBatteryPower() const final;
// Platform-specific method to check whether the system is currently // Platform-specific method to check whether the system is currently
// running on battery power. Returns kBatteryPower if running on battery, // running on battery power. Returns kBatteryPower if running on battery,
// kExternalPower if running on external power or kUnknown if the power // kExternalPower if running on external power or kUnknown if the power
// state is unknown (for example, during early process lifetime when the // state is unknown (for example, during early process lifetime when the
// state hasn't been obtained yet). // state hasn't been obtained yet).
PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus(); PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus() const;
#if BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID)
PowerThermalObserver::DeviceThermalState GetCurrentThermalState() override; PowerThermalObserver::DeviceThermalState GetCurrentThermalState()
int GetRemainingBatteryCapacity() override; const override;
int GetRemainingBatteryCapacity() const override;
#endif // BUILDFLAG(IS_ANDROID) #endif // BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
// PowerMonitorSource: // PowerMonitorSource:
int GetInitialSpeedLimit() override; int GetInitialSpeedLimit() const override;
#endif // BUILDFLAG(IS_WIN) #endif // BUILDFLAG(IS_WIN)
#if BUILDFLAG(IS_MAC) #if BUILDFLAG(IS_MAC)
// PowerMonitorSource: // PowerMonitorSource:
PowerThermalObserver::DeviceThermalState GetCurrentThermalState() override; PowerThermalObserver::DeviceThermalState GetCurrentThermalState()
int GetInitialSpeedLimit() override; const override;
int GetInitialSpeedLimit() const override;
// Retrieves the current battery state to update `is_on_battery_`. // Retrieves the current battery state to update `is_on_battery_`.
void GetBatteryState(); void GetBatteryState();

@ -83,20 +83,20 @@ void JNI_PowerMonitor_OnThermalStatusChanged(JNIEnv* env, int thermal_status) {
} // namespace android } // namespace android
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitorDeviceSource::GetBatteryPowerStatus() { PowerMonitorDeviceSource::GetBatteryPowerStatus() const {
JNIEnv* env = jni_zero::AttachCurrentThread(); JNIEnv* env = jni_zero::AttachCurrentThread();
int battery_power = int battery_power =
base::android::Java_PowerMonitor_getBatteryPowerStatus(env); base::android::Java_PowerMonitor_getBatteryPowerStatus(env);
return static_cast<PowerStateObserver::BatteryPowerStatus>(battery_power); return static_cast<PowerStateObserver::BatteryPowerStatus>(battery_power);
} }
int PowerMonitorDeviceSource::GetRemainingBatteryCapacity() { int PowerMonitorDeviceSource::GetRemainingBatteryCapacity() const {
JNIEnv* env = jni_zero::AttachCurrentThread(); JNIEnv* env = jni_zero::AttachCurrentThread();
return base::android::Java_PowerMonitor_getRemainingBatteryCapacity(env); return base::android::Java_PowerMonitor_getRemainingBatteryCapacity(env);
} }
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
PowerMonitorDeviceSource::GetCurrentThermalState() { PowerMonitorDeviceSource::GetCurrentThermalState() const {
JNIEnv* env = jni_zero::AttachCurrentThread(); JNIEnv* env = jni_zero::AttachCurrentThread();
return android::MapToDeviceThermalState( return android::MapToDeviceThermalState(
android::Java_PowerMonitor_getCurrentThermalStatus(env)); android::Java_PowerMonitor_getCurrentThermalStatus(env));

@ -38,23 +38,24 @@ void PowerMonitorDeviceSource::HandleSystemResumed() {
} }
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitorDeviceSource::GetBatteryPowerStatus() { PowerMonitorDeviceSource::GetBatteryPowerStatus() const {
return g_battery_power_status; return g_battery_power_status;
} }
// static // static
void PowerMonitorDeviceSource::ThermalEventReceived( void PowerMonitorDeviceSource::ThermalEventReceived(
PowerThermalObserver::DeviceThermalState state) { PowerThermalObserver::DeviceThermalState state) {
if (!PowerMonitor::IsInitialized()) { auto* power_monitor = base::PowerMonitor::GetInstance();
PowerMonitor::Initialize(std::make_unique<PowerMonitorDeviceSource>()); if (!power_monitor->IsInitialized()) {
power_monitor->Initialize(std::make_unique<PowerMonitorDeviceSource>());
} }
PowerMonitor::SetCurrentThermalState(state); power_monitor->SetCurrentThermalState(state);
ProcessThermalEvent(state); ProcessThermalEvent(state);
} }
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
PowerMonitorDeviceSource::GetCurrentThermalState() { PowerMonitorDeviceSource::GetCurrentThermalState() const {
return current_thermal_state_; return current_thermal_state_;
} }

@ -11,7 +11,7 @@
namespace base { namespace base {
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitorDeviceSource::GetBatteryPowerStatus() { PowerMonitorDeviceSource::GetBatteryPowerStatus() const {
#if TARGET_IPHONE_SIMULATOR #if TARGET_IPHONE_SIMULATOR
return PowerStateObserver::BatteryPowerStatus::kExternalPower; return PowerStateObserver::BatteryPowerStatus::kExternalPower;
#else #else

@ -20,11 +20,11 @@
namespace base { namespace base {
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
PowerMonitorDeviceSource::GetCurrentThermalState() { PowerMonitorDeviceSource::GetCurrentThermalState() const {
return thermal_state_observer_->GetCurrentThermalState(); return thermal_state_observer_->GetCurrentThermalState();
} }
int PowerMonitorDeviceSource::GetInitialSpeedLimit() { int PowerMonitorDeviceSource::GetInitialSpeedLimit() const {
return thermal_state_observer_->GetCurrentSpeedLimit(); return thermal_state_observer_->GetCurrentSpeedLimit();
} }
@ -96,7 +96,7 @@ void PowerMonitorDeviceSource::PlatformDestroy() {
} }
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitorDeviceSource::GetBatteryPowerStatus() { PowerMonitorDeviceSource::GetBatteryPowerStatus() const {
return battery_power_status_; return battery_power_status_;
} }

@ -8,7 +8,7 @@
namespace base { namespace base {
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitorDeviceSource::GetBatteryPowerStatus() { PowerMonitorDeviceSource::GetBatteryPowerStatus() const {
return PowerStateObserver::BatteryPowerStatus::kExternalPower; return PowerStateObserver::BatteryPowerStatus::kExternalPower;
} }

@ -76,7 +76,7 @@ void PowerMonitorDeviceSource::PlatformDestroy() {
} }
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitorDeviceSource::GetBatteryPowerStatus() { PowerMonitorDeviceSource::GetBatteryPowerStatus() const {
SYSTEM_POWER_STATUS status; SYSTEM_POWER_STATUS status;
if (!::GetSystemPowerStatus(&status)) { if (!::GetSystemPowerStatus(&status)) {
DPLOG(ERROR) << "GetSystemPowerStatus failed"; DPLOG(ERROR) << "GetSystemPowerStatus failed";
@ -87,7 +87,7 @@ PowerMonitorDeviceSource::GetBatteryPowerStatus() {
: PowerStateObserver::BatteryPowerStatus::kExternalPower; : PowerStateObserver::BatteryPowerStatus::kExternalPower;
} }
int PowerMonitorDeviceSource::GetInitialSpeedLimit() { int PowerMonitorDeviceSource::GetInitialSpeedLimit() const {
// Returns the maximum value once at start. Subsequent actual values will be // Returns the maximum value once at start. Subsequent actual values will be
// provided asynchronously via callbacks instead. // provided asynchronously via callbacks instead.
return PowerThermalObserver::kSpeedLimitMax; return PowerThermalObserver::kSpeedLimitMax;

@ -15,11 +15,11 @@ PowerMonitorSource::PowerMonitorSource() = default;
PowerMonitorSource::~PowerMonitorSource() = default; PowerMonitorSource::~PowerMonitorSource() = default;
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
PowerMonitorSource::GetCurrentThermalState() { PowerMonitorSource::GetCurrentThermalState() const {
return PowerThermalObserver::DeviceThermalState::kUnknown; return PowerThermalObserver::DeviceThermalState::kUnknown;
} }
int PowerMonitorSource::GetInitialSpeedLimit() { int PowerMonitorSource::GetInitialSpeedLimit() const {
return PowerThermalObserver::kSpeedLimitMax; return PowerThermalObserver::kSpeedLimitMax;
} }
@ -27,43 +27,47 @@ void PowerMonitorSource::SetCurrentThermalState(
PowerThermalObserver::DeviceThermalState state) {} PowerThermalObserver::DeviceThermalState state) {}
#if BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID)
int PowerMonitorSource::GetRemainingBatteryCapacity() { int PowerMonitorSource::GetRemainingBatteryCapacity() const {
return 0; return 0;
} }
#endif // BUILDFLAG(IS_ANDROID) #endif // BUILDFLAG(IS_ANDROID)
// static // static
void PowerMonitorSource::ProcessPowerEvent(PowerEvent event_id) { void PowerMonitorSource::ProcessPowerEvent(PowerEvent event_id) {
if (!PowerMonitor::IsInitialized()) auto* power_monitor = base::PowerMonitor::GetInstance();
if (!power_monitor->IsInitialized()) {
return; return;
}
switch (event_id) { switch (event_id) {
case POWER_STATE_EVENT: case POWER_STATE_EVENT:
PowerMonitor::NotifyPowerStateChange( power_monitor->NotifyPowerStateChange(
PowerMonitor::Source()->GetBatteryPowerStatus()); power_monitor->Source()->GetBatteryPowerStatus());
break; break;
case RESUME_EVENT: case RESUME_EVENT:
PowerMonitor::NotifyResume(); power_monitor->NotifyResume();
break; break;
case SUSPEND_EVENT: case SUSPEND_EVENT:
PowerMonitor::NotifySuspend(); power_monitor->NotifySuspend();
break; break;
} }
} }
// static // static
void PowerMonitorSource::ProcessThermalEvent( void PowerMonitorSource::ProcessThermalEvent(
PowerThermalObserver::DeviceThermalState new_thermal_state) { PowerThermalObserver::DeviceThermalState new_thermal_state) {
if (!PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
return; power_monitor->IsInitialized()) {
PowerMonitor::NotifyThermalStateChange(new_thermal_state); power_monitor->NotifyThermalStateChange(new_thermal_state);
}
} }
// static // static
void PowerMonitorSource::ProcessSpeedLimitEvent(int speed_limit) { void PowerMonitorSource::ProcessSpeedLimitEvent(int speed_limit) {
if (!PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
return; power_monitor->IsInitialized()) {
PowerMonitor::NotifySpeedLimitChange(speed_limit); power_monitor->NotifySpeedLimitChange(speed_limit);
}
} }
// static // static

@ -31,14 +31,15 @@ class BASE_EXPORT PowerMonitorSource {
// Reads the current DeviceThermalState, if available on the platform. // Reads the current DeviceThermalState, if available on the platform.
// Otherwise, returns kUnknown. // Otherwise, returns kUnknown.
virtual PowerThermalObserver::DeviceThermalState GetCurrentThermalState(); virtual PowerThermalObserver::DeviceThermalState GetCurrentThermalState()
const;
// Reads the initial operating system CPU speed limit, if available on the // Reads the initial operating system CPU speed limit, if available on the
// platform. Otherwise returns PowerThermalObserver::kSpeedLimitMax. // platform. Otherwise returns PowerThermalObserver::kSpeedLimitMax.
// Only called on the main thread in PowerMonitor::Initialize(). // Only called on the main thread in PowerMonitor::Initialize().
// The actual speed limit value will be updated asynchronously via the // The actual speed limit value will be updated asynchronously via the
// ProcessSpeedLimitEvent() if/when the value changes. // ProcessSpeedLimitEvent() if/when the value changes.
virtual int GetInitialSpeedLimit(); virtual int GetInitialSpeedLimit() const;
// Update the result of thermal state. // Update the result of thermal state.
virtual void SetCurrentThermalState( virtual void SetCurrentThermalState(
@ -46,9 +47,9 @@ class BASE_EXPORT PowerMonitorSource {
// Platform-specific method to check whether the system is currently // Platform-specific method to check whether the system is currently
// running on battery power. // running on battery power.
virtual bool IsOnBatteryPower() = 0; virtual bool IsOnBatteryPower() const = 0;
PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus() { PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus() const {
return IsOnBatteryPower() return IsOnBatteryPower()
? PowerStateObserver::BatteryPowerStatus::kBatteryPower ? PowerStateObserver::BatteryPowerStatus::kBatteryPower
: PowerStateObserver::BatteryPowerStatus::kExternalPower; : PowerStateObserver::BatteryPowerStatus::kExternalPower;
@ -56,7 +57,7 @@ class BASE_EXPORT PowerMonitorSource {
#if BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID)
// Read and return the current remaining battery capacity (microampere-hours). // Read and return the current remaining battery capacity (microampere-hours).
virtual int GetRemainingBatteryCapacity(); virtual int GetRemainingBatteryCapacity() const;
#endif // BUILDFLAG(IS_ANDROID) #endif // BUILDFLAG(IS_ANDROID)
static const char* DeviceThermalStateToString( static const char* DeviceThermalStateToString(

@ -40,10 +40,11 @@ TEST_F(PowerMonitorTest, PowerNotifications) {
PowerMonitorInitialize(); PowerMonitorInitialize();
PowerMonitorTestObserver observers[kObservers]; PowerMonitorTestObserver observers[kObservers];
auto* power_monitor = PowerMonitor::GetInstance();
for (auto& index : observers) { for (auto& index : observers) {
PowerMonitor::AddPowerSuspendObserver(&index); power_monitor->AddPowerSuspendObserver(&index);
PowerMonitor::AddPowerStateObserver(&index); power_monitor->AddPowerStateObserver(&index);
PowerMonitor::AddPowerThermalObserver(&index); power_monitor->AddPowerThermalObserver(&index);
} }
// Sending resume when not suspended should have no effect. // Sending resume when not suspended should have no effect.
@ -122,15 +123,16 @@ TEST_F(PowerMonitorTest, PowerNotifications) {
PowerThermalObserver::DeviceThermalState::kFair); PowerThermalObserver::DeviceThermalState::kFair);
for (auto& index : observers) { for (auto& index : observers) {
PowerMonitor::RemovePowerSuspendObserver(&index); power_monitor->RemovePowerSuspendObserver(&index);
PowerMonitor::RemovePowerStateObserver(&index); power_monitor->RemovePowerStateObserver(&index);
PowerMonitor::RemovePowerThermalObserver(&index); power_monitor->RemovePowerThermalObserver(&index);
} }
} }
TEST_F(PowerMonitorTest, ThermalThrottling) { TEST_F(PowerMonitorTest, ThermalThrottling) {
PowerMonitorTestObserver observer; PowerMonitorTestObserver observer;
PowerMonitor::AddPowerThermalObserver(&observer); auto* power_monitor = PowerMonitor::GetInstance();
power_monitor->AddPowerThermalObserver(&observer);
PowerMonitorInitialize(); PowerMonitorInitialize();
@ -147,20 +149,21 @@ TEST_F(PowerMonitorTest, ThermalThrottling) {
EXPECT_EQ(observer.last_thermal_state(), state); EXPECT_EQ(observer.last_thermal_state(), state);
} }
PowerMonitor::RemovePowerThermalObserver(&observer); power_monitor->RemovePowerThermalObserver(&observer);
} }
TEST_F(PowerMonitorTest, AddPowerSuspendObserverBeforeAndAfterInitialization) { TEST_F(PowerMonitorTest, AddPowerSuspendObserverBeforeAndAfterInitialization) {
PowerMonitorTestObserver observer1; PowerMonitorTestObserver observer1;
PowerMonitorTestObserver observer2; PowerMonitorTestObserver observer2;
auto* power_monitor = PowerMonitor::GetInstance();
// An observer is added before the PowerMonitor initialization. // An observer is added before the PowerMonitor initialization.
PowerMonitor::AddPowerSuspendObserver(&observer1); power_monitor->AddPowerSuspendObserver(&observer1);
PowerMonitorInitialize(); PowerMonitorInitialize();
// An observer is added after the PowerMonitor initialization. // An observer is added after the PowerMonitor initialization.
PowerMonitor::AddPowerSuspendObserver(&observer2); power_monitor->AddPowerSuspendObserver(&observer2);
// Simulate suspend/resume notifications. // Simulate suspend/resume notifications.
source().GenerateSuspendEvent(); source().GenerateSuspendEvent();
@ -173,21 +176,22 @@ TEST_F(PowerMonitorTest, AddPowerSuspendObserverBeforeAndAfterInitialization) {
EXPECT_EQ(observer1.resumes(), 1); EXPECT_EQ(observer1.resumes(), 1);
EXPECT_EQ(observer2.resumes(), 1); EXPECT_EQ(observer2.resumes(), 1);
PowerMonitor::RemovePowerSuspendObserver(&observer1); power_monitor->RemovePowerSuspendObserver(&observer1);
PowerMonitor::RemovePowerSuspendObserver(&observer2); power_monitor->RemovePowerSuspendObserver(&observer2);
} }
TEST_F(PowerMonitorTest, AddPowerStateObserverBeforeAndAfterInitialization) { TEST_F(PowerMonitorTest, AddPowerStateObserverBeforeAndAfterInitialization) {
PowerMonitorTestObserver observer1; PowerMonitorTestObserver observer1;
PowerMonitorTestObserver observer2; PowerMonitorTestObserver observer2;
auto* power_monitor = PowerMonitor::GetInstance();
// An observer is added before the PowerMonitor initialization. // An observer is added before the PowerMonitor initialization.
PowerMonitor::AddPowerStateObserver(&observer1); power_monitor->AddPowerStateObserver(&observer1);
PowerMonitorInitialize(); PowerMonitorInitialize();
// An observer is added after the PowerMonitor initialization. // An observer is added after the PowerMonitor initialization.
PowerMonitor::AddPowerStateObserver(&observer2); power_monitor->AddPowerStateObserver(&observer2);
// Simulate power state transitions (e.g. battery on/off). // Simulate power state transitions (e.g. battery on/off).
EXPECT_EQ(observer1.power_state_changes(), 0); EXPECT_EQ(observer1.power_state_changes(), 0);
@ -201,41 +205,43 @@ TEST_F(PowerMonitorTest, AddPowerStateObserverBeforeAndAfterInitialization) {
EXPECT_EQ(observer1.power_state_changes(), 2); EXPECT_EQ(observer1.power_state_changes(), 2);
EXPECT_EQ(observer2.power_state_changes(), 2); EXPECT_EQ(observer2.power_state_changes(), 2);
PowerMonitor::RemovePowerStateObserver(&observer1); power_monitor->RemovePowerStateObserver(&observer1);
PowerMonitor::RemovePowerStateObserver(&observer2); power_monitor->RemovePowerStateObserver(&observer2);
} }
TEST_F(PowerMonitorTest, SuspendStateReturnedFromAddObserver) { TEST_F(PowerMonitorTest, SuspendStateReturnedFromAddObserver) {
PowerMonitorTestObserver observer1; PowerMonitorTestObserver observer1;
PowerMonitorTestObserver observer2; PowerMonitorTestObserver observer2;
auto* power_monitor = PowerMonitor::GetInstance();
PowerMonitorInitialize(); PowerMonitorInitialize();
EXPECT_FALSE( EXPECT_FALSE(power_monitor->AddPowerSuspendObserverAndReturnSuspendedState(
PowerMonitor::AddPowerSuspendObserverAndReturnSuspendedState(&observer1)); &observer1));
source().GenerateSuspendEvent(); source().GenerateSuspendEvent();
EXPECT_TRUE( EXPECT_TRUE(power_monitor->AddPowerSuspendObserverAndReturnSuspendedState(
PowerMonitor::AddPowerSuspendObserverAndReturnSuspendedState(&observer2)); &observer2));
EXPECT_EQ(observer1.suspends(), 1); EXPECT_EQ(observer1.suspends(), 1);
EXPECT_EQ(observer2.suspends(), 0); EXPECT_EQ(observer2.suspends(), 0);
EXPECT_EQ(observer1.resumes(), 0); EXPECT_EQ(observer1.resumes(), 0);
EXPECT_EQ(observer2.resumes(), 0); EXPECT_EQ(observer2.resumes(), 0);
PowerMonitor::RemovePowerSuspendObserver(&observer1); power_monitor->RemovePowerSuspendObserver(&observer1);
PowerMonitor::RemovePowerSuspendObserver(&observer2); power_monitor->RemovePowerSuspendObserver(&observer2);
} }
TEST_F(PowerMonitorTest, PowerStateReturnedFromAddObserver) { TEST_F(PowerMonitorTest, PowerStateReturnedFromAddObserver) {
PowerMonitorTestObserver observer1; PowerMonitorTestObserver observer1;
PowerMonitorTestObserver observer2; PowerMonitorTestObserver observer2;
auto* power_monitor = PowerMonitor::GetInstance();
PowerMonitorInitialize(); PowerMonitorInitialize();
// An observer is added before the on-battery notification. // An observer is added before the on-battery notification.
EXPECT_NE(PowerMonitor::AddPowerStateObserverAndReturnBatteryPowerStatus( EXPECT_NE(power_monitor->AddPowerStateObserverAndReturnBatteryPowerStatus(
&observer1), &observer1),
PowerStateObserver::BatteryPowerStatus::kBatteryPower); PowerStateObserver::BatteryPowerStatus::kBatteryPower);
@ -243,15 +249,15 @@ TEST_F(PowerMonitorTest, PowerStateReturnedFromAddObserver) {
PowerStateObserver::BatteryPowerStatus::kBatteryPower); PowerStateObserver::BatteryPowerStatus::kBatteryPower);
// An observer is added after the on-battery notification. // An observer is added after the on-battery notification.
EXPECT_EQ(PowerMonitor::AddPowerStateObserverAndReturnBatteryPowerStatus( EXPECT_EQ(power_monitor->AddPowerStateObserverAndReturnBatteryPowerStatus(
&observer2), &observer2),
PowerStateObserver::BatteryPowerStatus::kBatteryPower); PowerStateObserver::BatteryPowerStatus::kBatteryPower);
EXPECT_EQ(observer1.power_state_changes(), 1); EXPECT_EQ(observer1.power_state_changes(), 1);
EXPECT_EQ(observer2.power_state_changes(), 0); EXPECT_EQ(observer2.power_state_changes(), 0);
PowerMonitor::RemovePowerStateObserver(&observer1); power_monitor->RemovePowerStateObserver(&observer1);
PowerMonitor::RemovePowerStateObserver(&observer2); power_monitor->RemovePowerStateObserver(&observer2);
} }
} // namespace test } // namespace test

@ -91,7 +91,7 @@ SpeedLimitObserverWin::~SpeedLimitObserverWin() {
timer_.Stop(); timer_.Stop();
} }
int SpeedLimitObserverWin::GetCurrentSpeedLimit() { int SpeedLimitObserverWin::GetCurrentSpeedLimit() const {
const int kSpeedLimitMax = PowerThermalObserver::kSpeedLimitMax; const int kSpeedLimitMax = PowerThermalObserver::kSpeedLimitMax;
int idleness_percent = 0; int idleness_percent = 0;
@ -172,7 +172,7 @@ void SpeedLimitObserverWin::OnTimerTick() {
#endif // BUILDFLAG(ENABLE_BASE_TRACING) #endif // BUILDFLAG(ENABLE_BASE_TRACING)
} }
float SpeedLimitObserverWin::EstimateThrottlingLevel() { float SpeedLimitObserverWin::EstimateThrottlingLevel() const {
float throttling_level = 0.f; float throttling_level = 0.f;
// Populate the PROCESSOR_POWER_INFORMATION structures for all logical CPUs // Populate the PROCESSOR_POWER_INFORMATION structures for all logical CPUs

@ -34,9 +34,9 @@ class BASE_EXPORT SpeedLimitObserverWin final {
~SpeedLimitObserverWin(); ~SpeedLimitObserverWin();
private: private:
int GetCurrentSpeedLimit(); int GetCurrentSpeedLimit() const;
void OnTimerTick(); void OnTimerTick();
float EstimateThrottlingLevel(); float EstimateThrottlingLevel() const;
size_t num_cpus() const { return num_cpus_; } size_t num_cpus() const { return num_cpus_; }
@ -54,7 +54,7 @@ class BASE_EXPORT SpeedLimitObserverWin final {
// sample rate is one sample per seconds but the existing choice is rather // sample rate is one sample per seconds but the existing choice is rather
// ad-hoc and not based on any deeper analysis into exact frequency // ad-hoc and not based on any deeper analysis into exact frequency
// characteristics of the underlying process. // characteristics of the underlying process.
MovingAverage<int, int64_t> moving_average_; mutable MovingAverage<int, int64_t> moving_average_;
// Max speed-limit value is 100 (%) and it is also used in cases where the // Max speed-limit value is 100 (%) and it is also used in cases where the
// native Windows API(s) fail. // native Windows API(s) fail.
int speed_limit_ = PowerThermalObserver::kSpeedLimitMax; int speed_limit_ = PowerThermalObserver::kSpeedLimitMax;

@ -37,7 +37,7 @@ class BASE_EXPORT ThermalStateObserverMac {
~ThermalStateObserverMac(); ~ThermalStateObserverMac();
PowerThermalObserver::DeviceThermalState GetCurrentThermalState(); PowerThermalObserver::DeviceThermalState GetCurrentThermalState();
int GetCurrentSpeedLimit(); int GetCurrentSpeedLimit() const;
private: private:
FRIEND_TEST_ALL_PREFIXES(ThermalStateObserverMacTest, StateChange); FRIEND_TEST_ALL_PREFIXES(ThermalStateObserverMacTest, StateChange);

@ -109,7 +109,7 @@ ThermalStateObserverMac::GetCurrentThermalState() {
return NSProcessInfoThermalStateToDeviceThermalState(nsinfo_state); return NSProcessInfoThermalStateToDeviceThermalState(nsinfo_state);
} }
int ThermalStateObserverMac::GetCurrentSpeedLimit() { int ThermalStateObserverMac::GetCurrentSpeedLimit() const {
apple::ScopedCFTypeRef<CFDictionaryRef> dictionary; apple::ScopedCFTypeRef<CFDictionaryRef> dictionary;
IOReturn result = IOPMCopyCPUPowerStatus(dictionary.InitializeInto()); IOReturn result = IOPMCopyCPUPowerStatus(dictionary.InitializeInto());
if (result != kIOReturnSuccess) { if (result != kIOReturnSuccess) {

@ -28,18 +28,19 @@ bool g_use_thread_controller_power_monitor_ = false;
ThreadControllerPowerMonitor::ThreadControllerPowerMonitor() = default; ThreadControllerPowerMonitor::ThreadControllerPowerMonitor() = default;
ThreadControllerPowerMonitor::~ThreadControllerPowerMonitor() { ThreadControllerPowerMonitor::~ThreadControllerPowerMonitor() {
PowerMonitor::RemovePowerSuspendObserver(this); PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
void ThreadControllerPowerMonitor::BindToCurrentThread() { void ThreadControllerPowerMonitor::BindToCurrentThread() {
// Occasionally registration happens twice (i.e. when the // Occasionally registration happens twice (i.e. when the
// ThreadController::SetDefaultTaskRunner() re-initializes the // ThreadController::SetDefaultTaskRunner() re-initializes the
// ThreadController). // ThreadController).
auto* power_monitor = PowerMonitor::GetInstance();
if (is_observer_registered_) if (is_observer_registered_)
PowerMonitor::RemovePowerSuspendObserver(this); power_monitor->RemovePowerSuspendObserver(this);
// Register the observer to deliver notifications on the current thread. // Register the observer to deliver notifications on the current thread.
PowerMonitor::AddPowerSuspendObserver(this); power_monitor->AddPowerSuspendObserver(this);
is_observer_registered_ = true; is_observer_registered_ = true;
} }

@ -19,9 +19,10 @@ class PowerMonitorTestSource : public PowerMonitorSource {
~PowerMonitorTestSource() override = default; ~PowerMonitorTestSource() override = default;
// Retrieve current states. // Retrieve current states.
PowerThermalObserver::DeviceThermalState GetCurrentThermalState() override; PowerThermalObserver::DeviceThermalState GetCurrentThermalState()
PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus(); const override;
bool IsOnBatteryPower() override; PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus() const;
bool IsOnBatteryPower() const override;
// Sends asynchronous notifications to registered observers. // Sends asynchronous notifications to registered observers.
void Suspend(); void Suspend();
@ -51,7 +52,7 @@ class PowerMonitorTestSource : public PowerMonitorSource {
}; };
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
PowerMonitorTestSource::GetCurrentThermalState() { PowerMonitorTestSource::GetCurrentThermalState() const {
return current_thermal_state_; return current_thermal_state_;
} }
@ -98,11 +99,11 @@ void PowerMonitorTestSource::GenerateResumeEvent() {
} }
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
PowerMonitorTestSource::GetBatteryPowerStatus() { PowerMonitorTestSource::GetBatteryPowerStatus() const {
return test_power_status_; return test_power_status_;
} }
bool PowerMonitorTestSource::IsOnBatteryPower() { bool PowerMonitorTestSource::IsOnBatteryPower() const {
return test_power_status_ == return test_power_status_ ==
PowerStateObserver::BatteryPowerStatus::kBatteryPower; PowerStateObserver::BatteryPowerStatus::kBatteryPower;
} }
@ -123,24 +124,25 @@ void PowerMonitorTestSource::GenerateSpeedLimitEvent(int speed_limit) {
ScopedPowerMonitorTestSource::ScopedPowerMonitorTestSource() { ScopedPowerMonitorTestSource::ScopedPowerMonitorTestSource() {
auto power_monitor_test_source = std::make_unique<PowerMonitorTestSource>(); auto power_monitor_test_source = std::make_unique<PowerMonitorTestSource>();
power_monitor_test_source_ = power_monitor_test_source.get(); power_monitor_test_source_ = power_monitor_test_source.get();
base::PowerMonitor::Initialize(std::move(power_monitor_test_source)); base::PowerMonitor::GetInstance()->Initialize(
std::move(power_monitor_test_source));
} }
ScopedPowerMonitorTestSource::~ScopedPowerMonitorTestSource() { ScopedPowerMonitorTestSource::~ScopedPowerMonitorTestSource() {
base::PowerMonitor::ShutdownForTesting(); base::PowerMonitor::GetInstance()->ShutdownForTesting();
} }
PowerThermalObserver::DeviceThermalState PowerThermalObserver::DeviceThermalState
ScopedPowerMonitorTestSource::GetCurrentThermalState() { ScopedPowerMonitorTestSource::GetCurrentThermalState() const {
return power_monitor_test_source_->GetCurrentThermalState(); return power_monitor_test_source_->GetCurrentThermalState();
} }
bool ScopedPowerMonitorTestSource::IsOnBatteryPower() { bool ScopedPowerMonitorTestSource::IsOnBatteryPower() const {
return power_monitor_test_source_->IsOnBatteryPower(); return power_monitor_test_source_->IsOnBatteryPower();
} }
PowerStateObserver::BatteryPowerStatus PowerStateObserver::BatteryPowerStatus
ScopedPowerMonitorTestSource::GetBatteryPowerStatus() { ScopedPowerMonitorTestSource::GetBatteryPowerStatus() const {
return power_monitor_test_source_->GetBatteryPowerStatus(); return power_monitor_test_source_->GetBatteryPowerStatus();
} }

@ -37,9 +37,9 @@ class ScopedPowerMonitorTestSource {
delete; delete;
// Retrieve current states. // Retrieve current states.
PowerThermalObserver::DeviceThermalState GetCurrentThermalState(); PowerThermalObserver::DeviceThermalState GetCurrentThermalState() const;
bool IsOnBatteryPower(); bool IsOnBatteryPower() const;
PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus(); PowerStateObserver::BatteryPowerStatus GetBatteryPowerStatus() const;
// Sends asynchronous notifications to registered observers. // Sends asynchronous notifications to registered observers.
void Suspend(); void Suspend();

@ -561,7 +561,7 @@ std::string HangWatcher::GetTimeSinceLastSystemPowerResumeCrashKeyValue()
DCHECK_CALLED_ON_VALID_THREAD(hang_watcher_thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(hang_watcher_thread_checker_);
const TimeTicks last_system_power_resume_time = const TimeTicks last_system_power_resume_time =
PowerMonitor::GetLastSystemResumeTime(); PowerMonitor::GetInstance()->GetLastSystemResumeTime();
if (last_system_power_resume_time.is_null()) if (last_system_power_resume_time.is_null())
return "Never suspended"; return "Never suspended";
if (last_system_power_resume_time == TimeTicks::Max()) if (last_system_power_resume_time == TimeTicks::Max())

@ -40,10 +40,11 @@ HighResolutionTimerManager::HighResolutionTimerManager()
// we won't receive power state change callbacks and // we won't receive power state change callbacks and
// hi_res_clock_available_ will remain at its initial value. // hi_res_clock_available_ will remain at its initial value.
if (HighResolutionTimerAllowed()) { if (HighResolutionTimerAllowed()) {
DCHECK(PowerMonitor::IsInitialized()); auto* power_monitor = base::PowerMonitor::GetInstance();
PowerMonitor::AddPowerSuspendObserver(this); DCHECK(power_monitor->IsInitialized());
power_monitor->AddPowerSuspendObserver(this);
const bool on_battery = const bool on_battery =
PowerMonitor::AddPowerStateObserverAndReturnOnBatteryState(this); power_monitor->AddPowerStateObserverAndReturnOnBatteryState(this);
UseHiResClock(!on_battery); UseHiResClock(!on_battery);
// Start polling the high resolution timer usage. // Start polling the high resolution timer usage.
@ -55,8 +56,9 @@ HighResolutionTimerManager::HighResolutionTimerManager()
HighResolutionTimerManager::~HighResolutionTimerManager() { HighResolutionTimerManager::~HighResolutionTimerManager() {
if (HighResolutionTimerAllowed()) { if (HighResolutionTimerAllowed()) {
PowerMonitor::RemovePowerSuspendObserver(this); auto* power_monitor = base::PowerMonitor::GetInstance();
PowerMonitor::RemovePowerStateObserver(this); power_monitor->RemovePowerSuspendObserver(this);
power_monitor->RemovePowerStateObserver(this);
UseHiResClock(false); UseHiResClock(false);
} }
} }

@ -51,14 +51,14 @@ void WallClockTimer::OnResume() {
void WallClockTimer::AddObserver() { void WallClockTimer::AddObserver() {
if (!observer_added_) { if (!observer_added_) {
PowerMonitor::AddPowerSuspendObserver(this); PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
observer_added_ = true; observer_added_ = true;
} }
} }
void WallClockTimer::RemoveObserver() { void WallClockTimer::RemoveObserver() {
if (observer_added_) { if (observer_added_) {
PowerMonitor::RemovePowerSuspendObserver(this); PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
observer_added_ = false; observer_added_ = false;
} }
} }

@ -75,7 +75,7 @@ void OfflineSigninLimiter::SignedIn(UserContext::AuthFlow auth_flow) {
base::BindRepeating(&OfflineSigninLimiter::UpdateLockScreenLimit, base::BindRepeating(&OfflineSigninLimiter::UpdateLockScreenLimit,
base::Unretained(this))); base::Unretained(this)));
// Start listening to power state. // Start listening to power state.
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
// Start listening to session lock state // Start listening to session lock state
auto* session_manager = session_manager::SessionManager::Get(); auto* session_manager = session_manager::SessionManager::Get();
@ -122,7 +122,7 @@ OfflineSigninLimiter::OfflineSigninLimiter(Profile* profile,
std::make_unique<base::WallClockTimer>()) {} std::make_unique<base::WallClockTimer>()) {}
OfflineSigninLimiter::~OfflineSigninLimiter() { OfflineSigninLimiter::~OfflineSigninLimiter() {
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
auto* session_manager = session_manager::SessionManager::Get(); auto* session_manager = session_manager::SessionManager::Get();
if (session_manager) { if (session_manager) {
session_manager->RemoveObserver(this); session_manager->RemoveObserver(this);

@ -39,11 +39,11 @@ OneTimePermissionProvider::OneTimePermissionProvider(
// main function for the browser process is run (which initializes the HCSM). // main function for the browser process is run (which initializes the HCSM).
// For this reason, the PowerMonitor is always initialized before the observer // For this reason, the PowerMonitor is always initialized before the observer
// is added here. // is added here.
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
} }
OneTimePermissionProvider::~OneTimePermissionProvider() { OneTimePermissionProvider::~OneTimePermissionProvider() {
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
// TODO(b/307193732): handle the PartitionKey in all relevant methods, including // TODO(b/307193732): handle the PartitionKey in all relevant methods, including

@ -101,11 +101,11 @@ DownloadDisplayController::DownloadDisplayController(
if (display) { if (display) {
MaybeShowButtonWhenCreated(); MaybeShowButtonWhenCreated();
} }
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
} }
DownloadDisplayController::~DownloadDisplayController() { DownloadDisplayController::~DownloadDisplayController() {
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
void DownloadDisplayController::OnNewItem(bool show_animation) { void DownloadDisplayController::OnNewItem(bool show_animation) {

@ -276,7 +276,7 @@ class ExtensionProtocolsTestBase : public testing::Test,
loader_factory_.reset(); loader_factory_.reset();
content_verifier_->Shutdown(); content_verifier_->Shutdown();
// Shut down the PowerMonitor if initialized. // Shut down the PowerMonitor if initialized.
base::PowerMonitor::ShutdownForTesting(); base::PowerMonitor::GetInstance()->ShutdownForTesting();
} }
GetResult RequestOrLoad(const GURL& url, GetResult RequestOrLoad(const GURL& url,

@ -64,7 +64,7 @@ class PerformanceLogSourceTest : public BrowserWithTestWindowTest {
void SetUp() override { environment_.SetUp(local_state_); } void SetUp() override { environment_.SetUp(local_state_); }
void TearDown() override { void TearDown() override {
base::PowerMonitor::ShutdownForTesting(); base::PowerMonitor::GetInstance()->ShutdownForTesting();
environment_.TearDown(); environment_.TearDown();
} }

@ -300,7 +300,7 @@ void MediaFoundationServiceMonitor::Initialize() {
AddGlobalSample(kSignificantPlayback, base::Time::Now()); AddGlobalSample(kSignificantPlayback, base::Time::Now());
content::ServiceProcessHost::AddObserver(this); content::ServiceProcessHost::AddObserver(this);
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
display::Screen::GetScreen()->AddObserver(this); display::Screen::GetScreen()->AddObserver(this);
} }

@ -57,7 +57,7 @@ ProfileProvider::ProfileProvider()
ProfileProvider::~ProfileProvider() { ProfileProvider::~ProfileProvider() {
ash::LoginState::Get()->RemoveObserver(this); ash::LoginState::Get()->RemoveObserver(this);
chromeos::PowerManagerClient::Get()->RemoveObserver(this); chromeos::PowerManagerClient::Get()->RemoveObserver(this);
base::PowerMonitor::RemovePowerThermalObserver(this); base::PowerMonitor::GetInstance()->RemovePowerThermalObserver(this);
if (jank_monitor_) { if (jank_monitor_) {
jank_monitor_->RemoveObserver(this); jank_monitor_->RemoveObserver(this);
jank_monitor_->Destroy(); jank_monitor_->Destroy();
@ -82,7 +82,8 @@ void ProfileProvider::Init() {
// Register as an observer of thermal state changes. // Register as an observer of thermal state changes.
base::PowerThermalObserver::DeviceThermalState thermal_state = base::PowerThermalObserver::DeviceThermalState thermal_state =
base::PowerMonitor::AddPowerStateObserverAndReturnPowerThermalState(this); base::PowerMonitor::GetInstance()
->AddPowerStateObserverAndReturnPowerThermalState(this);
OnThermalStateChange(thermal_state); OnThermalStateChange(thermal_state);
// Check the login state. At the time of writing, this class is instantiated // Check the login state. At the time of writing, this class is instantiated

@ -63,12 +63,13 @@ TabStatsTracker* g_tab_stats_tracker_instance = nullptr;
void UmaHistogramCounts10000WithBatteryStateVariant(const char* histogram_name, void UmaHistogramCounts10000WithBatteryStateVariant(const char* histogram_name,
size_t value) { size_t value) {
DCHECK(base::PowerMonitor::IsInitialized()); auto* power_monitor = base::PowerMonitor::GetInstance();
DCHECK(power_monitor->IsInitialized());
base::UmaHistogramCounts10000(histogram_name, value); base::UmaHistogramCounts10000(histogram_name, value);
const char* suffix = const char* suffix =
base::PowerMonitor::IsOnBatteryPower() ? ".OnBattery" : ".PluggedIn"; power_monitor->IsOnBatteryPower() ? ".OnBattery" : ".PluggedIn";
base::UmaHistogramCounts10000(base::StrCat({histogram_name, suffix}), value); base::UmaHistogramCounts10000(base::StrCat({histogram_name, suffix}), value);
} }
@ -147,7 +148,7 @@ TabStatsTracker::TabStatsTracker(PrefService* pref_service)
} }
browser_list->AddObserver(this); browser_list->AddObserver(this);
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
// Setup daily reporting of the stats aggregated in |tab_stats_data_store|. // Setup daily reporting of the stats aggregated in |tab_stats_data_store|.
daily_event_->AddObserver(std::make_unique<TabStatsDailyObserver>( daily_event_->AddObserver(std::make_unique<TabStatsDailyObserver>(
@ -169,7 +170,7 @@ TabStatsTracker::TabStatsTracker(PrefService* pref_service)
TabStatsTracker::~TabStatsTracker() { TabStatsTracker::~TabStatsTracker() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
BrowserList::GetInstance()->RemoveObserver(this); BrowserList::GetInstance()->RemoveObserver(this);
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
g_browser_process->GetTabManager()->RemoveObserver(this); g_browser_process->GetTabManager()->RemoveObserver(this);
} }

@ -35,8 +35,9 @@ namespace {
using TabsStats = TabStatsDataStore::TabsStats; using TabsStats = TabStatsDataStore::TabsStats;
std::string GetHistogramNameWithBatteryStateSuffix(const char* histogram_name) { std::string GetHistogramNameWithBatteryStateSuffix(const char* histogram_name) {
const char* suffix = const char* suffix = base::PowerMonitor::GetInstance()->IsOnBatteryPower()
base::PowerMonitor::IsOnBatteryPower() ? ".OnBattery" : ".PluggedIn"; ? ".OnBattery"
: ".PluggedIn";
return base::StrCat({histogram_name, suffix}); return base::StrCat({histogram_name, suffix});
} }

@ -9,13 +9,17 @@
SystemEventProvider::SystemEventProvider(UsageScenarioDataStoreImpl* data_store) SystemEventProvider::SystemEventProvider(UsageScenarioDataStoreImpl* data_store)
: data_store_(data_store) { : data_store_(data_store) {
if (base::PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::AddPowerSuspendObserver(this); power_monitor->IsInitialized()) {
power_monitor->AddPowerSuspendObserver(this);
}
} }
SystemEventProvider::~SystemEventProvider() { SystemEventProvider::~SystemEventProvider() {
if (base::PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::RemovePowerSuspendObserver(this); power_monitor->IsInitialized()) {
power_monitor->RemovePowerSuspendObserver(this);
}
} }
void SystemEventProvider::OnSuspend() { void SystemEventProvider::OnSuspend() {

@ -6,7 +6,7 @@
namespace performance_manager { namespace performance_manager {
bool FakePowerMonitorSource::IsOnBatteryPower() { bool FakePowerMonitorSource::IsOnBatteryPower() const {
return on_battery_power_; return on_battery_power_;
} }

@ -12,7 +12,7 @@ namespace performance_manager {
class FakePowerMonitorSource : public base::PowerMonitorSource { class FakePowerMonitorSource : public base::PowerMonitorSource {
public: public:
bool IsOnBatteryPower() override; bool IsOnBatteryPower() const override;
void SetOnBatteryPower(bool on_battery_power); void SetOnBatteryPower(bool on_battery_power);
private: private:

@ -72,7 +72,7 @@ void TestUserPerformanceTuningManagerEnvironment::SetUp(
#endif #endif
auto source = std::make_unique<FakePowerMonitorSource>(); auto source = std::make_unique<FakePowerMonitorSource>();
power_monitor_source_ = source.get(); power_monitor_source_ = source.get();
base::PowerMonitor::Initialize(std::move(source)); base::PowerMonitor::GetInstance()->Initialize(std::move(source));
if (!sampling_event_source) { if (!sampling_event_source) {
auto test_sampling_event_source = auto test_sampling_event_source =
@ -114,7 +114,7 @@ void TestUserPerformanceTuningManagerEnvironment::TearDown() {
user_performance_tuning_manager_.reset(); user_performance_tuning_manager_.reset();
battery_saver_mode_manager_.reset(); battery_saver_mode_manager_.reset();
battery_sampler_.reset(); battery_sampler_.reset();
base::PowerMonitor::ShutdownForTesting(); base::PowerMonitor::GetInstance()->ShutdownForTesting();
#if BUILDFLAG(IS_CHROMEOS_ASH) #if BUILDFLAG(IS_CHROMEOS_ASH)
if (tear_down_power_manager_client_) { if (tear_down_power_manager_client_) {
chromeos::PowerManagerClient::Shutdown(); chromeos::PowerManagerClient::Shutdown();

@ -212,7 +212,8 @@ class DesktopBatterySaverProvider
base::Unretained(this))); base::Unretained(this)));
on_battery_power_ = on_battery_power_ =
base::PowerMonitor::AddPowerStateObserverAndReturnOnBatteryState(this); base::PowerMonitor::GetInstance()
->AddPowerStateObserverAndReturnOnBatteryState(this);
base::BatteryStateSampler* battery_state_sampler = base::BatteryStateSampler* battery_state_sampler =
base::BatteryStateSampler::Get(); base::BatteryStateSampler::Get();
@ -226,7 +227,7 @@ class DesktopBatterySaverProvider
} }
~DesktopBatterySaverProvider() override { ~DesktopBatterySaverProvider() override {
base::PowerMonitor::RemovePowerStateObserver(this); base::PowerMonitor::GetInstance()->RemovePowerStateObserver(this);
} }
// BatterySaverProvider: // BatterySaverProvider:

@ -119,7 +119,7 @@ class BatterySaverModeManagerTest : public ::testing::Test {
void SetUp() override { void SetUp() override {
auto source = std::make_unique<FakePowerMonitorSource>(); auto source = std::make_unique<FakePowerMonitorSource>();
power_monitor_source_ = source.get(); power_monitor_source_ = source.get();
base::PowerMonitor::Initialize(std::move(source)); base::PowerMonitor::GetInstance()->Initialize(std::move(source));
performance_manager::user_tuning::prefs::RegisterLocalStatePrefs( performance_manager::user_tuning::prefs::RegisterLocalStatePrefs(
local_state_.registry()); local_state_.registry());
@ -147,7 +147,9 @@ class BatterySaverModeManagerTest : public ::testing::Test {
manager()->Start(); manager()->Start();
} }
void TearDown() override { base::PowerMonitor::ShutdownForTesting(); } void TearDown() override {
base::PowerMonitor::GetInstance()->ShutdownForTesting();
}
BatterySaverModeManager* manager() { BatterySaverModeManager* manager() {
return BatterySaverModeManager::GetInstance(); return BatterySaverModeManager::GetInstance();

@ -93,8 +93,8 @@ bool IsPreconnectExpensive() {
#if BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID)
// Preconnecting is expensive while on battery power and cellular data and // Preconnecting is expensive while on battery power and cellular data and
// the radio signal is weak. // the radio signal is weak.
if ((base::PowerMonitor::IsInitialized() && if (auto* power_monitor = base::PowerMonitor::GetInstance();
!base::PowerMonitor::IsOnBatteryPower()) || (power_monitor->IsInitialized() && !power_monitor->IsOnBatteryPower()) ||
(base::android::RadioUtils::GetConnectionType() != (base::android::RadioUtils::GetConnectionType() !=
base::android::RadioConnectionType::kCell)) { base::android::RadioConnectionType::kCell)) {
return false; return false;

@ -55,11 +55,11 @@ class SmartCardPermissionContext::PowerSuspendObserver
public: public:
explicit PowerSuspendObserver(SmartCardPermissionContext& permission_context) explicit PowerSuspendObserver(SmartCardPermissionContext& permission_context)
: permission_context_(permission_context) { : permission_context_(permission_context) {
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
} }
~PowerSuspendObserver() override { ~PowerSuspendObserver() override {
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
void OnSuspend() override { void OnSuspend() override {

@ -196,7 +196,7 @@ class RelaunchNotificationControllerTest : public ::testing::Test {
// Unittests failed when the system is on battery. This class is using a // Unittests failed when the system is on battery. This class is using a
// mock power monitor source `power_monitor_source_` to ensure no real // mock power monitor source `power_monitor_source_` to ensure no real
// power state or power notifications are delivered to the unittests. // power state or power notifications are delivered to the unittests.
EXPECT_FALSE(base::PowerMonitor::IsOnBatteryPower()); EXPECT_FALSE(base::PowerMonitor::GetInstance()->IsOnBatteryPower());
} }
UpgradeDetector* upgrade_detector() { return &upgrade_detector_; } UpgradeDetector* upgrade_detector() { return &upgrade_detector_; }

@ -109,7 +109,7 @@ WebAppMetrics::WebAppMetrics(Profile* profile)
icon_health_checks_(profile), icon_health_checks_(profile),
browser_tab_strip_tracker_(this, nullptr) { browser_tab_strip_tracker_(this, nullptr) {
browser_tab_strip_tracker_.Init(); browser_tab_strip_tracker_.Init();
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
BrowserList::AddObserver(this); BrowserList::AddObserver(this);
// This isn't around on ChromeOS or tests. // This isn't around on ChromeOS or tests.
if (metrics::DesktopSessionDurationTracker::IsInitialized()) { if (metrics::DesktopSessionDurationTracker::IsInitialized()) {
@ -133,7 +133,7 @@ WebAppMetrics::WebAppMetrics(Profile* profile)
WebAppMetrics::~WebAppMetrics() { WebAppMetrics::~WebAppMetrics() {
BrowserList::RemoveObserver(this); BrowserList::RemoveObserver(this);
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
if (metrics::DesktopSessionDurationTracker::IsInitialized()) { if (metrics::DesktopSessionDurationTracker::IsInitialized()) {
metrics::DesktopSessionDurationTracker::Get()->RemoveObserver(this); metrics::DesktopSessionDurationTracker::Get()->RemoveObserver(this);
} }

@ -87,7 +87,7 @@ class ChromeUnitTestSuiteInitializer : public testing::EmptyTestEventListener {
void OnTestEnd(const testing::TestInfo& test_info) override { void OnTestEnd(const testing::TestInfo& test_info) override {
TestingBrowserProcess::TearDownAndDeleteInstance(); TestingBrowserProcess::TearDownAndDeleteInstance();
// Some tests cause ChildThreadImpl to initialize a PowerMonitor. // Some tests cause ChildThreadImpl to initialize a PowerMonitor.
base::PowerMonitor::ShutdownForTesting(); base::PowerMonitor::GetInstance()->ShutdownForTesting();
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
// Running tests locally on Windows machines with some degree of // Running tests locally on Windows machines with some degree of
// accessibility enabled can cause this flag to become implicitly set. // accessibility enabled can cause this flag to become implicitly set.

@ -65,7 +65,7 @@ FeatureUsageMetrics::FeatureUsageMetrics(const std::string& feature_name,
// Schedule the first run some time in the future to not overload startup // Schedule the first run some time in the future to not overload startup
// flow. // flow.
SetupTimer(kInitialInterval); SetupTimer(kInitialInterval);
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
} }
void FeatureUsageMetrics::SetupTimer(base::TimeDelta delta) { void FeatureUsageMetrics::SetupTimer(base::TimeDelta delta) {
@ -77,7 +77,7 @@ void FeatureUsageMetrics::SetupTimer(base::TimeDelta delta) {
FeatureUsageMetrics::~FeatureUsageMetrics() { FeatureUsageMetrics::~FeatureUsageMetrics() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
MaybeReportUseTime(); MaybeReportUseTime();
} }

@ -31,8 +31,9 @@ class FeatureUsageMetricsTest : public ::testing::Test,
public FeatureUsageMetrics::Delegate { public FeatureUsageMetrics::Delegate {
public: public:
FeatureUsageMetricsTest() { FeatureUsageMetricsTest() {
if (!base::PowerMonitor::IsInitialized()) { if (auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::Initialize( !power_monitor->IsInitialized()) {
power_monitor->Initialize(
std::make_unique<base::PowerMonitorDeviceSource>()); std::make_unique<base::PowerMonitorDeviceSource>());
} }

@ -269,7 +269,7 @@ TimeZoneResolver::TimeZoneResolverImpl::TimeZoneResolverImpl(
DCHECK(!resolver_->apply_timezone().is_null()); DCHECK(!resolver_->apply_timezone().is_null());
DCHECK(!resolver_->delay_network_call().is_null()); DCHECK(!resolver_->delay_network_call().is_null());
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
const int64_t last_refresh_at_us = const int64_t last_refresh_at_us =
resolver_->local_state()->GetInt64(kLastTimeZoneRefreshTime); resolver_->local_state()->GetInt64(kLastTimeZoneRefreshTime);
@ -285,7 +285,7 @@ TimeZoneResolver::TimeZoneResolverImpl::TimeZoneResolverImpl(
} }
TimeZoneResolver::TimeZoneResolverImpl::~TimeZoneResolverImpl() { TimeZoneResolver::TimeZoneResolverImpl::~TimeZoneResolverImpl() {
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
void TimeZoneResolver::TimeZoneResolverImpl::Start() { void TimeZoneResolver::TimeZoneResolverImpl::Start() {

@ -80,7 +80,7 @@ WifiSyncNotificationController::WifiSyncNotificationController(
delegate_notifier_(delegate_notifier) { delegate_notifier_(delegate_notifier) {
if (pref_service_->GetBoolean(kCanShowWifiSyncAnnouncementPrefName)) { if (pref_service_->GetBoolean(kCanShowWifiSyncAnnouncementPrefName)) {
session_manager::SessionManager::Get()->AddObserver(this); session_manager::SessionManager::Get()->AddObserver(this);
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
did_register_session_observers_ = true; did_register_session_observers_ = true;
} }
} }
@ -88,7 +88,7 @@ WifiSyncNotificationController::WifiSyncNotificationController(
WifiSyncNotificationController::~WifiSyncNotificationController() { WifiSyncNotificationController::~WifiSyncNotificationController() {
if (did_register_session_observers_) { if (did_register_session_observers_) {
session_manager::SessionManager::Get()->RemoveObserver(this); session_manager::SessionManager::Get()->RemoveObserver(this);
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
} }

@ -772,7 +772,7 @@ TEST_F(PowerManagerClientTest, ChangeAmbientColorTemperature) {
TEST_F(PowerManagerClientTest, ChangeThermalState) { TEST_F(PowerManagerClientTest, ChangeThermalState) {
base::test::ScopedPowerMonitorTestSource power_monitor_source; base::test::ScopedPowerMonitorTestSource power_monitor_source;
PowerMonitorTestObserverLocal observer; PowerMonitorTestObserverLocal observer;
base::PowerMonitor::AddPowerThermalObserver(&observer); base::PowerMonitor::GetInstance()->AddPowerThermalObserver(&observer);
typedef struct { typedef struct {
power_manager::ThermalEvent::ThermalState dbus_state; power_manager::ThermalEvent::ThermalState dbus_state;
@ -810,7 +810,7 @@ TEST_F(PowerManagerClientTest, ChangeThermalState) {
EXPECT_EQ(observer.GetThermalState(), p.expected_state); EXPECT_EQ(observer.GetThermalState(), p.expected_state);
} }
base::PowerMonitor::RemovePowerThermalObserver(&observer); base::PowerMonitor::GetInstance()->RemovePowerThermalObserver(&observer);
} }
// Test that |RequestSuspend| calls the DBus method with the same name. // Test that |RequestSuspend| calls the DBus method with the same name.

@ -24,7 +24,7 @@ class BatteryStatusListener {
virtual int GetBatteryPercentage() = 0; virtual int GetBatteryPercentage() = 0;
// Is the device is using battery power instead of charging. // Is the device is using battery power instead of charging.
virtual bool IsOnBatteryPower() = 0; virtual bool IsOnBatteryPower() const = 0;
// Start/Stop to listen to battery status changes. // Start/Stop to listen to battery status changes.
virtual void Start(Observer* observer) = 0; virtual void Start(Observer* observer) = 0;

@ -22,21 +22,22 @@ int BatteryStatusListenerImpl::GetBatteryPercentage() {
return battery_percentage_; return battery_percentage_;
} }
bool BatteryStatusListenerImpl::IsOnBatteryPower() { bool BatteryStatusListenerImpl::IsOnBatteryPower() const {
return base::PowerMonitor::IsOnBatteryPower(); return base::PowerMonitor::GetInstance()->IsOnBatteryPower();
} }
void BatteryStatusListenerImpl::Start(Observer* observer) { void BatteryStatusListenerImpl::Start(Observer* observer) {
observer_ = observer; observer_ = observer;
DCHECK(base::PowerMonitor::IsInitialized()); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::AddPowerStateObserver(this); DCHECK(power_monitor->IsInitialized());
power_monitor->AddPowerStateObserver(this);
UpdateBatteryPercentage(true); UpdateBatteryPercentage(true);
} }
void BatteryStatusListenerImpl::Stop() { void BatteryStatusListenerImpl::Stop() {
base::PowerMonitor::RemovePowerStateObserver(this); base::PowerMonitor::GetInstance()->RemovePowerStateObserver(this);
} }
int BatteryStatusListenerImpl::GetBatteryPercentageInternal() { int BatteryStatusListenerImpl::GetBatteryPercentageInternal() {

@ -33,7 +33,7 @@ class BatteryStatusListenerImpl : public BatteryStatusListener,
private: private:
// BatteryStatusListener implementation. // BatteryStatusListener implementation.
int GetBatteryPercentage() override; int GetBatteryPercentage() override;
bool IsOnBatteryPower() override; bool IsOnBatteryPower() const override;
void Start(Observer* observer) override; void Start(Observer* observer) override;
void Stop() override; void Stop() override;

@ -14,7 +14,7 @@ int BatteryStatusListenerMac::GetBatteryPercentage() {
return 100; return 100;
} }
bool BatteryStatusListenerMac::IsOnBatteryPower() { bool BatteryStatusListenerMac::IsOnBatteryPower() const {
return false; return false;
} }

@ -25,7 +25,7 @@ class BatteryStatusListenerMac : public BatteryStatusListener {
private: private:
// BatteryStatusListener implementation. // BatteryStatusListener implementation.
int GetBatteryPercentage() override; int GetBatteryPercentage() override;
bool IsOnBatteryPower() override; bool IsOnBatteryPower() const override;
void Start(Observer* observer) override; void Start(Observer* observer) override;
void Stop() override; void Stop() override;
}; };

@ -31,7 +31,7 @@ int NaClMain(content::MainFunctionParams parameters) {
base::SingleThreadTaskExecutor main_task_executor(base::MessagePumpType::IO); base::SingleThreadTaskExecutor main_task_executor(base::MessagePumpType::IO);
base::PlatformThread::SetName("CrNaClMain"); base::PlatformThread::SetName("CrNaClMain");
base::PowerMonitor::Initialize(MakePowerMonitorDeviceSource()); base::PowerMonitor::GetInstance()->Initialize(MakePowerMonitorDeviceSource());
base::HighResolutionTimerManager hi_res_timer_manager; base::HighResolutionTimerManager hi_res_timer_manager;
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)

@ -47,7 +47,7 @@ PowerMonitorDeviceSourceLinux::~PowerMonitorDeviceSourceLinux() {
ShutdownBus(); ShutdownBus();
} }
bool PowerMonitorDeviceSourceLinux::IsOnBatteryPower() { bool PowerMonitorDeviceSourceLinux::IsOnBatteryPower() const {
// TODO(crbug.com/40836663): Use org.freedesktop.UPower to check for // TODO(crbug.com/40836663): Use org.freedesktop.UPower to check for
// OnBattery. One possibility is to connect to the DeviceService's // OnBattery. One possibility is to connect to the DeviceService's
// BatteryMonitor. // BatteryMonitor.

@ -27,7 +27,7 @@ class PowerMonitorDeviceSourceLinux : public base::PowerMonitorSource {
~PowerMonitorDeviceSourceLinux() override; ~PowerMonitorDeviceSourceLinux() override;
// base::PowerMonitorSource: // base::PowerMonitorSource:
bool IsOnBatteryPower() override; bool IsOnBatteryPower() const override;
private: private:
void ShutdownBus(); void ShutdownBus();

@ -813,8 +813,8 @@ DCLayerOverlayProcessor::DCLayerOverlayProcessor(
: has_overlay_support_(skip_initialization_for_testing), : has_overlay_support_(skip_initialization_for_testing),
allowed_yuv_overlay_count_(allowed_yuv_overlay_count), allowed_yuv_overlay_count_(allowed_yuv_overlay_count),
is_on_battery_power_( is_on_battery_power_(
base::PowerMonitor::AddPowerStateObserverAndReturnOnBatteryState( base::PowerMonitor::GetInstance()
this)), ->AddPowerStateObserverAndReturnOnBatteryState(this)),
no_undamaged_overlay_promotion_(base::FeatureList::IsEnabled( no_undamaged_overlay_promotion_(base::FeatureList::IsEnabled(
features::kNoUndamagedOverlayPromotion)) { features::kNoUndamagedOverlayPromotion)) {
if (!skip_initialization_for_testing) { if (!skip_initialization_for_testing) {
@ -829,7 +829,7 @@ DCLayerOverlayProcessor::DCLayerOverlayProcessor(
DCLayerOverlayProcessor::~DCLayerOverlayProcessor() { DCLayerOverlayProcessor::~DCLayerOverlayProcessor() {
gl::DirectCompositionOverlayCapsMonitor::GetInstance()->RemoveObserver(this); gl::DirectCompositionOverlayCapsMonitor::GetInstance()->RemoveObserver(this);
base::PowerMonitor::RemovePowerStateObserver(this); base::PowerMonitor::GetInstance()->RemovePowerStateObserver(this);
} }
void DCLayerOverlayProcessor::UpdateHasHwOverlaySupport() { void DCLayerOverlayProcessor::UpdateHasHwOverlaySupport() {

@ -88,7 +88,7 @@ VizMainImpl::VizMainImpl(Delegate* delegate,
// split into separate processes. Until then this is necessary to be able to // split into separate processes. Until then this is necessary to be able to
// run Mushrome (chrome with mus) with Mus running in the browser process. // run Mushrome (chrome with mus) with Mus running in the browser process.
if (dependencies_.power_monitor_source) { if (dependencies_.power_monitor_source) {
base::PowerMonitor::Initialize( base::PowerMonitor::GetInstance()->Initialize(
std::move(dependencies_.power_monitor_source)); std::move(dependencies_.power_monitor_source));
} }

@ -74,7 +74,7 @@ class MockPowerMonitorSource : public base::PowerMonitorSource {
~MockPowerMonitorSource() override { *leak_guard_ = false; } ~MockPowerMonitorSource() override { *leak_guard_ = false; }
bool IsOnBatteryPower() override { return false; } bool IsOnBatteryPower() const override { return false; }
private: private:
// An external flag to signal as to whether or not this object is still // An external flag to signal as to whether or not this object is still
@ -129,8 +129,9 @@ TEST(VizMainImplTest, OopVizDependencyInjection) {
builder.Record(recorder); builder.Record(recorder);
// Need to shutdown the |PowerMonitor| infrastructure. // Need to shutdown the |PowerMonitor| infrastructure.
EXPECT_TRUE(base::PowerMonitor::IsInitialized()); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::ShutdownForTesting(); EXPECT_TRUE(power_monitor->IsInitialized());
power_monitor->ShutdownForTesting();
// Double-check that we're not leaking the MockPowerMonitorSource // Double-check that we're not leaking the MockPowerMonitorSource
// instance. // instance.
ASSERT_FALSE(mock_source_is_alive); ASSERT_FALSE(mock_source_is_alive);

@ -1248,7 +1248,8 @@ int ContentMainRunnerImpl::RunBrowser(MainFunctionParams main_params,
// PowerMonitor is needed in reduced mode. BrowserMainLoop will safely skip // PowerMonitor is needed in reduced mode. BrowserMainLoop will safely skip
// initializing it again if it has already been initialized. // initializing it again if it has already been initialized.
base::PowerMonitor::Initialize(MakePowerMonitorDeviceSource()); base::PowerMonitor::GetInstance()->Initialize(
MakePowerMonitorDeviceSource());
// Ensure the visibility tracker is created on the main thread. // Ensure the visibility tracker is created on the main thread.
ProcessVisibilityTracker::GetInstance(); ProcessVisibilityTracker::GetInstance();

@ -182,9 +182,10 @@ AndroidBatteryMetrics::~AndroidBatteryMetrics() {
void AndroidBatteryMetrics::InitializeOnSequence() { void AndroidBatteryMetrics::InitializeOnSequence() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
auto* power_monitor = base::PowerMonitor::GetInstance();
on_battery_power_ = on_battery_power_ =
base::PowerMonitor::AddPowerStateObserverAndReturnOnBatteryState(this); power_monitor->AddPowerStateObserverAndReturnOnBatteryState(this);
base::PowerMonitor::AddPowerThermalObserver(this); power_monitor->AddPowerThermalObserver(this);
content::ProcessVisibilityTracker::GetInstance()->AddObserver(this); content::ProcessVisibilityTracker::GetInstance()->AddObserver(this);
// TODO(b/339859756): Update this call to take into account the unknown battery // TODO(b/339859756): Update this call to take into account the unknown battery
// status. // status.
@ -234,7 +235,7 @@ void AndroidBatteryMetrics::UpdateMetricsEnabled() {
if (should_be_enabled && !metrics_timer_.IsRunning()) { if (should_be_enabled && !metrics_timer_.IsRunning()) {
// Capture first capacity measurement and enable the repeating timer. // Capture first capacity measurement and enable the repeating timer.
last_remaining_capacity_uah_ = last_remaining_capacity_uah_ =
base::PowerMonitor::GetRemainingBatteryCapacity(); base::PowerMonitor::GetInstance()->GetRemainingBatteryCapacity();
skipped_timers_ = 0; skipped_timers_ = 0;
observed_capacity_drops_ = 0; observed_capacity_drops_ = 0;
@ -252,7 +253,7 @@ void AndroidBatteryMetrics::UpdateMetricsEnabled() {
void AndroidBatteryMetrics::CaptureAndReportMetrics(bool disabling) { void AndroidBatteryMetrics::CaptureAndReportMetrics(bool disabling) {
int remaining_capacity_uah = int remaining_capacity_uah =
base::PowerMonitor::GetRemainingBatteryCapacity(); base::PowerMonitor::GetInstance()->GetRemainingBatteryCapacity();
if (remaining_capacity_uah >= last_remaining_capacity_uah_) { if (remaining_capacity_uah >= last_remaining_capacity_uah_) {
// No change in battery capacity, or it increased. The latter could happen // No change in battery capacity, or it increased. The latter could happen

@ -668,8 +668,10 @@ void BrowserMainLoop::PostCreateMainMessageLoop() {
} }
{ {
TRACE_EVENT0("startup", "BrowserMainLoop::Subsystem:PowerMonitor"); TRACE_EVENT0("startup", "BrowserMainLoop::Subsystem:PowerMonitor");
if (!base::PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::Initialize(MakePowerMonitorDeviceSource()); !power_monitor->IsInitialized()) {
power_monitor->Initialize(MakePowerMonitorDeviceSource());
}
} }
{ {
TRACE_EVENT0("startup", "BrowserMainLoop::Subsystem:HighResTimerManager"); TRACE_EVENT0("startup", "BrowserMainLoop::Subsystem:HighResTimerManager");

@ -51,8 +51,10 @@ void BrowserFeatureProvider::AddFeatures(FeatureVector features,
static_cast<int>(net::NetworkChangeNotifier::GetConnectionType())); static_cast<int>(net::NetworkChangeNotifier::GetConnectionType()));
} else if (desc.name == FeatureLibrary::BatteryPower().name) { } else if (desc.name == FeatureLibrary::BatteryPower().name) {
bool is_battery = false; bool is_battery = false;
if (base::PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
is_battery = base::PowerMonitor::IsOnBatteryPower(); power_monitor->IsInitialized()) {
is_battery = power_monitor->IsOnBatteryPower();
}
features[i] = FeatureValue(is_battery); features[i] = FeatureValue(is_battery);
} }
} }

@ -17,13 +17,15 @@ void SendLogMessage(const std::string& message) {
} // namespace } // namespace
MediaStreamPowerLogger::MediaStreamPowerLogger() { MediaStreamPowerLogger::MediaStreamPowerLogger() {
base::PowerMonitor::AddPowerSuspendObserver(this); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::AddPowerThermalObserver(this); power_monitor->AddPowerSuspendObserver(this);
power_monitor->AddPowerThermalObserver(this);
} }
MediaStreamPowerLogger::~MediaStreamPowerLogger() { MediaStreamPowerLogger::~MediaStreamPowerLogger() {
base::PowerMonitor::RemovePowerSuspendObserver(this); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::RemovePowerThermalObserver(this); power_monitor->RemovePowerSuspendObserver(this);
power_monitor->RemovePowerThermalObserver(this);
} }
void MediaStreamPowerLogger::OnSuspend() { void MediaStreamPowerLogger::OnSuspend() {

@ -75,10 +75,11 @@ PeerConnectionTrackerHost::PeerConnectionTrackerHost(RenderFrameHost* frame)
peer_pid_(frame->GetProcess()->GetProcess().Pid()) { peer_pid_(frame->GetProcess()->GetProcess().Pid()) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
RegisterHost(this); RegisterHost(this);
base::PowerMonitor::AddPowerSuspendObserver(this); auto* power_monitor = base::PowerMonitor::GetInstance();
power_monitor->AddPowerSuspendObserver(this);
// Ensure that the initial thermal state is known by the |tracker_|. // Ensure that the initial thermal state is known by the |tracker_|.
base::PowerThermalObserver::DeviceThermalState initial_thermal_state = base::PowerThermalObserver::DeviceThermalState initial_thermal_state =
base::PowerMonitor::AddPowerStateObserverAndReturnPowerThermalState(this); power_monitor->AddPowerStateObserverAndReturnPowerThermalState(this);
frame->GetRemoteInterfaces()->GetInterface( frame->GetRemoteInterfaces()->GetInterface(
tracker_.BindNewPipeAndPassReceiver()); tracker_.BindNewPipeAndPassReceiver());
@ -91,8 +92,9 @@ PeerConnectionTrackerHost::PeerConnectionTrackerHost(RenderFrameHost* frame)
PeerConnectionTrackerHost::~PeerConnectionTrackerHost() { PeerConnectionTrackerHost::~PeerConnectionTrackerHost() {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
RemoveHost(this); RemoveHost(this);
base::PowerMonitor::RemovePowerSuspendObserver(this); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::RemovePowerThermalObserver(this); power_monitor->RemovePowerSuspendObserver(this);
power_monitor->RemovePowerThermalObserver(this);
} }
void PeerConnectionTrackerHost::AddPeerConnection( void PeerConnectionTrackerHost::AddPeerConnection(

@ -706,12 +706,13 @@ void ChildThreadImpl::Init(const Options& options) {
} }
// In single process mode we may already have initialized the power monitor, // In single process mode we may already have initialized the power monitor,
if (!base::PowerMonitor::IsInitialized()) { if (auto* power_monitor = base::PowerMonitor::GetInstance();
!power_monitor->IsInitialized()) {
auto power_monitor_source = auto power_monitor_source =
std::make_unique<device::PowerMonitorBroadcastSource>( std::make_unique<device::PowerMonitorBroadcastSource>(
GetIOTaskRunner()); GetIOTaskRunner());
auto* source_ptr = power_monitor_source.get(); auto* source_ptr = power_monitor_source.get();
base::PowerMonitor::Initialize(std::move(power_monitor_source)); power_monitor->Initialize(std::move(power_monitor_source));
// The two-phase init is necessary to ensure that the process-wide // The two-phase init is necessary to ensure that the process-wide
// PowerMonitor is set before the power monitor source receives incoming // PowerMonitor is set before the power monitor source receives incoming
// communication from the browser process (see https://crbug.com/821790 for // communication from the browser process (see https://crbug.com/821790 for

@ -84,7 +84,7 @@ ChildThreadImpl::Options GetOptions(
viz::VizMainImpl::ExternalDependencies CreateVizMainDependencies() { viz::VizMainImpl::ExternalDependencies CreateVizMainDependencies() {
viz::VizMainImpl::ExternalDependencies deps; viz::VizMainImpl::ExternalDependencies deps;
if (!base::PowerMonitor::IsInitialized()) { if (!base::PowerMonitor::GetInstance()->IsInitialized()) {
deps.power_monitor_source = deps.power_monitor_source =
std::make_unique<base::PowerMonitorDeviceSource>(); std::make_unique<base::PowerMonitorDeviceSource>();
} }

@ -20,11 +20,11 @@ void PowerMonitorTestImpl::MakeSelfOwnedReceiver(
} }
PowerMonitorTestImpl::PowerMonitorTestImpl() { PowerMonitorTestImpl::PowerMonitorTestImpl() {
base::PowerMonitor::AddPowerStateObserver(this); base::PowerMonitor::GetInstance()->AddPowerStateObserver(this);
} }
PowerMonitorTestImpl::~PowerMonitorTestImpl() { PowerMonitorTestImpl::~PowerMonitorTestImpl() {
base::PowerMonitor::RemovePowerStateObserver(this); base::PowerMonitor::GetInstance()->RemovePowerStateObserver(this);
} }
void PowerMonitorTestImpl::QueryNextState(QueryNextStateCallback callback) { void PowerMonitorTestImpl::QueryNextState(QueryNextStateCallback callback) {

@ -388,7 +388,7 @@ int UtilityMain(MainFunctionParams parameters) {
// base::HighResolutionTimerManager here for future possible usage of high // base::HighResolutionTimerManager here for future possible usage of high
// resolution timer in service utility process. // resolution timer in service utility process.
std::optional<base::HighResolutionTimerManager> hi_res_timer_manager; std::optional<base::HighResolutionTimerManager> hi_res_timer_manager;
if (base::PowerMonitor::IsInitialized()) { if (base::PowerMonitor::GetInstance()->IsInitialized()) {
hi_res_timer_manager.emplace(); hi_res_timer_manager.emplace();
} }

@ -62,7 +62,7 @@ HeartbeatManager::HeartbeatManager(
HeartbeatManager::~HeartbeatManager() { HeartbeatManager::~HeartbeatManager() {
// Stop listening for system suspend and resume events. // Stop listening for system suspend and resume events.
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
void HeartbeatManager::Start( void HeartbeatManager::Start(
@ -74,7 +74,7 @@ void HeartbeatManager::Start(
trigger_reconnect_callback_ = trigger_reconnect_callback; trigger_reconnect_callback_ = trigger_reconnect_callback;
// Listen for system suspend and resume events. // Listen for system suspend and resume events.
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
// Calculated the heartbeat interval just before we start the timer. // Calculated the heartbeat interval just before we start the timer.
UpdateHeartbeatInterval(); UpdateHeartbeatInterval();
@ -90,7 +90,7 @@ void HeartbeatManager::Stop() {
heartbeat_timer_->Stop(); heartbeat_timer_->Stop();
waiting_for_ack_ = false; waiting_for_ack_ = false;
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
void HeartbeatManager::OnHeartbeatAcked() { void HeartbeatManager::OnHeartbeatAcked() {

@ -1628,8 +1628,9 @@ wgpu::Adapter WebGPUDecoderImpl::CreatePreferredAdapter(
case WebGPUPowerPreference::kNone: case WebGPUPowerPreference::kNone:
if (power_preference == wgpu::PowerPreference::Undefined) { if (power_preference == wgpu::PowerPreference::Undefined) {
// If on battery power, default to the integrated GPU. // If on battery power, default to the integrated GPU.
if (!base::PowerMonitor::IsInitialized() || if (auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::IsOnBatteryPower()) { !power_monitor->IsInitialized() ||
power_monitor->IsOnBatteryPower()) {
power_preference = wgpu::PowerPreference::LowPower; power_preference = wgpu::PowerPreference::LowPower;
} else { } else {
power_preference = wgpu::PowerPreference::HighPerformance; power_preference = wgpu::PowerPreference::HighPerformance;

@ -127,7 +127,7 @@ DCOMPTexture::DCOMPTexture(
IPC::ScopedAllowOffSequenceChannelAssociatedBindings allow_binding; IPC::ScopedAllowOffSequenceChannelAssociatedBindings allow_binding;
receiver_.Bind(std::move(receiver), runner); receiver_.Bind(std::move(receiver), runner);
context_state_->AddContextLostObserver(this); context_state_->AddContextLostObserver(this);
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
channel_->AddRoute(route_id, sequence_); channel_->AddRoute(route_id, sequence_);
} }
@ -138,7 +138,7 @@ DCOMPTexture::~DCOMPTexture() {
DCHECK(!channel_); DCHECK(!channel_);
context_state_->RemoveContextLostObserver(this); context_state_->RemoveContextLostObserver(this);
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
if (window_pos_timer_.IsRunning()) { if (window_pos_timer_.IsRunning()) {
window_pos_timer_.Stop(); window_pos_timer_.Stop();

@ -127,7 +127,7 @@ GpuWatchdogThread::~GpuWatchdogThread() {
Stop(); // stop the watchdog thread Stop(); // stop the watchdog thread
base::CurrentThread::Get()->RemoveTaskObserver(this); base::CurrentThread::Get()->RemoveTaskObserver(this);
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
GpuWatchdogThreadEventHistogram(GpuWatchdogThreadEvent::kGpuWatchdogEnd); GpuWatchdogThreadEventHistogram(GpuWatchdogThreadEvent::kGpuWatchdogEnd);
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
if (watched_thread_handle_) if (watched_thread_handle_)
@ -343,7 +343,8 @@ void GpuWatchdogThread::AddPowerObserver() {
// Adding the Observer to the power monitor is safe even if power monitor is // Adding the Observer to the power monitor is safe even if power monitor is
// not yet initialized. // not yet initialized.
bool is_system_suspended = bool is_system_suspended =
base::PowerMonitor::AddPowerSuspendObserverAndReturnSuspendedState(this); base::PowerMonitor::GetInstance()
->AddPowerSuspendObserverAndReturnSuspendedState(this);
if (is_system_suspended) if (is_system_suspended)
StopWatchdogTimeoutTask(kPowerSuspendResume); StopWatchdogTimeoutTask(kPowerSuspendResume);
} }

@ -115,7 +115,7 @@ int WebMainLoop::PreCreateThreads() {
// of it? // of it?
// TODO(crbug.com/40240952): Remove this once we have confidence PowerMonitor // TODO(crbug.com/40240952): Remove this once we have confidence PowerMonitor
// is not needed for iOS // is not needed for iOS
base::PowerMonitor::Initialize( base::PowerMonitor::GetInstance()->Initialize(
std::make_unique<base::PowerMonitorDeviceSource>()); std::make_unique<base::PowerMonitorDeviceSource>());
return result_code_; return result_code_;

@ -462,7 +462,7 @@ class AudioManagerMac::AudioPowerObserver : public base::PowerSuspendObserver {
public: public:
AudioPowerObserver() AudioPowerObserver()
: is_suspending_(false), : is_suspending_(false),
is_monitoring_(base::PowerMonitor::IsInitialized()), is_monitoring_(base::PowerMonitor::GetInstance()->IsInitialized()),
num_resume_notifications_(0) { num_resume_notifications_(0) {
// The PowerMonitor requires significant setup (a CFRunLoop and preallocated // The PowerMonitor requires significant setup (a CFRunLoop and preallocated
// IO ports) so it's not available under unit tests. See the OSX impl of // IO ports) so it's not available under unit tests. See the OSX impl of
@ -470,7 +470,7 @@ class AudioManagerMac::AudioPowerObserver : public base::PowerSuspendObserver {
if (!is_monitoring_) { if (!is_monitoring_) {
return; return;
} }
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
} }
AudioPowerObserver(const AudioPowerObserver&) = delete; AudioPowerObserver(const AudioPowerObserver&) = delete;
@ -481,7 +481,7 @@ class AudioManagerMac::AudioPowerObserver : public base::PowerSuspendObserver {
if (!is_monitoring_) { if (!is_monitoring_) {
return; return;
} }
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
bool IsSuspending() const { bool IsSuspending() const {
@ -500,7 +500,7 @@ class AudioManagerMac::AudioPowerObserver : public base::PowerSuspendObserver {
bool IsOnBatteryPower() const { bool IsOnBatteryPower() const {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
return base::PowerMonitor::IsOnBatteryPower(); return base::PowerMonitor::GetInstance()->IsOnBatteryPower();
} }
private: private:

@ -29,12 +29,12 @@ PowerObserverHelper::PowerObserverHelper(
// TODO(grunell): We could be suspending when adding this as observer, and // TODO(grunell): We could be suspending when adding this as observer, and
// we won't be notified about that. See if we can add // we won't be notified about that. See if we can add
// PowerMonitorSource::IsSuspending() so that this can be checked here. // PowerMonitorSource::IsSuspending() so that this can be checked here.
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
} }
PowerObserverHelper::~PowerObserverHelper() { PowerObserverHelper::~PowerObserverHelper() {
DCHECK(task_runner_->RunsTasksInCurrentSequence()); DCHECK(task_runner_->RunsTasksInCurrentSequence());
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
bool PowerObserverHelper::IsSuspending() const { bool PowerObserverHelper::IsSuspending() const {

@ -83,14 +83,16 @@ AudioRendererImpl::AudioRendererImpl(
// won't remove the observer until we're destructed on |task_runner_| so we // won't remove the observer until we're destructed on |task_runner_| so we
// must post it here if we're on the wrong thread. // must post it here if we're on the wrong thread.
if (task_runner_->RunsTasksInCurrentSequence()) { if (task_runner_->RunsTasksInCurrentSequence()) {
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->GetInstance()->AddPowerSuspendObserver(
this);
} else { } else {
// Safe to post this without a WeakPtr because this class must be destructed // Safe to post this without a WeakPtr because this class must be destructed
// on the same thread and construction has not completed yet. // on the same thread and construction has not completed yet.
task_runner_->PostTask( task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce( base::BindOnce(
IgnoreResult(&base::PowerMonitor::AddPowerSuspendObserver), this)); base::IgnoreResult(&base::PowerMonitor::AddPowerSuspendObserver),
base::Unretained(base::PowerMonitor::GetInstance()), this));
} }
// Do not add anything below this line since the above actions are only safe // Do not add anything below this line since the above actions are only safe
@ -100,7 +102,8 @@ AudioRendererImpl::AudioRendererImpl(
AudioRendererImpl::~AudioRendererImpl() { AudioRendererImpl::~AudioRendererImpl() {
DVLOG(1) << __func__; DVLOG(1) << __func__;
DCHECK(task_runner_->RunsTasksInCurrentSequence()); DCHECK(task_runner_->RunsTasksInCurrentSequence());
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->GetInstance()->RemovePowerSuspendObserver(
this);
// If Render() is in progress, this call will wait for Render() to finish. // If Render() is in progress, this call will wait for Render() to finish.
// After this call, the |sink_| will not call back into |this| anymore. // After this call, the |sink_| will not call back into |this| anymore.

@ -91,10 +91,8 @@ bool NonErrorResponse(int status_code) {
} }
bool IsOnBatteryPower() { bool IsOnBatteryPower() {
if (base::PowerMonitor::IsInitialized()) { auto* power_monitor = base::PowerMonitor::GetInstance();
return base::PowerMonitor::IsOnBatteryPower(); return power_monitor->IsInitialized() && power_monitor->IsOnBatteryPower();
}
return false;
} }
enum ExternallyConditionalizedType { enum ExternallyConditionalizedType {

@ -26,14 +26,14 @@ HttpNetworkLayer::HttpNetworkLayer(HttpNetworkSession* session)
: session_(session) { : session_(session) {
DCHECK(session_); DCHECK(session_);
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
#endif #endif
} }
HttpNetworkLayer::~HttpNetworkLayer() { HttpNetworkLayer::~HttpNetworkLayer() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
#endif #endif
} }

@ -73,7 +73,7 @@ TCPClientSocket::TCPClientSocket(
TCPClientSocket::~TCPClientSocket() { TCPClientSocket::~TCPClientSocket() {
Disconnect(); Disconnect();
#if defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND) #if defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND)
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
#endif // defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND) #endif // defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND)
} }
@ -173,7 +173,7 @@ TCPClientSocket::TCPClientSocket(
if (socket_->IsValid()) if (socket_->IsValid())
socket_->SetDefaultOptionsForClient(); socket_->SetDefaultOptionsForClient();
#if defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND) #if defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND)
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
#endif // defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND) #endif // defined(TCP_CLIENT_SOCKET_OBSERVES_SUSPEND)
} }

@ -60,7 +60,9 @@ class TCPClientSocketTest : public testing::Test {
TCPClientSocketTest() TCPClientSocketTest()
: task_environment_(base::test::TaskEnvironment::MainThreadType::IO) {} : task_environment_(base::test::TaskEnvironment::MainThreadType::IO) {}
~TCPClientSocketTest() override { base::PowerMonitor::ShutdownForTesting(); } ~TCPClientSocketTest() override {
base::PowerMonitor::GetInstance()->ShutdownForTesting();
}
void Suspend() { power_monitor_source_.Suspend(); } void Suspend() { power_monitor_source_.Suspend(); }
void Resume() { power_monitor_source_.Resume(); } void Resume() { power_monitor_source_.Resume(); }

@ -10,13 +10,15 @@
namespace device { namespace device {
PowerMonitorMessageBroadcaster::PowerMonitorMessageBroadcaster() { PowerMonitorMessageBroadcaster::PowerMonitorMessageBroadcaster() {
base::PowerMonitor::AddPowerSuspendObserver(this); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::AddPowerStateObserver(this); power_monitor->AddPowerSuspendObserver(this);
power_monitor->AddPowerStateObserver(this);
} }
PowerMonitorMessageBroadcaster::~PowerMonitorMessageBroadcaster() { PowerMonitorMessageBroadcaster::~PowerMonitorMessageBroadcaster() {
base::PowerMonitor::RemovePowerSuspendObserver(this); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::RemovePowerStateObserver(this); power_monitor->RemovePowerSuspendObserver(this);
power_monitor->RemovePowerStateObserver(this);
} }
// static // static
@ -30,11 +32,13 @@ void PowerMonitorMessageBroadcaster::AddClient(
power_monitor_client) { power_monitor_client) {
mojo::RemoteSetElementId element_id = mojo::RemoteSetElementId element_id =
clients_.Add(std::move(power_monitor_client)); clients_.Add(std::move(power_monitor_client));
auto* power_monitor = base::PowerMonitor::GetInstance();
if (!base::PowerMonitor::IsInitialized()) if (!power_monitor->IsInitialized()) {
return; return;
}
bool on_battery_power = base::PowerMonitor::IsOnBatteryPower(); bool on_battery_power = power_monitor->IsOnBatteryPower();
// If the state has changed since we last checked, update all clients. // If the state has changed since we last checked, update all clients.
if (on_battery_power != on_battery_power_) { if (on_battery_power != on_battery_power_) {

@ -62,7 +62,9 @@ class PowerMonitorMessageBroadcasterTest : public DeviceServiceTestBase {
power_monitor_source_.SetOnBatteryPower(on_battery_power); power_monitor_source_.SetOnBatteryPower(on_battery_power);
} }
bool IsOnBatteryPower() { return power_monitor_source_.IsOnBatteryPower(); } bool IsOnBatteryPower() const {
return power_monitor_source_.IsOnBatteryPower();
}
void TearDown() override { void TearDown() override {
DestroyDeviceService(); DestroyDeviceService();

@ -35,7 +35,7 @@ void PowerMonitorBroadcastSource::Init(
} }
} }
bool PowerMonitorBroadcastSource::IsOnBatteryPower() { bool PowerMonitorBroadcastSource::IsOnBatteryPower() const {
return client_->last_reported_on_battery_power_state(); return client_->last_reported_on_battery_power_state();
} }

@ -85,7 +85,7 @@ class PowerMonitorBroadcastSource : public base::PowerMonitorSource {
Client* client_for_testing() const { return client_.get(); } Client* client_for_testing() const { return client_.get(); }
bool IsOnBatteryPower() override; bool IsOnBatteryPower() const override;
std::unique_ptr<Client> client_; std::unique_ptr<Client> client_;
scoped_refptr<base::SequencedTaskRunner> task_runner_; scoped_refptr<base::SequencedTaskRunner> task_runner_;

@ -29,12 +29,13 @@ class PowerMonitorBroadcastSourceTest : public testing::Test {
auto power_monitor_source = std::make_unique<PowerMonitorBroadcastSource>( auto power_monitor_source = std::make_unique<PowerMonitorBroadcastSource>(
base::SequencedTaskRunner::GetCurrentDefault()); base::SequencedTaskRunner::GetCurrentDefault());
power_monitor_source_ptr_ = power_monitor_source.get(); power_monitor_source_ptr_ = power_monitor_source.get();
base::PowerMonitor::Initialize(std::move(power_monitor_source)); base::PowerMonitor::GetInstance()->Initialize(
std::move(power_monitor_source));
power_monitor_source_ptr_->Init(mojo::NullRemote()); power_monitor_source_ptr_->Init(mojo::NullRemote());
} }
void TearDown() override { void TearDown() override {
base::PowerMonitor::ShutdownForTesting(); base::PowerMonitor::GetInstance()->ShutdownForTesting();
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
} }
@ -51,8 +52,9 @@ class PowerMonitorBroadcastSourceTest : public testing::Test {
TEST_F(PowerMonitorBroadcastSourceTest, PowerMessageReceiveBroadcast) { TEST_F(PowerMonitorBroadcastSourceTest, PowerMessageReceiveBroadcast) {
base::test::PowerMonitorTestObserver observer; base::test::PowerMonitorTestObserver observer;
base::PowerMonitor::AddPowerSuspendObserver(&observer); auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::AddPowerStateObserver(&observer); power_monitor->AddPowerSuspendObserver(&observer);
power_monitor->AddPowerStateObserver(&observer);
// Sending resume when not suspended should have no effect. // Sending resume when not suspended should have no effect.
client()->Resume(); client()->Resume();
@ -103,8 +105,8 @@ TEST_F(PowerMonitorBroadcastSourceTest, PowerMessageReceiveBroadcast) {
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
EXPECT_EQ(observer.power_state_changes(), 2); EXPECT_EQ(observer.power_state_changes(), 2);
base::PowerMonitor::RemovePowerSuspendObserver(&observer); power_monitor->RemovePowerSuspendObserver(&observer);
base::PowerMonitor::RemovePowerStateObserver(&observer); power_monitor->RemovePowerStateObserver(&observer);
} }
} // namespace device } // namespace device

@ -39,14 +39,14 @@ class MediaPowerDelegate : public base::PowerSuspendObserver {
public: public:
explicit MediaPowerDelegate(base::WeakPtr<AudioFocusManager> owner) explicit MediaPowerDelegate(base::WeakPtr<AudioFocusManager> owner)
: owner_(owner) { : owner_(owner) {
base::PowerMonitor::AddPowerSuspendObserver(this); base::PowerMonitor::GetInstance()->AddPowerSuspendObserver(this);
} }
MediaPowerDelegate(const MediaPowerDelegate&) = delete; MediaPowerDelegate(const MediaPowerDelegate&) = delete;
MediaPowerDelegate& operator=(const MediaPowerDelegate&) = delete; MediaPowerDelegate& operator=(const MediaPowerDelegate&) = delete;
~MediaPowerDelegate() override { ~MediaPowerDelegate() override {
base::PowerMonitor::RemovePowerSuspendObserver(this); base::PowerMonitor::GetInstance()->RemovePowerSuspendObserver(this);
} }
// base::PowerSuspendObserver: // base::PowerSuspendObserver:

@ -21,9 +21,8 @@ namespace blink {
constexpr gfx::Size kMinimumVideoSize = gfx::Size(200, 140); constexpr gfx::Size kMinimumVideoSize = gfx::Size(200, 140);
static bool IsOnBatteryPower() { static bool IsOnBatteryPower() {
if (base::PowerMonitor::IsInitialized()) auto* power_monitor = base::PowerMonitor::GetInstance();
return base::PowerMonitor::IsOnBatteryPower(); return power_monitor->IsInitialized() && power_monitor->IsOnBatteryPower();
return false;
} }
// Helper function for managing property changes. If the watch time timer is // Helper function for managing property changes. If the watch time timer is
@ -96,7 +95,7 @@ WatchTimeReporter::WatchTimeReporter(
if (is_muted_) if (is_muted_)
DCHECK_EQ(volume_, 1.0); DCHECK_EQ(volume_, 1.0);
base::PowerMonitor::AddPowerStateObserver(this); base::PowerMonitor::GetInstance()->AddPowerStateObserver(this);
provider->AcquireWatchTimeRecorder(properties_->Clone(), provider->AcquireWatchTimeRecorder(properties_->Clone(),
recorder_.BindNewPipeAndPassReceiver()); recorder_.BindNewPipeAndPassReceiver());
@ -146,7 +145,7 @@ WatchTimeReporter::~WatchTimeReporter() {
// This is our last chance, so finalize now if there's anything remaining. // This is our last chance, so finalize now if there's anything remaining.
in_shutdown_ = true; in_shutdown_ = true;
MaybeFinalizeWatchTime(FinalizeTime::IMMEDIATELY); MaybeFinalizeWatchTime(FinalizeTime::IMMEDIATELY);
base::PowerMonitor::RemovePowerStateObserver(this); base::PowerMonitor::GetInstance()->RemovePowerStateObserver(this);
} }
void WatchTimeReporter::OnPlaying() { void WatchTimeReporter::OnPlaying() {

@ -39,56 +39,70 @@ _CONFIG = [
'allowed': [ 'allowed': [
# absl # absl
'absl::Cleanup', 'absl::Cleanup',
'absl::MakeInt128',
'absl::MakeUint128',
'absl::Int128High64',
'absl::Int128Low64',
'absl::Uint128High64',
'absl::Uint128Low64',
'absl::get', 'absl::get',
'absl::get_if', 'absl::get_if',
'absl::holds_alternative', 'absl::holds_alternative',
'absl::in_place', 'absl::in_place',
'absl::in_place_type', 'absl::in_place_type',
'absl::int128', 'absl::int128',
'absl::Int128High64',
'absl::Int128Low64',
'absl::MakeInt128',
'absl::MakeUint128',
'absl::monostate', 'absl::monostate',
'absl::uint128', 'absl::uint128',
'absl::Uint128High64',
'absl::Uint128Low64',
'absl::variant', 'absl::variant',
'absl::visit', 'absl::visit',
# //base constructs that are allowed everywhere # //base constructs that are allowed everywhere
'base::(byte_)?span_from_ref',
'base::AdoptRef', 'base::AdoptRef',
'base::ApplyMetadataToPastSamples', 'base::ApplyMetadataToPastSamples',
'base::SampleMetadataScope', 'base::as_byte_span',
'base::as_byte_span',
'base::as_bytes',
'base::as_bytes',
'base::as_chars',
'base::as_chars',
'base::as_string_view',
'base::as_string_view',
'base::as_writable_byte_span',
'base::as_writable_bytes',
'base::as_writable_bytes',
'base::as_writable_chars',
'base::AutoReset', 'base::AutoReset',
'base::Contains', 'base::bit_cast',
'base::ConditionVariable', 'base::ConditionVariable',
'base::Contains',
'base::CPU', 'base::CPU',
'base::ValuesEquivalent',
'base::Days', 'base::Days',
'base::DefaultTickClock', 'base::DefaultTickClock',
'base::ElapsedTimer', 'base::ElapsedTimer',
'base::EnumSet', 'base::EnumSet',
'base::HashInts', 'base::expected',
'base::JobDelegate',
'base::JobHandle',
'base::PostJob',
'base::File', 'base::File',
'base::FileErrorOr', 'base::FileErrorOr',
'base::FilePath', 'base::FilePath',
'base::FunctionRef', 'base::FunctionRef',
'base::GetUniqueIdForProcess', 'base::GetUniqueIdForProcess',
'base::HashingLRUCache',
'base::HashInts',
'base::HeapArray', 'base::HeapArray',
'base::HexStringToUInt64', 'base::HexStringToUInt64',
'base::Hours', 'base::Hours',
"base::i18n::TextDirection", 'base::i18n::TextDirection',
"base::i18n::ToChar16Ptr", 'base::i18n::ToChar16Ptr',
"base::i18n::ToUCharPtr", 'base::i18n::ToUCharPtr',
'base::JobDelegate',
'base::JobHandle',
'base::Location', 'base::Location',
'base::make_span',
'base::MakeRefCounted', 'base::MakeRefCounted',
'base::MappedReadOnlyRegion', 'base::MappedReadOnlyRegion',
'base::MatchPattern',
'base::MatcherStringPattern', 'base::MatcherStringPattern',
'base::MatchPattern',
'base::MessagePump', 'base::MessagePump',
'base::MetricsSubSampler', 'base::MetricsSubSampler',
'base::Microseconds', 'base::Microseconds',
@ -96,6 +110,7 @@ _CONFIG = [
'base::Minutes', 'base::Minutes',
'base::Nanoseconds', 'base::Nanoseconds',
'base::NotFatalUntil', 'base::NotFatalUntil',
'base::optional_ref',
'base::OptionalFromPtr', 'base::OptionalFromPtr',
'base::OptionalToPtr', 'base::OptionalToPtr',
'base::Overloaded', 'base::Overloaded',
@ -103,21 +118,28 @@ _CONFIG = [
'base::PersistentHash', 'base::PersistentHash',
'base::PlatformThread', 'base::PlatformThread',
'base::PlatformThreadId', 'base::PlatformThreadId',
'base::PostJob',
'base::PowerMonitor',
'base::Process', 'base::Process',
'base::RadToDeg', 'base::RadToDeg',
'base::RefCountedData', 'base::ranges::.+',
'base::RunLoop',
'base::HashingLRUCache',
'base::ReadOnlySharedMemoryMapping', 'base::ReadOnlySharedMemoryMapping',
'base::ReadOnlySharedMemoryRegion', 'base::ReadOnlySharedMemoryRegion',
'base::RefCountedData',
'base::RemoveChars', 'base::RemoveChars',
'base::RepeatingTimer', 'base::RepeatingTimer',
'base::RunLoop',
'base::SampleMetadataScope',
'base::ScopedAllowBlocking',
'base::ScopedClosureRunner',
'base::ScopedFD',
'base::Seconds', 'base::Seconds',
'base::sequence_manager::TaskTimeObserver',
'base::SequencedTaskRunner', 'base::SequencedTaskRunner',
'base::SingleThreadTaskRunner', 'base::SingleThreadTaskRunner',
'base::ScopedAllowBlocking', 'base::span',
'base::ScopedFD', 'base::span(_with_nul)?_from_cstring',
'base::ScopedClosureRunner', 'base::Span(OrSize|Reader|Writer)',
'base::StringPiece', 'base::StringPiece',
'base::SubstringSetMatcher', 'base::SubstringSetMatcher',
'base::SupportsWeakPtr', 'base::SupportsWeakPtr',
@ -129,41 +151,20 @@ _CONFIG = [
'base::Time', 'base::Time',
'base::TimeDelta', 'base::TimeDelta',
'base::TimeTicks', 'base::TimeTicks',
'base::trace_event::.*', 'base::to_underlying',
'base::Token', 'base::Token',
'base::trace_event::.*',
'base::unexpected',
'base::UnguessableToken', 'base::UnguessableToken',
'base::UnguessableTokenHash', 'base::UnguessableTokenHash',
'base::UnlocalizedTimeFormatWithPattern', 'base::UnlocalizedTimeFormatWithPattern',
'base::UnsafeSharedMemoryRegion', 'base::UnsafeSharedMemoryRegion',
'base::Uuid', 'base::Uuid',
'base::ValuesEquivalent',
'base::WeakPtr', 'base::WeakPtr',
'base::WeakPtrFactory', 'base::WeakPtrFactory',
'base::WrapRefCounted', 'base::WrapRefCounted',
'base::WritableSharedMemoryMapping', 'base::WritableSharedMemoryMapping',
'base::as_byte_span',
'base::as_bytes',
'base::as_chars',
'base::as_string_view',
'base::as_writable_bytes',
'base::bit_cast',
'base::expected',
'base::make_span',
'base::optional_ref',
'base::to_underlying',
'base::unexpected',
'base::ranges::.+',
'base::sequence_manager::TaskTimeObserver',
'base::span',
'base::span(_with_nul)?_from_cstring',
'base::Span(OrSize|Reader|Writer)',
'base::as_byte_span',
'base::as_writable_byte_span',
'base::as_bytes',
'base::as_writable_bytes',
'base::as_chars',
'base::as_writable_chars',
'base::as_string_view',
'base::(byte_)?span_from_ref',
'logging::GetVlogLevel', 'logging::GetVlogLevel',
'logging::SetLogItems', 'logging::SetLogItems',
@ -182,8 +183,8 @@ _CONFIG = [
'base::bits::.+', 'base::bits::.+',
# //base/observer_list.h. # //base/observer_list.h.
'base::ObserverList',
'base::CheckedObserver', 'base::CheckedObserver',
'base::ObserverList',
# //base/functional/callback_helpers.h. # //base/functional/callback_helpers.h.
'base::DoNothing', 'base::DoNothing',
@ -222,60 +223,60 @@ _CONFIG = [
'base::LinearHistogram', 'base::LinearHistogram',
# //base/metrics/field_trial_params.h. # //base/metrics/field_trial_params.h.
'base::GetFieldTrialParamValueByFeature',
'base::GetFieldTrialParamByFeatureAsBool', 'base::GetFieldTrialParamByFeatureAsBool',
'base::GetFieldTrialParamByFeatureAsDouble', 'base::GetFieldTrialParamByFeatureAsDouble',
'base::GetFieldTrialParamByFeatureAsInt', 'base::GetFieldTrialParamByFeatureAsInt',
'base::GetFieldTrialParamValueByFeature',
# //base/numerics/safe_conversions.h. # //base/numerics/safe_conversions.h.
'base::as_signed', 'base::as_signed',
'base::as_unsigned', 'base::as_unsigned',
'base::checked_cast', 'base::checked_cast',
'base::saturated_cast',
'base::strict_cast',
'base::ClampCeil', 'base::ClampCeil',
'base::ClampFloor', 'base::ClampFloor',
'base::ClampRound',
'base::IsTypeInRangeForNumericType', 'base::IsTypeInRangeForNumericType',
'base::IsValueInRangeForNumericType', 'base::IsValueInRangeForNumericType',
'base::IsValueNegative', 'base::IsValueNegative',
'base::MakeStrictNum', 'base::MakeStrictNum',
'base::ClampRound',
'base::SafeUnsignedAbs', 'base::SafeUnsignedAbs',
'base::saturated_cast',
'base::strict_cast',
'base::StrictNumeric', 'base::StrictNumeric',
# //base/synchronization/lock.h. # //base/synchronization/lock.h.
'base::AutoLock', 'base::AutoLock',
'base::AutoUnlock',
'base::AutoTryLock', 'base::AutoTryLock',
'base::AutoUnlock',
'base::Lock', 'base::Lock',
# //base/synchronization/waitable_event.h. # //base/synchronization/waitable_event.h.
'base::WaitableEvent', 'base::WaitableEvent',
# //base/numerics/checked_math.h. # //base/numerics/checked_math.h.
'base::CheckAdd',
'base::CheckAnd',
'base::CheckDiv',
'base::CheckedNumeric', 'base::CheckedNumeric',
'base::IsValidForType', 'base::CheckLsh',
'base::ValueOrDieForType',
'base::ValueOrDefaultForType',
'base::MakeCheckedNum',
'base::CheckMax', 'base::CheckMax',
'base::CheckMin', 'base::CheckMin',
'base::CheckAdd',
'base::CheckSub',
'base::CheckMul',
'base::CheckDiv',
'base::CheckMod', 'base::CheckMod',
'base::CheckLsh', 'base::CheckMul',
'base::CheckRsh',
'base::CheckAnd',
'base::CheckOr', 'base::CheckOr',
'base::CheckRsh',
'base::CheckSub',
'base::CheckXor', 'base::CheckXor',
'base::IsValidForType',
'base::MakeCheckedNum',
'base::ValueOrDefaultForType',
'base::ValueOrDieForType',
# //base/numerics/clamped_math.h. # //base/numerics/clamped_math.h.
'base::ClampAdd', 'base::ClampAdd',
'base::ClampedNumeric', 'base::ClampedNumeric',
'base::ClampMin',
'base::ClampMax', 'base::ClampMax',
'base::ClampMin',
'base::ClampSub', 'base::ClampSub',
'base::MakeClampedNum', 'base::MakeClampedNum',
@ -291,32 +292,32 @@ _CONFIG = [
'base::AtomicSequenceNumber', 'base::AtomicSequenceNumber',
# Task traits # Task traits
'base::TaskTraits',
'base::MayBlock', 'base::MayBlock',
'base::SingleThreadTaskRunnerThreadMode',
'base::TaskPriority', 'base::TaskPriority',
'base::TaskShutdownBehavior', 'base::TaskShutdownBehavior',
'base::WithBaseSyncPrimitives', 'base::TaskTraits',
'base::ThreadPolicy', 'base::ThreadPolicy',
'base::ThreadPool', 'base::ThreadPool',
'base::SingleThreadTaskRunnerThreadMode', 'base::WithBaseSyncPrimitives',
# Byte order # Byte order
'base::BigEndian(Reader|Writer)',
'base::(numerics::)?((I|U)(8|16|32|64)|(Float|Double))(To|From)(Big|Little|Native)Endian', 'base::(numerics::)?((I|U)(8|16|32|64)|(Float|Double))(To|From)(Big|Little|Native)Endian',
'base::(numerics::)?ByteSwap', 'base::(numerics::)?ByteSwap',
'base::BigEndian(Reader|Writer)',
# (Cryptographic) random number generation # (Cryptographic) random number generation
'base::RandUint64',
'base::RandInt',
'base::RandGenerator',
'base::RandDouble',
'base::RandBytes', 'base::RandBytes',
'base::RandBytesAsString', 'base::RandBytesAsString',
'base::RandDouble',
'base::RandGenerator',
'base::RandInt',
'base::RandUint64',
# Feature list checking. # Feature list checking.
"base::GetFieldTrial.*",
'base::Feature.*', 'base::Feature.*',
'base::FEATURE_.+', 'base::FEATURE_.+',
"base::GetFieldTrial.*",
'base::features::.+', 'base::features::.+',
'features::.+', 'features::.+',
@ -385,9 +386,9 @@ _CONFIG = [
'partition_alloc::internal::kAlignment', 'partition_alloc::internal::kAlignment',
# PartitionAlloc # PartitionAlloc
'base::PartitionFree',
'base::PartitionAllocZeroFill',
'base::PartitionAllocReturnNull', 'base::PartitionAllocReturnNull',
'base::PartitionAllocZeroFill',
'base::PartitionFree',
# For TaskObserver. # For TaskObserver.
'base::PendingTask', 'base::PendingTask',
@ -397,20 +398,20 @@ _CONFIG = [
'cc::CategorizedWorkerPool', 'cc::CategorizedWorkerPool',
'cc::ColorFilter', 'cc::ColorFilter',
'cc::DrawLooper', 'cc::DrawLooper',
'cc::PathEffect',
'cc::InspectablePaintRecorder', 'cc::InspectablePaintRecorder',
'cc::InspectableRecordPaintCanvas', 'cc::InspectableRecordPaintCanvas',
'cc::NodeId',
'cc::NodeInfo',
'cc::PaintCanvas', 'cc::PaintCanvas',
'cc::PaintFlags', 'cc::PaintFlags',
'cc::PaintImage', 'cc::PaintImage',
'cc::PaintImageBuilder', 'cc::PaintImageBuilder',
'cc::PaintRecord', 'cc::PaintRecord',
'cc::RecordPaintCanvas',
'cc::PaintShader', 'cc::PaintShader',
'cc::PaintWorkletInput', 'cc::PaintWorkletInput',
'cc::PathEffect',
'cc::RecordPaintCanvas',
'cc::RefCountedBuffer', 'cc::RefCountedBuffer',
'cc::NodeId',
'cc::NodeInfo',
'cc::UsePaintCache', 'cc::UsePaintCache',
# Chromium geometry types. # Chromium geometry types.
@ -420,8 +421,8 @@ _CONFIG = [
'gfx::Outsets', 'gfx::Outsets',
'gfx::OutsetsF', 'gfx::OutsetsF',
'gfx::Point', 'gfx::Point',
'gfx::PointF',
'gfx::Point3F', 'gfx::Point3F',
'gfx::PointF',
'gfx::QuadF', 'gfx::QuadF',
'gfx::Quaternion', 'gfx::Quaternion',
'gfx::Rect', 'gfx::Rect',
@ -443,25 +444,25 @@ _CONFIG = [
'gfx::DotProduct', 'gfx::DotProduct',
'gfx::IntersectRects', 'gfx::IntersectRects',
'gfx::MapRect', 'gfx::MapRect',
'gfx::MapRect',
'gfx::MaximumCoveredRect',
'gfx::PointAtOffsetFromOrigin', 'gfx::PointAtOffsetFromOrigin',
'gfx::PointFToSkPoint', 'gfx::PointFToSkPoint',
'gfx::PointToSkIPoint', 'gfx::PointToSkIPoint',
'gfx::MapRect',
'gfx::MaximumCoveredRect',
'gfx::RectFToSkRect', 'gfx::RectFToSkRect',
'gfx::RectToSkIRect', 'gfx::RectToSkIRect',
'gfx::RectToSkRect', 'gfx::RectToSkRect',
'gfx::ScaleInsets', 'gfx::ScaleInsets',
'gfx::ScalePoint',
'gfx::ScaleRect',
'gfx::ScaleSize',
'gfx::ScaleToCeiledSize', 'gfx::ScaleToCeiledSize',
'gfx::ScaleToEnclosedRect', 'gfx::ScaleToEnclosedRect',
'gfx::ScaleToEnclosingRect', 'gfx::ScaleToEnclosingRect',
'gfx::ScaleToFlooredSize', 'gfx::ScaleToFlooredSize',
'gfx::ScaleToRoundedPoint',
'gfx::ScaleToRoundedRect', 'gfx::ScaleToRoundedRect',
'gfx::ScaleToRoundedSize', 'gfx::ScaleToRoundedSize',
'gfx::ScaleRect',
'gfx::ScaleSize',
'gfx::ScalePoint',
'gfx::ScaleToRoundedPoint',
'gfx::ScaleVector2d', 'gfx::ScaleVector2d',
'gfx::ScaleVector3d', 'gfx::ScaleVector3d',
'gfx::SizeFToSkSize', 'gfx::SizeFToSkSize',
@ -534,17 +535,17 @@ _CONFIG = [
'cc::ViewportLayers', 'cc::ViewportLayers',
# cc::Layer helper enums. # cc::Layer helper enums.
'cc::HORIZONTAL',
'cc::VERTICAL',
'cc::THUMB',
'cc::TRACK_BUTTONS_TICKMARKS',
'cc::BrowserControlsState', 'cc::BrowserControlsState',
'cc::EventListenerClass', 'cc::EventListenerClass',
'cc::EventListenerProperties', 'cc::EventListenerProperties',
'cc::HitTestOpaqueness', 'cc::HitTestOpaqueness',
'cc::HORIZONTAL',
'cc::THUMB',
'cc::TRACK_BUTTONS_TICKMARKS',
'cc::VERTICAL',
# Animation # Animation
'cc::AnimationHost', "cc::AnimationHost",
"cc::AnimationIdProvider", "cc::AnimationIdProvider",
"cc::AnimationTimeline", "cc::AnimationTimeline",
"cc::FilterKeyframe", "cc::FilterKeyframe",
@ -568,30 +569,30 @@ _CONFIG = [
'cc::PaintHoldingReason', 'cc::PaintHoldingReason',
# Scrolling # Scrolling
'cc::BrowserControlsOffsetTagsInfo',
'cc::kManipulationInfoNone',
'cc::kManipulationInfoPinchZoom', 'cc::kManipulationInfoPinchZoom',
'cc::kManipulationInfoPrecisionTouchPad', 'cc::kManipulationInfoPrecisionTouchPad',
'cc::kManipulationInfoScrollbar',
'cc::kManipulationInfoTouch', 'cc::kManipulationInfoTouch',
'cc::kManipulationInfoWheel', 'cc::kManipulationInfoWheel',
'cc::kManipulationInfoScrollbar',
'cc::kManipulationInfoNone',
'cc::kPixelsPerLineStep',
'cc::kMinFractionToStepWhenPaging', 'cc::kMinFractionToStepWhenPaging',
'cc::kPercentDeltaForDirectionalScroll', 'cc::kPercentDeltaForDirectionalScroll',
'cc::BrowserControlsOffsetTagsInfo', 'cc::kPixelsPerLineStep',
'cc::MainThreadScrollingReason', 'cc::MainThreadScrollingReason',
'cc::ManipulationInfo', 'cc::ManipulationInfo',
'cc::ScrollOffsetAnimationCurve',
'cc::ScrollSnapAlign', 'cc::ScrollSnapAlign',
'cc::ScrollSnapType', 'cc::ScrollSnapType',
'cc::ScrollOffsetAnimationCurve',
'cc::ScrollStateData', 'cc::ScrollStateData',
'cc::ScrollUtils', 'cc::ScrollUtils',
'cc::SnapAlignment', 'cc::SnapAlignment',
'cc::SnapAreaData', 'cc::SnapAreaData',
'cc::SnapAxis', 'cc::SnapAxis',
'cc::SnapContainerData', 'cc::SnapContainerData',
'cc::SnappedTargetData',
'cc::SnapFlingClient', 'cc::SnapFlingClient',
'cc::SnapFlingController', 'cc::SnapFlingController',
'cc::SnappedTargetData',
'cc::SnapPositionData', 'cc::SnapPositionData',
'cc::SnapSelectionStrategy', 'cc::SnapSelectionStrategy',
'cc::SnapStrictness', 'cc::SnapStrictness',
@ -618,6 +619,7 @@ _CONFIG = [
'url::.+', 'url::.+',
# Nested namespaces under the blink namespace # Nested namespaces under the blink namespace
'[a-z_]+_names::.+',
'bindings::.+', 'bindings::.+',
'canvas_heuristic_parameters::.+', 'canvas_heuristic_parameters::.+',
'compositor_target_property::.+', 'compositor_target_property::.+',
@ -630,6 +632,7 @@ _CONFIG = [
'event_handling_util::.+', 'event_handling_util::.+',
'event_util::.+', 'event_util::.+',
'file_error::.+', 'file_error::.+',
'file_system_access_error::.+',
'geometry_util::.+', 'geometry_util::.+',
'inspector_\\w+_event::.+', 'inspector_\\w+_event::.+',
'inspector_async_task::.+', 'inspector_async_task::.+',
@ -641,7 +644,6 @@ _CONFIG = [
'layout_text_control::.+', 'layout_text_control::.+',
'media_constraints_impl::.+', 'media_constraints_impl::.+',
'media_element_parser_helpers::.+', 'media_element_parser_helpers::.+',
'file_system_access_error::.+',
'network_utils::.+', 'network_utils::.+',
'origin_trials::.+', 'origin_trials::.+',
'paint_filter_builder::.+', 'paint_filter_builder::.+',
@ -656,22 +658,21 @@ _CONFIG = [
'touch_action_util::.+', 'touch_action_util::.+',
'trace_event::.+', 'trace_event::.+',
'unicode::.+', 'unicode::.+',
'vector_math::.+',
'v8_compile_hints::.+', 'v8_compile_hints::.+',
'vector_math::.+',
'web_core_test_support::.+', 'web_core_test_support::.+',
'worker_pool::.+', 'worker_pool::.+',
'xpath::.+', 'xpath::.+',
'[a-z_]+_names::.+',
# Third-party libraries that don't depend on non-Blink Chrome code # Third-party libraries that don't depend on non-Blink Chrome code
# are OK. # are OK.
'icu::.+', 'icu::.+',
'inspector_protocol_encoding::.+',
'perfetto::.+', # tracing 'perfetto::.+', # tracing
'snappy::.+',
'testing::.+', # googlemock / googletest 'testing::.+', # googlemock / googletest
'v8::.+', 'v8::.+',
'v8_inspector::.+', 'v8_inspector::.+',
'inspector_protocol_encoding::.+',
'snappy::.+',
# Inspector instrumentation and protocol # Inspector instrumentation and protocol
'probe::.+', 'probe::.+',
@ -691,14 +692,14 @@ _CONFIG = [
# CanonicalCookie and related headers # CanonicalCookie and related headers
'net::CanonicalCookie', 'net::CanonicalCookie',
'net::CookieInclusionStatus', 'net::CookieInclusionStatus',
'net::CookiePriority',
'net::CookiePartitionKey', 'net::CookiePartitionKey',
'net::CookiePriority',
'net::CookieSameSite', 'net::CookieSameSite',
'net::CookieSourceScheme', 'net::CookieSourceScheme',
# HTTP status codes # HTTP status codes
'net::HTTP_.+',
'net::ERR_.*', 'net::ERR_.*',
'net::HTTP_.+',
# For ConnectionInfo enumeration # For ConnectionInfo enumeration
'net::HttpConnectionInfo', 'net::HttpConnectionInfo',
@ -728,9 +729,9 @@ _CONFIG = [
# Note that the Mojo callback helpers are explicitly forbidden: # Note that the Mojo callback helpers are explicitly forbidden:
# Blink already has a signal for contexts being destroyed, and # Blink already has a signal for contexts being destroyed, and
# other types of failures should be explicitly signalled. # other types of failures should be explicitly signalled.
'(?:.+::)?mojom::.+',
'mojo::(?!WrapCallback).+', 'mojo::(?!WrapCallback).+',
'mojo_base::BigBuffer.*', 'mojo_base::BigBuffer.*',
'(?:.+::)?mojom::.+',
'service_manager::InterfaceProvider', 'service_manager::InterfaceProvider',
# STL containers such as std::string and std::vector are discouraged # STL containers such as std::string and std::vector are discouraged
@ -748,10 +749,10 @@ _CONFIG = [
'ui::Cursor', 'ui::Cursor',
# UI Pointer and Hover # UI Pointer and Hover
'ui::PointerType',
'ui::POINTER_TYPE_.*',
'ui::HoverType',
'ui::HOVER_TYPE_.*', 'ui::HOVER_TYPE_.*',
'ui::HoverType',
'ui::POINTER_TYPE_.*',
'ui::PointerType',
# UI Keyconverter # UI Keyconverter
'ui::DomCode', 'ui::DomCode',
@ -760,6 +761,10 @@ _CONFIG = [
# Accessibility base types and the non-Blink enums they # Accessibility base types and the non-Blink enums they
# depend on. # depend on.
'ax::mojom::BoolAttribute',
'ax::mojom::HasPopup',
'ax::mojom::Restriction',
'ax::mojom::State',
'ui::AXActionData', 'ui::AXActionData',
'ui::AXEvent', 'ui::AXEvent',
'ui::AXEventIntent', 'ui::AXEventIntent',
@ -768,21 +773,17 @@ _CONFIG = [
'ui::AXRelativeBounds', 'ui::AXRelativeBounds',
'ui::AXTreeChecks', 'ui::AXTreeChecks',
'ui::AXTreeData', 'ui::AXTreeData',
'ui::AXTreeID',
'ui::AXTreeIDUnknown',
'ui::AXTreeSerializer', 'ui::AXTreeSerializer',
'ui::AXTreeSource', 'ui::AXTreeSource',
'ui::AXTreeUpdate', 'ui::AXTreeUpdate',
'ui::AXTreeID',
'ui::AXTreeIDUnknown',
'ui::kInvalidAXNodeID',
'ui::kFirstGeneratedRendererNodeID',
'ui::kLastGeneratedRendererNodeID',
'ui::kAXModeBasic', 'ui::kAXModeBasic',
'ui::kAXModeComplete', 'ui::kAXModeComplete',
'ui::kFirstGeneratedRendererNodeID',
'ui::kInvalidAXNodeID',
'ui::kLastGeneratedRendererNodeID',
'ui::ToString', 'ui::ToString',
'ax::mojom::BoolAttribute',
'ax::mojom::HasPopup',
'ax::mojom::State',
'ax::mojom::Restriction',
# Accessibility helper functions - mostly used in Blink for # Accessibility helper functions - mostly used in Blink for
# serialization. Please keep alphabetized. # serialization. Please keep alphabetized.
@ -866,9 +867,9 @@ _CONFIG = [
'allowed': [ 'allowed': [
# For the script streaming to be able to block when reading from a # For the script streaming to be able to block when reading from a
# mojo datapipe. # mojo datapipe.
'base::BlockingType',
'base::ScopedAllowBaseSyncPrimitives', 'base::ScopedAllowBaseSyncPrimitives',
'base::ScopedBlockingCall', 'base::ScopedBlockingCall',
'base::BlockingType',
], ],
}, },
{ {
@ -946,18 +947,18 @@ _CONFIG = [
'allowed': [ 'allowed': [
'cc::ActiveFrameSequenceTrackers', 'cc::ActiveFrameSequenceTrackers',
'cc::ApplyViewportChangesArgs', 'cc::ApplyViewportChangesArgs',
'cc::LayerTreeSettings',
'cc::PaintBenchmarkResult',
'cc::RenderFrameMetadata',
'cc::TaskGraphRunner',
'cc::ContentLayerClient', 'cc::ContentLayerClient',
'cc::DeadlinePolicy', 'cc::DeadlinePolicy',
'cc::DisplayItemList', 'cc::DisplayItemList',
'cc::DrawColorOp', 'cc::DrawColorOp',
'cc::DrawImageOp', 'cc::DrawImageOp',
'cc::LayerTreeSettings',
'cc::PaintBenchmarkResult',
'cc::RenderFrameMetadata',
'cc::RestoreOp',
'cc::SaveOp', 'cc::SaveOp',
'cc::ScaleOp', 'cc::ScaleOp',
'cc::RestoreOp', 'cc::TaskGraphRunner',
'cc::TranslateOp', 'cc::TranslateOp',
'gfx::DisplayColorSpaces', 'gfx::DisplayColorSpaces',
'gfx::FontRenderParams', 'gfx::FontRenderParams',
@ -1371,17 +1372,17 @@ _CONFIG = [
# display-related types. # display-related types.
'allowed': [ 'allowed': [
'base::flat_map', 'base::flat_map',
'display::Display',
'gl::GpuPreference', 'gl::GpuPreference',
'gpu::ClientSharedImage', 'gpu::ClientSharedImage',
'gpu::SHARED_IMAGE_USAGE_.+',
'gpu::gles2::GLES2Interface', 'gpu::gles2::GLES2Interface',
'gpu::raster::RasterInterface',
'gpu::Mailbox', 'gpu::Mailbox',
'gpu::MailboxHolder', 'gpu::MailboxHolder',
'gpu::raster::RasterInterface',
'gpu::SHARED_IMAGE_USAGE_.+',
'gpu::SharedImageInterface', 'gpu::SharedImageInterface',
'gpu::SyncToken', 'gpu::SyncToken',
'gpu::webgpu::ReservedTexture', 'gpu::webgpu::ReservedTexture',
'display::Display',
'media::IsOpaque', 'media::IsOpaque',
'media::kNoTransformation', 'media::kNoTransformation',
'media::PaintCanvasVideoRenderer', 'media::PaintCanvasVideoRenderer',
@ -1535,17 +1536,17 @@ _CONFIG = [
'third_party/blink/renderer/modules/mediarecorder/', 'third_party/blink/renderer/modules/mediarecorder/',
], ],
'allowed': [ 'allowed': [
# TODO(crbug.com/960665): Remove base::queue once it is replaced with a WTF equivalent.
'base::queue',
'base::ClampMul', 'base::ClampMul',
'base::MakeFixedFlatMap', 'base::MakeFixedFlatMap',
'base::NumberToString',
# TODO(crbug.com/960665): Remove base::queue once it is replaced with a WTF equivalent.
'base::queue',
'base::SharedMemory', 'base::SharedMemory',
'base::StringPiece', 'base::StringPiece',
'base::NumberToString',
'base::ThreadTaskRunnerHandle', 'base::ThreadTaskRunnerHandle',
'media::.+',
'libopus::.+', 'libopus::.+',
'libyuv::.+', 'libyuv::.+',
'media::.+',
'video_track_recorder::.+', 'video_track_recorder::.+',
], ],
'inclass_allowed': [ 'inclass_allowed': [
@ -1621,8 +1622,8 @@ _CONFIG = [
], ],
'allowed': [ 'allowed': [
'base::ClampMul', 'base::ClampMul',
'base::IsAligned',
'base::DoNothingWithBoundArgs', 'base::DoNothingWithBoundArgs',
'base::IsAligned',
'base::PlatformThreadRef', 'base::PlatformThreadRef',
'base::WrapRefCounted', 'base::WrapRefCounted',
'cc::kNumYUVPlanes', 'cc::kNumYUVPlanes',
@ -1630,17 +1631,17 @@ _CONFIG = [
'cc::YUVIndex', 'cc::YUVIndex',
'cc::YUVSubsampling', 'cc::YUVSubsampling',
'gpu::kNullSurfaceHandle', 'gpu::kNullSurfaceHandle',
'gpu::SHARED_IMAGE_.+',
'gpu::raster::RasterInterface',
'gpu::Mailbox', 'gpu::Mailbox',
'gpu::MailboxHolder', 'gpu::MailboxHolder',
'gpu::raster::RasterInterface',
'gpu::SHARED_IMAGE_.+',
'gpu::SharedImageInterface', 'gpu::SharedImageInterface',
'gpu::SyncToken', 'gpu::SyncToken',
'viz::RasterContextProvider',
'viz::ReleaseCallback',
'media::.+',
'libgav1::.+', 'libgav1::.+',
'libyuv::.+', 'libyuv::.+',
'media::.+',
'viz::RasterContextProvider',
'viz::ReleaseCallback',
] ]
}, },
{ {

@ -191,7 +191,7 @@ int DemoMain() {
auto context_factory = std::make_unique<ui::InProcessContextFactory>( auto context_factory = std::make_unique<ui::InProcessContextFactory>(
&host_frame_sink_manager, &frame_sink_manager, /*output_to_window=*/true); &host_frame_sink_manager, &frame_sink_manager, /*output_to_window=*/true);
base::PowerMonitor::Initialize( base::PowerMonitor::GetInstance()->Initialize(
std::make_unique<base::PowerMonitorDeviceSource>()); std::make_unique<base::PowerMonitorDeviceSource>());
std::unique_ptr<aura::Env> env = aura::Env::CreateInstance(); std::unique_ptr<aura::Env> env = aura::Env::CreateInstance();

@ -267,8 +267,10 @@ Compositor::Compositor(const viz::FrameSinkId& frame_sink_id,
// See: http://crbug.com/956264. // See: http://crbug.com/956264.
host_->SetVisible(true); host_->SetVisible(true);
if (base::PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::AddPowerSuspendObserver(this); power_monitor->IsInitialized()) {
power_monitor->AddPowerSuspendObserver(this);
}
if (command_line->HasSwitch(switches::kUISlowAnimations)) { if (command_line->HasSwitch(switches::kUISlowAnimations)) {
slow_animations_ = std::make_unique<ScopedAnimationDurationScaleMode>( slow_animations_ = std::make_unique<ScopedAnimationDurationScaleMode>(
@ -281,8 +283,10 @@ Compositor::Compositor(const viz::FrameSinkId& frame_sink_id,
Compositor::~Compositor() { Compositor::~Compositor() {
TRACE_EVENT0("shutdown,viz", "Compositor::destructor"); TRACE_EVENT0("shutdown,viz", "Compositor::destructor");
if (base::PowerMonitor::IsInitialized()) if (auto* power_monitor = base::PowerMonitor::GetInstance();
base::PowerMonitor::RemovePowerSuspendObserver(this); power_monitor->IsInitialized()) {
power_monitor->RemovePowerSuspendObserver(this);
}
for (auto& observer : observer_list_) for (auto& observer : observer_list_)
observer.OnCompositingShuttingDown(this); observer.OnCompositingShuttingDown(this);

@ -504,11 +504,11 @@ SwapChainPresenter::SwapChainPresenter(
d3d11_device_(d3d11_device), d3d11_device_(d3d11_device),
dcomp_device_(dcomp_device), dcomp_device_(dcomp_device),
is_on_battery_power_( is_on_battery_power_(
base::PowerMonitor::AddPowerStateObserverAndReturnOnBatteryState( base::PowerMonitor::GetInstance()
this)) {} ->AddPowerStateObserverAndReturnOnBatteryState(this)) {}
SwapChainPresenter::~SwapChainPresenter() { SwapChainPresenter::~SwapChainPresenter() {
base::PowerMonitor::RemovePowerStateObserver(this); base::PowerMonitor::GetInstance()->RemovePowerStateObserver(this);
} }
DXGI_FORMAT SwapChainPresenter::GetSwapChainFormat( DXGI_FORMAT SwapChainPresenter::GetSwapChainFormat(

@ -177,8 +177,8 @@ VSyncThreadWin::VSyncThreadWin(Microsoft::WRL::ComPtr<IDXGIDevice> dxgi_device)
vsync_provider_(gfx::kNullAcceleratedWidget), vsync_provider_(gfx::kNullAcceleratedWidget),
dxgi_adapter_(GetAdapter(dxgi_device.Get())), dxgi_adapter_(GetAdapter(dxgi_device.Get())),
original_adapter_luid_(GetLuid(dxgi_adapter_.Get())) { original_adapter_luid_(GetLuid(dxgi_adapter_.Get())) {
is_suspended_ = is_suspended_ = base::PowerMonitor::GetInstance()
base::PowerMonitor::AddPowerSuspendObserverAndReturnSuspendedState(this); ->AddPowerSuspendObserverAndReturnSuspendedState(this);
vsync_thread_.StartWithOptions( vsync_thread_.StartWithOptions(
base::Thread::Options(base::ThreadType::kDisplayCritical)); base::Thread::Options(base::ThreadType::kDisplayCritical));
} }