Index: base/power_monitor/power_monitor.h |
diff --git a/base/system_monitor/system_monitor.h b/base/power_monitor/power_monitor.h |
similarity index 45% |
copy from base/system_monitor/system_monitor.h |
copy to base/power_monitor/power_monitor.h |
index 10f279f59254e8160c62ba696d59d2c0fccdf7aa..e8935473915c4a108009a473c27defbc79d93147 100644 |
--- a/base/system_monitor/system_monitor.h |
+++ b/base/power_monitor/power_monitor.h |
@@ -1,46 +1,39 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_ |
-#define BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_ |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
+#ifndef BASE_POWER_MONITOR_POWER_MONITOR_H_ |
+#define BASE_POWER_MONITOR_POWER_MONITOR_H_ |
#include "base/base_export.h" |
#include "base/basictypes.h" |
-#include "build/build_config.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/observer_list_threadsafe.h" |
+#include "base/power_monitor/power_observer.h" |
+ |
+#if defined(OS_WIN) |
+#include <windows.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 |
-#include "base/observer_list_threadsafe.h" |
#if defined(ENABLE_BATTERY_MONITORING) |
#include "base/timer.h" |
#endif // defined(ENABLE_BATTERY_MONITORING) |
-#if defined(OS_MACOSX) && !defined(OS_IOS) |
-#include <IOKit/pwr_mgt/IOPMLib.h> |
-#include <IOKit/IOMessage.h> |
-#endif // OS_MACOSX && !OS_IOS |
- |
#if defined(OS_IOS) |
#include <objc/runtime.h> |
#endif // OS_IOS |
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 BASE_EXPORT SystemMonitor { |
+// A class used to monitor the power state change and notify the observers about |
+// the change event. |
+class BASE_EXPORT PowerMonitor { |
public: |
// Normalized list of power events. |
enum PowerEvent { |
@@ -49,23 +42,14 @@ class BASE_EXPORT SystemMonitor { |
RESUME_EVENT // The system is being resumed. |
}; |
- // Type of devices whose change need to be monitored, such as add/remove. |
- enum DeviceType { |
- DEVTYPE_AUDIO_CAPTURE, // Audio capture device, e.g., microphone. |
- DEVTYPE_VIDEO_CAPTURE, // Video capture device, e.g., webcam. |
- DEVTYPE_UNKNOWN, // Other devices. |
- }; |
- |
- // Create SystemMonitor. Only one SystemMonitor instance per application |
- // is allowed. |
- SystemMonitor(); |
- ~SystemMonitor(); |
+ PowerMonitor(); |
+ ~PowerMonitor(); |
- // Get the application-wide SystemMonitor (if not present, returns NULL). |
- static SystemMonitor* Get(); |
+ // Get the application-wide PowerMonitor (if not present, returns NULL). |
+ static PowerMonitor* Get(); |
#if defined(OS_MACOSX) |
- // Allocate system resources needed by the SystemMonitor class. |
+ // Allocate system resources needed by the PowerMonitor class. |
// |
// This function must be called before instantiating an instance of the class |
// and before the Sandbox is initialized. |
@@ -76,74 +60,26 @@ class BASE_EXPORT SystemMonitor { |
#endif // OS_IOS |
#endif // OS_MACOSX |
- // |
- // Power-related APIs |
- // |
+ // Add and remove an observer. |
+ // Can be called from any thread. |
+ // Must not be called from within a notification callback. |
+ void AddObserver(PowerObserver* observer); |
+ void RemoveObserver(PowerObserver* observer); |
- // Is the computer currently on battery power. |
- // Can be called on any thread. |
+ // Is the computer currently on battery power. Can be called on any thread. |
bool BatteryPower() const { |
// Using a lock here is not necessary for just a bool. |
return battery_in_use_; |
} |
- // 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 BASE_EXPORT 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(bool on_battery_power) {} |
- |
- // Notification that the system is suspending. |
- virtual void OnSuspend() {} |
- |
- // Notification that the system is resuming. |
- virtual void OnResume() {} |
- |
- protected: |
- virtual ~PowerObserver() {} |
- }; |
- |
- class BASE_EXPORT DevicesChangedObserver { |
- public: |
- // Notification that the devices connected to the system have changed. |
- // This is only implemented on Windows currently. |
- virtual void OnDevicesChanged(DeviceType device_type) {} |
- |
- protected: |
- virtual ~DevicesChangedObserver() {} |
- }; |
- |
- // Add a new observer. |
- // Can be called from any thread. |
- // Must not be called from within a notification callback. |
- void AddPowerObserver(PowerObserver* obs); |
- void AddDevicesChangedObserver(DevicesChangedObserver* obs); |
- |
- // Remove an existing observer. |
- // Can be called from any thread. |
- // Must not be called from within a notification callback. |
- void RemovePowerObserver(PowerObserver* obs); |
- void RemoveDevicesChangedObserver(DevicesChangedObserver* obs); |
- |
- // The ProcessFoo() style methods are a broken pattern and should not |
- // be copied. Any significant addition to this class is blocked on |
- // refactoring to improve the state of affairs. See http://crbug.com/149059 |
- |
- // Cross-platform handling of a power event. |
- void ProcessPowerMessage(PowerEvent event_id); |
- |
- // Cross-platform handling of a device change event. |
- void ProcessDevicesChanged(DeviceType device_type); |
- |
private: |
+ friend class PowerMonitorTest; |
+ // A friend function that is allowed to access the private ProcessPowerEvent. |
+ friend void ProcessPowerEventHelper(PowerEvent); |
+ |
#if defined(OS_WIN) |
// Represents a message-only window for power message handling on Windows. |
- // Only allow SystemMonitor to create it. |
+ // Only allow PowerMonitor to create it. |
class PowerMessageWindow { |
public: |
PowerMessageWindow(); |
@@ -162,13 +98,16 @@ class BASE_EXPORT SystemMonitor { |
// A hidden message-only window. |
HWND message_hwnd_; |
}; |
-#endif |
+#endif // OS_WIN |
#if defined(OS_MACOSX) |
void PlatformInit(); |
void PlatformDestroy(); |
#endif |
+ // Cross-platform handling of a power event. |
+ void ProcessPowerEvent(PowerEvent event_id); |
+ |
// Platform-specific method to check whether the system is currently |
// running on battery power. Returns true if running on batteries, |
// false otherwise. |
@@ -178,34 +117,30 @@ class BASE_EXPORT SystemMonitor { |
// status has changed. |
void BatteryCheck(); |
- // Functions to trigger notifications. |
- void NotifyDevicesChanged(DeviceType device_type); |
void NotifyPowerStateChange(); |
void NotifySuspend(); |
void NotifyResume(); |
- scoped_refptr<ObserverListThreadSafe<PowerObserver> > power_observer_list_; |
- scoped_refptr<ObserverListThreadSafe<DevicesChangedObserver> > |
- devices_changed_observer_list_; |
- bool battery_in_use_; |
- bool suspended_; |
- |
-#if defined(ENABLE_BATTERY_MONITORING) |
- base::OneShotTimer<SystemMonitor> delayed_battery_check_; |
-#endif |
- |
#if defined(OS_IOS) |
// Holds pointers to system event notification observers. |
std::vector<id> notification_observers_; |
#endif |
+#if defined(ENABLE_BATTERY_MONITORING) |
+ base::OneShotTimer<PowerMonitor> delayed_battery_check_; |
+#endif |
+ |
+ scoped_refptr<ObserverListThreadSafe<PowerObserver> > observers_; |
+ bool battery_in_use_; |
+ bool suspended_; |
+ |
#if defined(OS_WIN) |
PowerMessageWindow power_message_window_; |
#endif |
- DISALLOW_COPY_AND_ASSIGN(SystemMonitor); |
+ DISALLOW_COPY_AND_ASSIGN(PowerMonitor); |
}; |
} // namespace base |
-#endif // BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_ |
+#endif // BASE_POWER_MONITOR_POWER_MONITOR_H_ |