| Index: base/power_monitor/power_monitor.cc
|
| diff --git a/base/system_monitor/system_monitor.cc b/base/power_monitor/power_monitor.cc
|
| similarity index 28%
|
| copy from base/system_monitor/system_monitor.cc
|
| copy to base/power_monitor/power_monitor.cc
|
| index 2616275dfbc64db88abaa6abb0fa85e8cf561a7d..0241dfe1e6503aae37e30222b512890f880949a0 100644
|
| --- a/base/system_monitor/system_monitor.cc
|
| +++ b/base/power_monitor/power_monitor.cc
|
| @@ -2,19 +2,11 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "base/system_monitor/system_monitor.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/time.h"
|
| -#include "base/utf_string_conversions.h"
|
| +#include "base/power_monitor/power_monitor.h"
|
|
|
| namespace base {
|
|
|
| -static SystemMonitor* g_system_monitor = NULL;
|
| +static PowerMonitor* g_power_monitor = NULL;
|
|
|
| #if defined(ENABLE_BATTERY_MONITORING)
|
| // The amount of time (in ms) to wait before running the initial
|
| @@ -22,52 +14,58 @@ static SystemMonitor* g_system_monitor = NULL;
|
| static int kDelayedBatteryCheckMs = 10 * 1000;
|
| #endif // defined(ENABLE_BATTERY_MONITORING)
|
|
|
| -SystemMonitor::RemovableStorageInfo::RemovableStorageInfo() {
|
| -}
|
| -
|
| -SystemMonitor::RemovableStorageInfo::RemovableStorageInfo(
|
| - const std::string& id,
|
| - const string16& device_name,
|
| - const FilePath::StringType& device_location)
|
| - : device_id(id),
|
| - name(device_name),
|
| - location(device_location) {
|
| -}
|
| -
|
| -SystemMonitor::SystemMonitor()
|
| - : power_observer_list_(new ObserverListThreadSafe<PowerObserver>()),
|
| - devices_changed_observer_list_(
|
| - new ObserverListThreadSafe<DevicesChangedObserver>()),
|
| +PowerMonitor::PowerMonitor()
|
| + : observers_(new ObserverListThreadSafe<PowerObserver>()),
|
| battery_in_use_(false),
|
| - suspended_(false) {
|
| - DCHECK(!g_system_monitor);
|
| - g_system_monitor = this;
|
| + suspended_(false),
|
| + signaler_available_(true) {
|
| + DCHECK(!g_power_monitor);
|
| + g_power_monitor = this;
|
|
|
| DCHECK(MessageLoop::current());
|
| #if defined(ENABLE_BATTERY_MONITORING)
|
| delayed_battery_check_.Start(FROM_HERE,
|
| base::TimeDelta::FromMilliseconds(kDelayedBatteryCheckMs), this,
|
| - &SystemMonitor::BatteryCheck);
|
| + &PowerMonitor::BatteryCheck);
|
| #endif // defined(ENABLE_BATTERY_MONITORING)
|
| +
|
| #if defined(OS_MACOSX)
|
| PlatformInit();
|
| #endif
|
| }
|
|
|
| -SystemMonitor::~SystemMonitor() {
|
| +PowerMonitor::~PowerMonitor() {
|
| #if defined(OS_MACOSX)
|
| PlatformDestroy();
|
| #endif
|
| - DCHECK_EQ(this, g_system_monitor);
|
| - g_system_monitor = NULL;
|
| + DCHECK_EQ(this, g_power_monitor);
|
| + g_power_monitor = NULL;
|
| }
|
|
|
| // static
|
| -SystemMonitor* SystemMonitor::Get() {
|
| - return g_system_monitor;
|
| +PowerMonitor* PowerMonitor::Get() {
|
| + return g_power_monitor;
|
| +}
|
| +
|
| +PowerMonitor::Signaler* PowerMonitor::GetSignalerOnce() {
|
| + if (signaler_available_) {
|
| + signaler_available_ = false;
|
| + return new PowerMonitor::Signaler();
|
| + }
|
| +
|
| + // Return NULL after the first time it get called.
|
| + return NULL;
|
| }
|
|
|
| -void SystemMonitor::ProcessPowerMessage(PowerEvent event_id) {
|
| +void PowerMonitor::AddObserver(PowerObserver* obs) {
|
| + observers_->AddObserver(obs);
|
| +}
|
| +
|
| +void PowerMonitor::RemoveObserver(PowerObserver* obs) {
|
| + observers_->RemoveObserver(obs);
|
| +}
|
| +
|
| +void PowerMonitor::ProcessPowerEvent(PowerEvent event_id) {
|
| // Suppress duplicate notifications. Some platforms may
|
| // send multiple notifications of the same event.
|
| switch (event_id) {
|
| @@ -95,108 +93,46 @@ void SystemMonitor::ProcessPowerMessage(PowerEvent event_id) {
|
| }
|
| }
|
|
|
| -void SystemMonitor::ProcessDevicesChanged(DeviceType device_type) {
|
| - NotifyDevicesChanged(device_type);
|
| -}
|
| -
|
| -void SystemMonitor::ProcessRemovableStorageAttached(
|
| - const std::string& id,
|
| - const string16& name,
|
| - const FilePath::StringType& location) {
|
| - {
|
| - base::AutoLock lock(removable_storage_lock_);
|
| - if (ContainsKey(removable_storage_map_, id)) {
|
| - // This can happen if our unique id scheme fails. Ignore the incoming
|
| - // non-unique attachment.
|
| - return;
|
| - }
|
| - RemovableStorageInfo info(id, name, location);
|
| - removable_storage_map_.insert(std::make_pair(id, info));
|
| - }
|
| - NotifyRemovableStorageAttached(id, name, location);
|
| -}
|
| -
|
| -void SystemMonitor::ProcessRemovableStorageDetached(const std::string& id) {
|
| - {
|
| - base::AutoLock lock(removable_storage_lock_);
|
| - RemovableStorageMap::iterator it = removable_storage_map_.find(id);
|
| - if (it == removable_storage_map_.end())
|
| - return;
|
| - removable_storage_map_.erase(it);
|
| - }
|
| - NotifyRemovableStorageDetached(id);
|
| -}
|
| -
|
| -std::vector<SystemMonitor::RemovableStorageInfo>
|
| -SystemMonitor::GetAttachedRemovableStorage() const {
|
| - std::vector<RemovableStorageInfo> results;
|
| -
|
| - base::AutoLock lock(removable_storage_lock_);
|
| - for (RemovableStorageMap::const_iterator it = removable_storage_map_.begin();
|
| - it != removable_storage_map_.end();
|
| - ++it) {
|
| - results.push_back(it->second);
|
| - }
|
| - return results;
|
| -}
|
| -
|
| -void SystemMonitor::AddPowerObserver(PowerObserver* obs) {
|
| - power_observer_list_->AddObserver(obs);
|
| -}
|
| -
|
| -void SystemMonitor::RemovePowerObserver(PowerObserver* obs) {
|
| - power_observer_list_->RemoveObserver(obs);
|
| -}
|
| -
|
| -void SystemMonitor::AddDevicesChangedObserver(DevicesChangedObserver* obs) {
|
| - devices_changed_observer_list_->AddObserver(obs);
|
| +void PowerMonitor::NotifyPowerStateChange() {
|
| + DVLOG(1) << "PowerStateChange: " << (BatteryPower() ? "On" : "Off")
|
| + << " battery";
|
| + observers_->Notify(&PowerObserver::OnPowerStateChange,
|
| + BatteryPower());
|
| }
|
|
|
| -void SystemMonitor::RemoveDevicesChangedObserver(DevicesChangedObserver* obs) {
|
| - devices_changed_observer_list_->RemoveObserver(obs);
|
| +void PowerMonitor::NotifySuspend() {
|
| + DVLOG(1) << "Power Suspending";
|
| + observers_->Notify(&PowerObserver::OnSuspend);
|
| }
|
|
|
| -void SystemMonitor::NotifyDevicesChanged(DeviceType device_type) {
|
| - DVLOG(1) << "DevicesChanged with device type " << device_type;
|
| - devices_changed_observer_list_->Notify(
|
| - &DevicesChangedObserver::OnDevicesChanged, device_type);
|
| +void PowerMonitor::NotifyResume() {
|
| + DVLOG(1) << "Power Resuming";
|
| + observers_->Notify(&PowerObserver::OnResume);
|
| }
|
|
|
| -void SystemMonitor::NotifyRemovableStorageAttached(
|
| - const std::string& id,
|
| - const string16& name,
|
| - const FilePath::StringType& location) {
|
| - DVLOG(1) << "RemovableStorageAttached with name " << UTF16ToUTF8(name)
|
| - << " and id " << id;
|
| - devices_changed_observer_list_->Notify(
|
| - &DevicesChangedObserver::OnRemovableStorageAttached, id, name, location);
|
| +void PowerMonitor::BatteryCheck() {
|
| + ProcessPowerEvent(PowerMonitor::POWER_STATE_EVENT);
|
| }
|
|
|
| -void SystemMonitor::NotifyRemovableStorageDetached(const std::string& id) {
|
| - DVLOG(1) << "RemovableStorageDetached for id " << id;
|
| - devices_changed_observer_list_->Notify(
|
| - &DevicesChangedObserver::OnRemovableStorageDetached, id);
|
| -}
|
| +// PowerMonitor::Signaler
|
|
|
| -void SystemMonitor::NotifyPowerStateChange() {
|
| - DVLOG(1) << "PowerStateChange: " << (BatteryPower() ? "On" : "Off")
|
| - << " battery";
|
| - power_observer_list_->Notify(&PowerObserver::OnPowerStateChange,
|
| - BatteryPower());
|
| +PowerMonitor::Signaler::Signaler() {
|
| }
|
|
|
| -void SystemMonitor::NotifySuspend() {
|
| - DVLOG(1) << "Power Suspending";
|
| - power_observer_list_->Notify(&PowerObserver::OnSuspend);
|
| +PowerMonitor::Signaler::~Signaler() {
|
| }
|
|
|
| -void SystemMonitor::NotifyResume() {
|
| - DVLOG(1) << "Power Resuming";
|
| - power_observer_list_->Notify(&PowerObserver::OnResume);
|
| +#if defined(OS_WIN)
|
| +void PowerMonitor::Signaler::ProcessWmPowerBroadcastMessage(int event) {
|
| + if (PowerMonitor::Get())
|
| + PowerMonitor::Get()->ProcessWmPowerBroadcastMessage(event);
|
| }
|
| +#endif
|
|
|
| -void SystemMonitor::BatteryCheck() {
|
| - ProcessPowerMessage(SystemMonitor::POWER_STATE_EVENT);
|
| +void PowerMonitor::Signaler::ProcessPowerEvent(PowerEvent event) {
|
| + if (PowerMonitor::Get())
|
| + PowerMonitor::Get()->ProcessPowerEvent(event);
|
| }
|
|
|
| } // namespace base
|
| +
|
|
|