summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-10 20:34:16 +0000
committerjeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-10 20:34:16 +0000
commit05dfd4a342fb80e31ff333aa9f3aa550742a8a4d (patch)
tree9bc08c7a64efb3a0fe26fb50f5061881fd234fa1
parentd78934f0979e1bba701c8422172be9f4a83db1a3 (diff)
downloadchromium_src-05dfd4a342fb80e31ff333aa9f3aa550742a8a4d.zip
chromium_src-05dfd4a342fb80e31ff333aa9f3aa550742a8a4d.tar.gz
chromium_src-05dfd4a342fb80e31ff333aa9f3aa550742a8a4d.tar.bz2
Disable battery power detection on POSIX since we don't currently use it.
Batter Power is used on Windows to toggle HiRest timers, but this isn't applicable on other platforms. Review URL: http://codereview.chromium.org/21187 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9510 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/system_monitor.cc174
-rw-r--r--base/system_monitor.h248
2 files changed, 219 insertions, 203 deletions
diff --git a/base/system_monitor.cc b/base/system_monitor.cc
index 1d44e3c..dd5aa60 100644
--- a/base/system_monitor.cc
+++ b/base/system_monitor.cc
@@ -1,85 +1,89 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/system_monitor.h"
-#include "base/logging.h"
-#include "base/message_loop.h"
-
-namespace base {
-
-// The amount of time (in ms) to wait before running the initial
-// battery check.
-static int kDelayedBatteryCheckMs = 10 * 1000;
-
-SystemMonitor::SystemMonitor()
- : battery_in_use_(false),
- suspended_(false) {
- observer_list_ = new ObserverListThreadSafe<PowerObserver>();
-}
-
-void SystemMonitor::ProcessPowerMessage(PowerEvent event_id) {
- // Suppress duplicate notifications. Some platforms may
- // send multiple notifications of the same event.
- switch (event_id) {
- case POWER_STATE_EVENT:
- {
- bool on_battery = IsBatteryPower();
- if (on_battery != battery_in_use_) {
- battery_in_use_ = on_battery;
- NotifyPowerStateChange();
- }
- }
- break;
- case RESUME_EVENT:
- if (suspended_) {
- suspended_ = false;
- NotifyResume();
- }
- break;
- case SUSPEND_EVENT:
- if (!suspended_) {
- suspended_ = true;
- NotifySuspend();
- }
- break;
- }
-}
-
-void SystemMonitor::AddObserver(PowerObserver* obs) {
- observer_list_->AddObserver(obs);
-}
-
-void SystemMonitor::RemoveObserver(PowerObserver* obs) {
- observer_list_->RemoveObserver(obs);
-}
-
-void SystemMonitor::NotifyPowerStateChange() {
- LOG(INFO) << L"PowerStateChange: "
- << (BatteryPower() ? L"On" : L"Off") << L" battery";
- observer_list_->Notify(&PowerObserver::OnPowerStateChange, this);
-}
-
-void SystemMonitor::NotifySuspend() {
- LOG(INFO) << L"Power Suspending";
- observer_list_->Notify(&PowerObserver::OnSuspend, this);
-}
-
-void SystemMonitor::NotifyResume() {
- LOG(INFO) << L"Power Resuming";
- observer_list_->Notify(&PowerObserver::OnResume, this);
-}
-
-void SystemMonitor::Start() {
- DCHECK(MessageLoop::current()); // Can't call start too early.
- SystemMonitor* monitor = Get();
- monitor->delayed_battery_check_.Start(
- TimeDelta::FromMilliseconds(kDelayedBatteryCheckMs), monitor,
- &SystemMonitor::BatteryCheck);
-}
-
-void SystemMonitor::BatteryCheck() {
- ProcessPowerMessage(SystemMonitor::POWER_STATE_EVENT);
-}
-
-} // namespace base
+// Copyright (c) 2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/system_monitor.h"
+#include "base/logging.h"
+#include "base/message_loop.h"
+
+namespace base {
+
+#if defined(ENABLE_BATTERY_MONITORING)
+// The amount of time (in ms) to wait before running the initial
+// battery check.
+static int kDelayedBatteryCheckMs = 10 * 1000;
+#endif // defined(ENABLE_BATTERY_MONITORING)
+
+SystemMonitor::SystemMonitor()
+ : battery_in_use_(false),
+ suspended_(false) {
+ observer_list_ = new ObserverListThreadSafe<PowerObserver>();
+}
+
+void SystemMonitor::ProcessPowerMessage(PowerEvent event_id) {
+ // Suppress duplicate notifications. Some platforms may
+ // send multiple notifications of the same event.
+ switch (event_id) {
+ case POWER_STATE_EVENT:
+ {
+ bool on_battery = IsBatteryPower();
+ if (on_battery != battery_in_use_) {
+ battery_in_use_ = on_battery;
+ NotifyPowerStateChange();
+ }
+ }
+ break;
+ case RESUME_EVENT:
+ if (suspended_) {
+ suspended_ = false;
+ NotifyResume();
+ }
+ break;
+ case SUSPEND_EVENT:
+ if (!suspended_) {
+ suspended_ = true;
+ NotifySuspend();
+ }
+ break;
+ }
+}
+
+void SystemMonitor::AddObserver(PowerObserver* obs) {
+ observer_list_->AddObserver(obs);
+}
+
+void SystemMonitor::RemoveObserver(PowerObserver* obs) {
+ observer_list_->RemoveObserver(obs);
+}
+
+void SystemMonitor::NotifyPowerStateChange() {
+ LOG(INFO) << L"PowerStateChange: "
+ << (BatteryPower() ? L"On" : L"Off") << L" battery";
+ observer_list_->Notify(&PowerObserver::OnPowerStateChange, this);
+}
+
+void SystemMonitor::NotifySuspend() {
+ LOG(INFO) << L"Power Suspending";
+ observer_list_->Notify(&PowerObserver::OnSuspend, this);
+}
+
+void SystemMonitor::NotifyResume() {
+ LOG(INFO) << L"Power Resuming";
+ observer_list_->Notify(&PowerObserver::OnResume, this);
+}
+
+void SystemMonitor::Start() {
+#if defined(ENABLE_BATTERY_MONITORING)
+ DCHECK(MessageLoop::current()); // Can't call start too early.
+ SystemMonitor* monitor = Get();
+ monitor->delayed_battery_check_.Start(
+ TimeDelta::FromMilliseconds(kDelayedBatteryCheckMs), monitor,
+ &SystemMonitor::BatteryCheck);
+#endif // defined(ENABLE_BATTERY_MONITORING)
+}
+
+void SystemMonitor::BatteryCheck() {
+ ProcessPowerMessage(SystemMonitor::POWER_STATE_EVENT);
+}
+
+} // namespace base
diff --git a/base/system_monitor.h b/base/system_monitor.h
index cfcb08a..e248751 100644
--- a/base/system_monitor.h
+++ b/base/system_monitor.h
@@ -1,118 +1,130 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_SYSTEM_MONITOR_H_
-#define BASE_SYSTEM_MONITOR_H_
-
-#include "base/observer_list_threadsafe.h"
-#include "base/singleton.h"
-
-namespace base {
-
-// Class for monitoring various system-related subsystems
-// such as power management, network status, etc.
-// TODO(mbelshe): Add support beyond just power management.
-class SystemMonitor {
- public:
- // Access to the Singleton
- static SystemMonitor* Get() {
- // Uses the LeakySingletonTrait because cleanup is optional.
- return
- Singleton<SystemMonitor, LeakySingletonTraits<SystemMonitor> >::get();
- }
-
- // Start the System Monitor within a process. This method
- // is provided so that the battery check can be deferred.
- // The MessageLoop must be started before calling this
- // method.
- static void Start();
-
- //
- // Power-related APIs
- //
-
- // Is the computer currently on battery power.
- // Can be called on any thread.
- bool BatteryPower() {
- // Using a lock here is not necessary for just a bool.
- return battery_in_use_;
- }
-
- // Normalized list of power events.
- enum PowerEvent {
- POWER_STATE_EVENT, // The Power status of the system has changed.
- SUSPEND_EVENT, // The system is being suspended.
- RESUME_EVENT // The system is being resumed.
- };
-
- // Callbacks will be called on the thread which creates the SystemMonitor.
- // During the callback, Add/RemoveObserver will block until the callbacks
- // are finished. Observers should implement quick callback functions; if
- // lengthy operations are needed, the observer should take care to invoke
- // the operation on an appropriate thread.
- class PowerObserver {
- public:
- // Notification of a change in power status of the computer, such
- // as from switching between battery and A/C power.
- virtual void OnPowerStateChange(SystemMonitor*) = 0;
-
- // Notification that the system is suspending.
- virtual void OnSuspend(SystemMonitor*) = 0;
-
- // Notification that the system is resuming.
- virtual void OnResume(SystemMonitor*) = 0;
- };
-
- // Add a new observer.
- // Can be called from any thread.
- // Must not be called from within a notification callback.
- void AddObserver(PowerObserver* obs);
-
- // Remove an existing observer.
- // Can be called from any thread.
- // Must not be called from within a notification callback.
- void RemoveObserver(PowerObserver* obs);
-
-#if defined(OS_WIN)
- // Windows-specific handling of a WM_POWERBROADCAST message.
- // Embedders of this API should hook their top-level window
- // message loop and forward WM_POWERBROADCAST through this call.
- void ProcessWmPowerBroadcastMessage(int event_id);
-#endif
-
- // Cross-platform handling of a power event.
- void ProcessPowerMessage(PowerEvent event_id);
-
- // Constructor.
- // Don't use this; access SystemMonitor via the Singleton.
- SystemMonitor();
-
- private:
- // Platform-specific method to check whether the system is currently
- // running on battery power. Returns true if running on batteries,
- // false otherwise.
- bool IsBatteryPower();
-
- // Checks the battery status and notifies observers if the battery
- // status has changed.
- void BatteryCheck();
-
- // Functions to trigger notifications.
- void NotifyPowerStateChange();
- void NotifySuspend();
- void NotifyResume();
-
- scoped_refptr<ObserverListThreadSafe<PowerObserver> > observer_list_;
- bool battery_in_use_;
- bool suspended_;
-
- base::OneShotTimer<SystemMonitor> delayed_battery_check_;
-
- DISALLOW_COPY_AND_ASSIGN(SystemMonitor);
-};
-
-}
-
-#endif // BASE_SYSTEM_MONITOR_H_
-
+// Copyright (c) 2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_SYSTEM_MONITOR_H_
+#define BASE_SYSTEM_MONITOR_H_
+
+#include "base/observer_list_threadsafe.h"
+#include "base/singleton.h"
+
+// Windows HiRes timers drain the battery faster so we need to know the battery
+// status. This isn't true for other platforms.
+#if defined(OS_WIN)
+#define ENABLE_BATTERY_MONITORING 1
+#else
+#undef ENABLE_BATTERY_MONITORING
+#endif // !OS_WIN
+
+namespace base {
+
+// Class for monitoring various system-related subsystems
+// such as power management, network status, etc.
+// TODO(mbelshe): Add support beyond just power management.
+class SystemMonitor {
+ public:
+ // Access to the Singleton
+ static SystemMonitor* Get() {
+ // Uses the LeakySingletonTrait because cleanup is optional.
+ return
+ Singleton<SystemMonitor, LeakySingletonTraits<SystemMonitor> >::get();
+ }
+
+ // Start the System Monitor within a process. This method
+ // is provided so that the battery check can be deferred.
+ // The MessageLoop must be started before calling this
+ // method.
+ // This is a no-op on platforms for which ENABLE_BATTERY_MONITORING is
+ // disabled.
+ static void Start();
+
+ //
+ // Power-related APIs
+ //
+
+ // Is the computer currently on battery power.
+ // Can be called on any thread.
+ bool BatteryPower() {
+ // Using a lock here is not necessary for just a bool.
+ return battery_in_use_;
+ }
+
+ // Normalized list of power events.
+ enum PowerEvent {
+ POWER_STATE_EVENT, // The Power status of the system has changed.
+ SUSPEND_EVENT, // The system is being suspended.
+ RESUME_EVENT // The system is being resumed.
+ };
+
+ // Callbacks will be called on the thread which creates the SystemMonitor.
+ // During the callback, Add/RemoveObserver will block until the callbacks
+ // are finished. Observers should implement quick callback functions; if
+ // lengthy operations are needed, the observer should take care to invoke
+ // the operation on an appropriate thread.
+ class PowerObserver {
+ public:
+ // Notification of a change in power status of the computer, such
+ // as from switching between battery and A/C power.
+ virtual void OnPowerStateChange(SystemMonitor*) = 0;
+
+ // Notification that the system is suspending.
+ virtual void OnSuspend(SystemMonitor*) = 0;
+
+ // Notification that the system is resuming.
+ virtual void OnResume(SystemMonitor*) = 0;
+ };
+
+ // Add a new observer.
+ // Can be called from any thread.
+ // Must not be called from within a notification callback.
+ void AddObserver(PowerObserver* obs);
+
+ // Remove an existing observer.
+ // Can be called from any thread.
+ // Must not be called from within a notification callback.
+ void RemoveObserver(PowerObserver* obs);
+
+#if defined(OS_WIN)
+ // Windows-specific handling of a WM_POWERBROADCAST message.
+ // Embedders of this API should hook their top-level window
+ // message loop and forward WM_POWERBROADCAST through this call.
+ void ProcessWmPowerBroadcastMessage(int event_id);
+#endif
+
+ // Cross-platform handling of a power event.
+ void ProcessPowerMessage(PowerEvent event_id);
+
+ // Constructor.
+ // Don't use this; access SystemMonitor via the Singleton.
+ SystemMonitor();
+
+ private:
+ // Platform-specific method to check whether the system is currently
+ // running on battery power. Returns true if running on batteries,
+ // false otherwise.
+ bool IsBatteryPower();
+
+ // Checks the battery status and notifies observers if the battery
+ // status has changed.
+ void BatteryCheck();
+
+ // Functions to trigger notifications.
+ void NotifyPowerStateChange();
+ void NotifySuspend();
+ void NotifyResume();
+
+ scoped_refptr<ObserverListThreadSafe<PowerObserver> > observer_list_;
+ bool battery_in_use_;
+ bool suspended_;
+
+#if defined(ENABLE_BATTERY_MONITORING)
+ base::OneShotTimer<SystemMonitor> delayed_battery_check_;
+#endif
+
+ DISALLOW_COPY_AND_ASSIGN(SystemMonitor);
+};
+
+}
+
+#endif // BASE_SYSTEM_MONITOR_H_
+