diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-18 07:04:06 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-18 07:04:06 +0000 |
commit | 69803a4f13f3eb26b982e82493672367e984907a (patch) | |
tree | 7129dda29bb0b45ae287e3d0b8d6c34e83ae98cc /ui | |
parent | c7e136fc8a564f1a30ef6214e4f2b5d598cfbe94 (diff) | |
download | chromium_src-69803a4f13f3eb26b982e82493672367e984907a.zip chromium_src-69803a4f13f3eb26b982e82493672367e984907a.tar.gz chromium_src-69803a4f13f3eb26b982e82493672367e984907a.tar.bz2 |
Move SystemMonitor to base/.
I plan to use SystemMonitor in net/.
Fix up the Mac implementation not to use Cocoa APIs since @interface is not allowed in base.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/7015017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85732 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/base/system_monitor/system_monitor.cc | 108 | ||||
-rw-r--r-- | ui/base/system_monitor/system_monitor.h | 143 | ||||
-rw-r--r-- | ui/base/system_monitor/system_monitor_mac.mm | 67 | ||||
-rw-r--r-- | ui/base/system_monitor/system_monitor_posix.cc | 14 | ||||
-rw-r--r-- | ui/base/system_monitor/system_monitor_unittest.cc | 91 | ||||
-rw-r--r-- | ui/base/system_monitor/system_monitor_win.cc | 50 | ||||
-rw-r--r-- | ui/views/widget/native_widget_win.cc | 2 |
7 files changed, 1 insertions, 474 deletions
diff --git a/ui/base/system_monitor/system_monitor.cc b/ui/base/system_monitor/system_monitor.cc deleted file mode 100644 index 80110cb..0000000 --- a/ui/base/system_monitor/system_monitor.cc +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h" - -#include "base/logging.h" -#include "base/message_loop.h" -#include "base/time.h" - -namespace ui { - -static SystemMonitor* g_system_monitor = NULL; - -#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() - : observer_list_(new ObserverListThreadSafe<PowerObserver>()), - battery_in_use_(false), - suspended_(false) { - DCHECK(!g_system_monitor); - g_system_monitor = this; - - DCHECK(MessageLoop::current()); -#if defined(ENABLE_BATTERY_MONITORING) - delayed_battery_check_.Start( - base::TimeDelta::FromMilliseconds(kDelayedBatteryCheckMs), this, - &SystemMonitor::BatteryCheck); -#endif // defined(ENABLE_BATTERY_MONITORING) -#if defined(OS_MACOSX) - PlatformInit(); -#endif -} - -SystemMonitor::~SystemMonitor() { -#if defined(OS_MACOSX) - PlatformDestroy(); -#endif - DCHECK_EQ(this, g_system_monitor); - g_system_monitor = NULL; -} - -// static -SystemMonitor* SystemMonitor::Get() { - return g_system_monitor; -} - -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() { - VLOG(1) << "PowerStateChange: " << (BatteryPower() ? "On" : "Off") - << " battery"; - observer_list_->Notify(&PowerObserver::OnPowerStateChange, BatteryPower()); -} - -void SystemMonitor::NotifySuspend() { - VLOG(1) << "Power Suspending"; - observer_list_->Notify(&PowerObserver::OnSuspend); -} - -void SystemMonitor::NotifyResume() { - VLOG(1) << "Power Resuming"; - observer_list_->Notify(&PowerObserver::OnResume); -} - -void SystemMonitor::BatteryCheck() { - ProcessPowerMessage(SystemMonitor::POWER_STATE_EVENT); -} - -} // namespace ui diff --git a/ui/base/system_monitor/system_monitor.h b/ui/base/system_monitor/system_monitor.h deleted file mode 100644 index b1e26cf..0000000 --- a/ui/base/system_monitor/system_monitor.h +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright (c) 2011 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 UI_BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_ -#define UI_BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_ -#pragma once - -#include "build/build_config.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) -#ifdef __OBJC__ -@class SystemMonitorBridge; -#else -class SystemMonitorBridge; -#endif -#endif - -namespace ui { - -// 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: - // 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. - }; - - // Create SystemMonitor. Only one SystemMonitor instance per application - // is allowed. - SystemMonitor(); - ~SystemMonitor(); - - // Get the application-wide SystemMonitor (if not present, returns NULL). - static SystemMonitor* Get(); - - // - // Power-related APIs - // - - // 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 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() {} - }; - - // 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); - - private: -#if defined(OS_MACOSX) - void PlatformInit(); - void PlatformDestroy(); -#endif - - // 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 - -#if defined(OS_MACOSX) - SystemMonitorBridge* system_monitor_bridge_; -#endif - - DISALLOW_COPY_AND_ASSIGN(SystemMonitor); -}; - -} // namespace ui - -#endif // UI_BASE_SYSTEM_MONITOR_SYSTEM_MONITOR_H_ diff --git a/ui/base/system_monitor/system_monitor_mac.mm b/ui/base/system_monitor/system_monitor_mac.mm deleted file mode 100644 index ffcb2a2..0000000 --- a/ui/base/system_monitor/system_monitor_mac.mm +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h" - -#import <AppKit/AppKit.h> - -@interface SystemMonitorBridge : NSObject { - @private - ui::SystemMonitor* systemMonitor_; // weak -} - -- (id)initWithSystemMonitor:(ui::SystemMonitor*)monitor; -- (void)computerDidSleep:(NSNotification*)notification; -- (void)computerDidWake:(NSNotification*)notification; - -@end - -@implementation SystemMonitorBridge - -- (id)initWithSystemMonitor:(ui::SystemMonitor*)monitor { - self = [super init]; - if (self) { - systemMonitor_ = monitor; - - // See QA1340 - // <http://developer.apple.com/library/mac/#qa/qa2004/qa1340.html> for more - // details. - [[[NSWorkspace sharedWorkspace] notificationCenter] - addObserver:self - selector:@selector(computerDidSleep:) - name:NSWorkspaceWillSleepNotification - object:nil]; - [[[NSWorkspace sharedWorkspace] notificationCenter] - addObserver:self - selector:@selector(computerDidWake:) - name:NSWorkspaceDidWakeNotification - object:nil]; - } - return self; -} - -- (void)dealloc { - [[[NSWorkspace sharedWorkspace] notificationCenter] - removeObserver:self]; - [super dealloc]; -} - -- (void)computerDidSleep:(NSNotification*)notification { - systemMonitor_->ProcessPowerMessage(ui::SystemMonitor::SUSPEND_EVENT); -} - -- (void)computerDidWake:(NSNotification*)notification { - systemMonitor_->ProcessPowerMessage(ui::SystemMonitor::RESUME_EVENT); -} - -@end - -void ui::SystemMonitor::PlatformInit() { - system_monitor_bridge_ = - [[SystemMonitorBridge alloc] initWithSystemMonitor:this]; -} - -void ui::SystemMonitor::PlatformDestroy() { - [system_monitor_bridge_ release]; -} diff --git a/ui/base/system_monitor/system_monitor_posix.cc b/ui/base/system_monitor/system_monitor_posix.cc deleted file mode 100644 index ddd0fe0..0000000 --- a/ui/base/system_monitor/system_monitor_posix.cc +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h" - -namespace ui { - -bool SystemMonitor::IsBatteryPower() { - NOTIMPLEMENTED(); - return false; -} - -} // namespace ui diff --git a/ui/base/system_monitor/system_monitor_unittest.cc b/ui/base/system_monitor/system_monitor_unittest.cc deleted file mode 100644 index 28b2cbf..0000000 --- a/ui/base/system_monitor/system_monitor_unittest.cc +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace ui { - -class PowerTest : public SystemMonitor::PowerObserver { - public: - PowerTest() - : battery_(false), - power_state_changes_(0), - suspends_(0), - resumes_(0) { - } - - // PowerObserver callbacks. - void OnPowerStateChange(bool on_battery_power) { - power_state_changes_++; - } - - void OnSuspend() { - suspends_++; - } - - void OnResume() { - resumes_++; - } - - // Test status counts. - bool battery() { return battery_; } - int power_state_changes() { return power_state_changes_; } - int suspends() { return suspends_; } - int resumes() { return resumes_; } - - private: - bool battery_; // Do we currently think we're on battery power. - int power_state_changes_; // Count of OnPowerStateChange notifications. - int suspends_; // Count of OnSuspend notifications. - int resumes_; // Count of OnResume notifications. -}; - -TEST(SystemMonitor, PowerNotifications) { - const int kObservers = 5; - - // Initialize a message loop for this to run on. - MessageLoop loop; - // Initialize time() since it registers as a SystemMonitor observer. - base::Time now = base::Time::Now(); - - SystemMonitor system_monitor; - PowerTest test[kObservers]; - for (int index = 0; index < kObservers; ++index) - system_monitor.AddObserver(&test[index]); - - // Send a bunch of power changes. Since the battery power hasn't - // actually changed, we shouldn't get notifications. - for (int index = 0; index < 5; index++) { - system_monitor.ProcessPowerMessage(SystemMonitor::POWER_STATE_EVENT); - EXPECT_EQ(test[0].power_state_changes(), 0); - } - - // Sending resume when not suspended should have no effect. - system_monitor.ProcessPowerMessage(SystemMonitor::RESUME_EVENT); - loop.RunAllPending(); - EXPECT_EQ(test[0].resumes(), 0); - - // Pretend we suspended. - system_monitor.ProcessPowerMessage(SystemMonitor::SUSPEND_EVENT); - loop.RunAllPending(); - EXPECT_EQ(test[0].suspends(), 1); - - // Send a second suspend notification. This should be suppressed. - system_monitor.ProcessPowerMessage(SystemMonitor::SUSPEND_EVENT); - loop.RunAllPending(); - EXPECT_EQ(test[0].suspends(), 1); - - // Pretend we were awakened. - system_monitor.ProcessPowerMessage(SystemMonitor::RESUME_EVENT); - loop.RunAllPending(); - EXPECT_EQ(test[0].resumes(), 1); - - // Send a duplicate resume notification. This should be suppressed. - system_monitor.ProcessPowerMessage(SystemMonitor::RESUME_EVENT); - loop.RunAllPending(); - EXPECT_EQ(test[0].resumes(), 1); -} - -} // namespace ui diff --git a/ui/base/system_monitor/system_monitor_win.cc b/ui/base/system_monitor/system_monitor_win.cc deleted file mode 100644 index df8aabf..0000000 --- a/ui/base/system_monitor/system_monitor_win.cc +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2011 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 "ui/base/system_monitor/system_monitor.h" - -namespace ui { - -void SystemMonitor::ProcessWmPowerBroadcastMessage(int event_id) { - PowerEvent power_event; - switch (event_id) { - case PBT_APMPOWERSTATUSCHANGE: // The power status changed. - power_event = POWER_STATE_EVENT; - break; - case PBT_APMRESUMEAUTOMATIC: // Resume from suspend. - //case PBT_APMRESUMESUSPEND: // User-initiated resume from suspend. - // We don't notify for this latter event - // because if it occurs it is always sent as a - // second event after PBT_APMRESUMEAUTOMATIC. - power_event = RESUME_EVENT; - break; - case PBT_APMSUSPEND: // System has been suspended. - power_event = SUSPEND_EVENT; - break; - default: - return; - - // Other Power Events: - // PBT_APMBATTERYLOW - removed in Vista. - // PBT_APMOEMEVENT - removed in Vista. - // PBT_APMQUERYSUSPEND - removed in Vista. - // PBT_APMQUERYSUSPENDFAILED - removed in Vista. - // PBT_APMRESUMECRITICAL - removed in Vista. - // PBT_POWERSETTINGCHANGE - user changed the power settings. - } - ProcessPowerMessage(power_event); -} - -// Function to query the system to see if it is currently running on -// battery power. Returns true if running on battery. -bool SystemMonitor::IsBatteryPower() { - SYSTEM_POWER_STATUS status; - if (!GetSystemPowerStatus(&status)) { - LOG(ERROR) << "GetSystemPowerStatus failed: " << GetLastError(); - return false; - } - return (status.ACLineStatus == 0); -} - -} // namespace ui diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc index 8a5ad92..4247547 100644 --- a/ui/views/widget/native_widget_win.cc +++ b/ui/views/widget/native_widget_win.cc @@ -5,7 +5,7 @@ #include "ui/views/widget/native_widget_win.h" #include "base/memory/scoped_ptr.h" -#include "ui/base/system_monitor/system_monitor.h" +#include "base/system_monitor/system_monitor.h" #include "ui/base/view_prop.h" #include "ui/base/win/hwnd_util.h" #include "ui/gfx/canvas_skia.h" |