diff options
author | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-21 20:48:00 +0000 |
---|---|---|
committer | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-21 20:48:00 +0000 |
commit | a0d7f587f9a7a661b157860638e84eb5a2be358f (patch) | |
tree | 9e7eb2dcfb11c45b6499022f95767422eb147df9 | |
parent | 6361ae888c8a9f3f86c0c7a0d92631d04c1ea0a0 (diff) | |
download | chromium_src-a0d7f587f9a7a661b157860638e84eb5a2be358f.zip chromium_src-a0d7f587f9a7a661b157860638e84eb5a2be358f.tar.gz chromium_src-a0d7f587f9a7a661b157860638e84eb5a2be358f.tar.bz2 |
chromeos: Update IdleActionImminent and SuspendDone handling
IdleActionImminent signals sent by powerd now include the
remaining time until the idle action will be performed; make
PowerManagerClient decode it and pass it to observers.
Also update PowerManagerClient to listen for SuspendDone
signals rather than SuspendStateChanged; the latter is
confusing and will be removed soon.
Updates the system_api dependency to a9acc4df.
BUG=287787,359619
TBR=stevenjb@chromium.org
Review URL: https://codereview.chromium.org/240343004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265058 0039d316-1c4b-4281-b951-d872f2087c98
27 files changed, 86 insertions, 101 deletions
diff --git a/ash/system/chromeos/power/power_event_observer.cc b/ash/system/chromeos/power/power_event_observer.cc index 5ede06b..776b004 100644 --- a/ash/system/chromeos/power/power_event_observer.cc +++ b/ash/system/chromeos/power/power_event_observer.cc @@ -54,7 +54,7 @@ void PowerEventObserver::SuspendImminent() { shell->display_configurator()->SuspendDisplays(); } -void PowerEventObserver::SystemResumed(const base::TimeDelta& sleep_duration) { +void PowerEventObserver::SuspendDone(const base::TimeDelta& sleep_duration) { Shell::GetInstance()->display_configurator()->ResumeDisplays(); Shell::GetInstance()->system_tray_notifier()->NotifyRefreshClock(); } diff --git a/ash/system/chromeos/power/power_event_observer.h b/ash/system/chromeos/power/power_event_observer.h index 518959b..46b6eb9 100644 --- a/ash/system/chromeos/power/power_event_observer.h +++ b/ash/system/chromeos/power/power_event_observer.h @@ -26,7 +26,7 @@ class ASH_EXPORT PowerEventObserver // chromeos::PowerManagerClient::Observer overrides: virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE; virtual void SuspendImminent() OVERRIDE; - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; // chromeos::SessionManagerClient::Observer overrides. virtual void ScreenIsLocked() OVERRIDE; diff --git a/ash/system/chromeos/power/power_event_observer_unittest.cc b/ash/system/chromeos/power/power_event_observer_unittest.cc index 94dcdedd..30cd2e9 100644 --- a/ash/system/chromeos/power/power_event_observer_unittest.cc +++ b/ash/system/chromeos/power/power_event_observer_unittest.cc @@ -53,7 +53,7 @@ TEST_F(PowerEventObserverTest, LockBeforeSuspend) { EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); // If the system is already locked, no callback should be requested. - observer_->SystemResumed(base::TimeDelta()); + observer_->SuspendDone(base::TimeDelta()); observer_->ScreenIsUnlocked(); observer_->ScreenIsLocked(); observer_->SuspendImminent(); @@ -61,7 +61,7 @@ TEST_F(PowerEventObserverTest, LockBeforeSuspend) { // It also shouldn't request a callback if it isn't instructed to lock the // screen. - observer_->SystemResumed(base::TimeDelta()); + observer_->SuspendDone(base::TimeDelta()); SetShouldLockScreenBeforeSuspending(false); observer_->SuspendImminent(); EXPECT_EQ(0, client->GetNumPendingSuspendReadinessCallbacks()); diff --git a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc index 8bbf815..089795e 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc +++ b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.cc @@ -89,7 +89,7 @@ void KioskModeIdleAppNameNotification::OnUserActivity(const ui::Event* event) { ResetTimer(); } -void KioskModeIdleAppNameNotification::SystemResumed( +void KioskModeIdleAppNameNotification::SuspendDone( const base::TimeDelta& sleep_duration) { // When we come back from a system resume we stop the timer and show the // message. diff --git a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h index 9006432..4bb327b 100644 --- a/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h +++ b/chrome/browser/chromeos/app_mode/kiosk_mode_idle_app_name_notification.h @@ -33,7 +33,7 @@ class KioskModeIdleAppNameNotification : public wm::UserActivityObserver, virtual void OnUserActivity(const ui::Event* event) OVERRIDE; // PowerManagerClient::Observer overrides: - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; // Begins listening for user activity and calls ResetTimer(). void Start(); diff --git a/chrome/browser/chromeos/extensions/extension_system_event_observer.cc b/chrome/browser/chromeos/extensions/extension_system_event_observer.cc index cf948ad..3938d9c 100644 --- a/chrome/browser/chromeos/extensions/extension_system_event_observer.cc +++ b/chrome/browser/chromeos/extensions/extension_system_event_observer.cc @@ -24,7 +24,7 @@ void ExtensionSystemEventObserver::BrightnessChanged(int level, extensions::DispatchBrightnessChangedEvent(level, user_initiated); } -void ExtensionSystemEventObserver::SystemResumed( +void ExtensionSystemEventObserver::SuspendDone( const base::TimeDelta& sleep_duration) { extensions::DispatchWokeUpEvent(); } diff --git a/chrome/browser/chromeos/extensions/extension_system_event_observer.h b/chrome/browser/chromeos/extensions/extension_system_event_observer.h index 8b914cf..d51dce0 100644 --- a/chrome/browser/chromeos/extensions/extension_system_event_observer.h +++ b/chrome/browser/chromeos/extensions/extension_system_event_observer.h @@ -22,7 +22,7 @@ class ExtensionSystemEventObserver : public PowerManagerClient::Observer, // PowerManagerClient::Observer overrides: virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE; - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; // SessionManagerClient::Observer override. virtual void ScreenIsUnlocked() OVERRIDE; diff --git a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc index 47b6051..17ecf0a 100644 --- a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc +++ b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.cc @@ -44,12 +44,12 @@ MountedDiskMonitor::~MountedDiskMonitor() { void MountedDiskMonitor::SuspendImminent() { // Flip the resuming flag while suspending, so it is possible to detect // resuming as soon as possible after the lid is open. Note, that mount - // events may occur before the SystemResumed method is called. + // events may occur before the SuspendDone method is called. is_resuming_ = true; weak_factory_.InvalidateWeakPtrs(); } -void MountedDiskMonitor::SystemResumed( +void MountedDiskMonitor::SuspendDone( const base::TimeDelta& sleep_duration) { // Undo any previous resets. Release the resuming flag after a fixed timeout. weak_factory_.InvalidateWeakPtrs(); diff --git a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h index bb0c540..a37d22d 100644 --- a/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h +++ b/chrome/browser/chromeos/file_manager/mounted_disk_monitor.h @@ -32,7 +32,7 @@ class MountedDiskMonitor // PowerManagerClient::Observer overrides: virtual void SuspendImminent() OVERRIDE; - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; // DiskMountManager::Observer overrides. virtual void OnDiskEvent( diff --git a/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc b/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc index 502c254..463f6f1 100644 --- a/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc +++ b/chrome/browser/chromeos/file_manager/mounted_disk_monitor_unittest.cc @@ -119,7 +119,7 @@ TEST_F(MountedDiskMonitorTest, SuspendAndResume) { // Pseudo system suspend and resume. mounted_disk_monitor_->SuspendImminent(); - mounted_disk_monitor_->SystemResumed(base::TimeDelta::FromSeconds(0)); + mounted_disk_monitor_->SuspendDone(base::TimeDelta::FromSeconds(0)); // On system resume, we expect unmount and then mount immediately. // During the phase, we expect the disk is remounting. diff --git a/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc b/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc index 196aaeb..c071f59 100644 --- a/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc +++ b/chrome/browser/chromeos/file_manager/volume_manager_unittest.cc @@ -517,12 +517,7 @@ TEST_F(VolumeManagerTest, OnMountEvent_Remounting) { // Emulate system suspend and then resume. { power_manager_client_->SendSuspendImminent(); - power_manager::SuspendState state; - state.set_type(power_manager::SuspendState_Type_SUSPEND_TO_MEMORY); - state.set_wall_time(0); - power_manager_client_->SendSuspendStateChanged(state); - state.set_type(power_manager::SuspendState_Type_RESUME); - power_manager_client_->SendSuspendStateChanged(state); + power_manager_client_->SendSuspendDone(); // After resume, the device is unmounted and then mounted. disk_mount_manager_->UnmountPath( diff --git a/chrome/browser/chromeos/login/webui_screen_locker.cc b/chrome/browser/chromeos/login/webui_screen_locker.cc index 8c2cf2d..b86b4b9 100644 --- a/chrome/browser/chromeos/login/webui_screen_locker.cc +++ b/chrome/browser/chromeos/login/webui_screen_locker.cc @@ -347,7 +347,7 @@ void WebUIScreenLocker::LidEventReceived(bool open, base::Bind(&WebUIScreenLocker::FocusUserPod, weak_factory_.GetWeakPtr())); } -void WebUIScreenLocker::SystemResumed(const base::TimeDelta& sleep_duration) { +void WebUIScreenLocker::SuspendDone(const base::TimeDelta& sleep_duration) { content::BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, diff --git a/chrome/browser/chromeos/login/webui_screen_locker.h b/chrome/browser/chromeos/login/webui_screen_locker.h index 155e542..841f685 100644 --- a/chrome/browser/chromeos/login/webui_screen_locker.h +++ b/chrome/browser/chromeos/login/webui_screen_locker.h @@ -118,7 +118,7 @@ class WebUIScreenLocker : public WebUILoginView, virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE; // PowerManagerClient::Observer overrides: - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; virtual void LidEventReceived(bool open, const base::TimeTicks& time) OVERRIDE; diff --git a/chrome/browser/chromeos/power/idle_action_warning_observer.cc b/chrome/browser/chromeos/power/idle_action_warning_observer.cc index d452cba..cc526ae 100644 --- a/chrome/browser/chromeos/power/idle_action_warning_observer.cc +++ b/chrome/browser/chromeos/power/idle_action_warning_observer.cc @@ -19,7 +19,8 @@ IdleActionWarningObserver::~IdleActionWarningObserver() { warning_dialog_->CloseDialog(); } -void IdleActionWarningObserver::IdleActionImminent() { +void IdleActionWarningObserver::IdleActionImminent( + const base::TimeDelta& time_until_idle_action) { if (!warning_dialog_) warning_dialog_ = new IdleActionWarningDialogView; } diff --git a/chrome/browser/chromeos/power/idle_action_warning_observer.h b/chrome/browser/chromeos/power/idle_action_warning_observer.h index 8cd0617..81deecf 100644 --- a/chrome/browser/chromeos/power/idle_action_warning_observer.h +++ b/chrome/browser/chromeos/power/idle_action_warning_observer.h @@ -21,7 +21,8 @@ class IdleActionWarningObserver : public PowerManagerClient::Observer { virtual ~IdleActionWarningObserver(); // PowerManagerClient::Observer: - virtual void IdleActionImminent() OVERRIDE; + virtual void IdleActionImminent( + const base::TimeDelta& time_until_idle_action) OVERRIDE; virtual void IdleActionDeferred() OVERRIDE; private: diff --git a/chrome/browser/chromeos/power/power_data_collector.cc b/chrome/browser/chromeos/power/power_data_collector.cc index a6ffe8f..bc8ebcd 100644 --- a/chrome/browser/chromeos/power/power_data_collector.cc +++ b/chrome/browser/chromeos/power/power_data_collector.cc @@ -59,7 +59,7 @@ void PowerDataCollector::PowerChanged( AddSample(&power_supply_data_, sample); } -void PowerDataCollector::SystemResumed(const base::TimeDelta& sleep_duration) { +void PowerDataCollector::SuspendDone(const base::TimeDelta& sleep_duration) { SystemResumedSample sample; sample.time = base::Time::Now(); sample.sleep_duration = sleep_duration; diff --git a/chrome/browser/chromeos/power/power_data_collector.h b/chrome/browser/chromeos/power/power_data_collector.h index 16ee5f7..436361d 100644 --- a/chrome/browser/chromeos/power/power_data_collector.h +++ b/chrome/browser/chromeos/power/power_data_collector.h @@ -84,7 +84,7 @@ class CHROMEOS_EXPORT PowerDataCollector : public PowerManagerClient::Observer { // PowerManagerClient::Observer implementation: virtual void PowerChanged( const power_manager::PowerSupplyProperties& prop) OVERRIDE; - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; // Only those power data samples which fall within the last // |kSampleTimeLimitSec| are stored in memory. diff --git a/chrome/browser/chromeos/power/power_data_collector_unittest.cc b/chrome/browser/chromeos/power/power_data_collector_unittest.cc index b45e43d..821d1d4 100644 --- a/chrome/browser/chromeos/power/power_data_collector_unittest.cc +++ b/chrome/browser/chromeos/power/power_data_collector_unittest.cc @@ -55,14 +55,14 @@ TEST_F(PowerDataCollectorTest, PowerChanged) { EXPECT_TRUE(data2[1].external_power); } -TEST_F(PowerDataCollectorTest, SystemResumed) { - power_data_collector_->SystemResumed(base::TimeDelta::FromSeconds(10)); +TEST_F(PowerDataCollectorTest, SuspendDone) { + power_data_collector_->SuspendDone(base::TimeDelta::FromSeconds(10)); const std::deque<PowerDataCollector::SystemResumedSample>& data1 = power_data_collector_->system_resumed_data(); ASSERT_EQ(static_cast<size_t>(1), data1.size()); ASSERT_EQ(static_cast<int64>(10), data1[0].sleep_duration.InSeconds()); - power_data_collector_->SystemResumed(base::TimeDelta::FromSeconds(20)); + power_data_collector_->SuspendDone(base::TimeDelta::FromSeconds(20)); const std::deque<PowerDataCollector::SystemResumedSample>& data2 = power_data_collector_->system_resumed_data(); ASSERT_EQ(static_cast<size_t>(2), data2.size()); diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager.cc b/chrome/browser/chromeos/system/automatic_reboot_manager.cc index a6b95e8..0a1be87 100644 --- a/chrome/browser/chromeos/system/automatic_reboot_manager.cc +++ b/chrome/browser/chromeos/system/automatic_reboot_manager.cc @@ -216,7 +216,7 @@ void AutomaticRebootManager::RemoveObserver( observers_.RemoveObserver(observer); } -void AutomaticRebootManager::SystemResumed( +void AutomaticRebootManager::SuspendDone( const base::TimeDelta& sleep_duration) { MaybeReboot(true); } diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager.h b/chrome/browser/chromeos/system/automatic_reboot_manager.h index 6e1adb5..1be4e2d 100644 --- a/chrome/browser/chromeos/system/automatic_reboot_manager.h +++ b/chrome/browser/chromeos/system/automatic_reboot_manager.h @@ -97,7 +97,7 @@ class AutomaticRebootManager : public PowerManagerClient::Observer, void RemoveObserver(AutomaticRebootManagerObserver* observer); // PowerManagerClient::Observer: - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; // UpdateEngineClient::Observer: virtual void UpdateStatusChanged( diff --git a/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc b/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc index f3204b6..409d36d 100644 --- a/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc +++ b/chrome/browser/chromeos/system/automatic_reboot_manager_unittest.cc @@ -426,7 +426,7 @@ void AutomaticRebootManagerBasicTest::NotifyUpdateRebootNeeded() { } void AutomaticRebootManagerBasicTest::NotifyResumed(bool expect_reboot) { - automatic_reboot_manager_->SystemResumed(base::TimeDelta::FromHours(1)); + automatic_reboot_manager_->SuspendDone(base::TimeDelta::FromHours(1)); task_runner_->RunUntilIdle(); EXPECT_EQ(expect_reboot ? 1 : 0, power_manager_client_->num_request_restart_calls()); diff --git a/chromeos/dbus/fake_power_manager_client.cc b/chromeos/dbus/fake_power_manager_client.cc index 529628a..5a39adf 100644 --- a/chromeos/dbus/fake_power_manager_client.cc +++ b/chromeos/dbus/fake_power_manager_client.cc @@ -92,19 +92,8 @@ void FakePowerManagerClient::SendSuspendImminent() { FOR_EACH_OBSERVER(Observer, observers_, SuspendImminent()); } -void FakePowerManagerClient::SendSuspendStateChanged( - const power_manager::SuspendState& suspend_state) { - base::Time wall_time = - base::Time::FromInternalValue(suspend_state.wall_time()); - switch (suspend_state.type()) { - case power_manager::SuspendState_Type_SUSPEND_TO_MEMORY: - last_suspend_wall_time_ = wall_time; - break; - case power_manager::SuspendState_Type_RESUME: - FOR_EACH_OBSERVER(Observer, observers_, - SystemResumed(wall_time - last_suspend_wall_time_)); - break; - } +void FakePowerManagerClient::SendSuspendDone() { + FOR_EACH_OBSERVER(Observer, observers_, SuspendDone(base::TimeDelta())); } } // namespace chromeos diff --git a/chromeos/dbus/fake_power_manager_client.h b/chromeos/dbus/fake_power_manager_client.h index dd0cd26..c40dc18 100644 --- a/chromeos/dbus/fake_power_manager_client.h +++ b/chromeos/dbus/fake_power_manager_client.h @@ -63,14 +63,10 @@ class FakePowerManagerClient : public PowerManagerClient { virtual base::Closure GetSuspendReadinessCallback() OVERRIDE; virtual int GetNumPendingSuspendReadinessCallbacks() OVERRIDE; - // Emulates that the dbus server sends a message "SuspendImminent" to the - // client. + // Emulates the power manager announcing that the system is starting or + // completing a suspend attempt. void SendSuspendImminent(); - - // Emulates that the dbus server sends a message "SuspendStateChanged" to the - // client. - void SendSuspendStateChanged( - const power_manager::SuspendState& suspend_state); + void SendSuspendDone(); private: ObserverList<Observer> observers_; @@ -78,9 +74,6 @@ class FakePowerManagerClient : public PowerManagerClient { // Last policy passed to SetPolicy(). power_manager::PowerManagementPolicy policy_; - // Last time passed to a SUSPEND_TO_MEMORY call to SendSuspendStateChanged(). - base::Time last_suspend_wall_time_; - // Number of times that RequestRestart() has been called. int num_request_restart_calls_; diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc index be8fb6d..80df142 100644 --- a/chromeos/dbus/power_manager_client.cc +++ b/chromeos/dbus/power_manager_client.cc @@ -268,18 +268,18 @@ class PowerManagerClientImpl : public PowerManagerClient { power_manager_proxy_->ConnectToSignal( power_manager::kPowerManagerInterface, - power_manager::kSuspendStateChangedSignal, - base::Bind(&PowerManagerClientImpl::SuspendStateChangedReceived, - weak_ptr_factory_.GetWeakPtr()), + power_manager::kSuspendImminentSignal, + base::Bind( + &PowerManagerClientImpl::SuspendImminentReceived, + weak_ptr_factory_.GetWeakPtr()), base::Bind(&PowerManagerClientImpl::SignalConnected, weak_ptr_factory_.GetWeakPtr())); power_manager_proxy_->ConnectToSignal( power_manager::kPowerManagerInterface, - power_manager::kSuspendImminentSignal, - base::Bind( - &PowerManagerClientImpl::SuspendImminentReceived, - weak_ptr_factory_.GetWeakPtr()), + power_manager::kSuspendDoneSignal, + base::Bind(&PowerManagerClientImpl::SuspendDoneReceived, + weak_ptr_factory_.GetWeakPtr()), base::Bind(&PowerManagerClientImpl::SignalConnected, weak_ptr_factory_.GetWeakPtr())); @@ -452,29 +452,58 @@ class PowerManagerClientImpl : public PowerManagerClient { } dbus::MessageReader reader(signal); - power_manager::SuspendImminent protobuf_imminent; - if (!reader.PopArrayOfBytesAsProto(&protobuf_imminent)) { + power_manager::SuspendImminent proto; + if (!reader.PopArrayOfBytesAsProto(&proto)) { LOG(ERROR) << "Unable to decode protocol buffer from " << power_manager::kSuspendImminentSignal << " signal"; return; } + VLOG(1) << "Got " << power_manager::kSuspendImminentSignal << " signal " + << "announcing suspend attempt " << proto.suspend_id(); if (suspend_is_pending_) { LOG(WARNING) << "Got " << power_manager::kSuspendImminentSignal << " signal about pending suspend attempt " - << protobuf_imminent.suspend_id() << " while still waiting " + << proto.suspend_id() << " while still waiting " << "on attempt " << pending_suspend_id_; } - pending_suspend_id_ = protobuf_imminent.suspend_id(); + pending_suspend_id_ = proto.suspend_id(); suspend_is_pending_ = true; num_pending_suspend_readiness_callbacks_ = 0; FOR_EACH_OBSERVER(Observer, observers_, SuspendImminent()); MaybeReportSuspendReadiness(); } + void SuspendDoneReceived(dbus::Signal* signal) { + dbus::MessageReader reader(signal); + power_manager::SuspendDone proto; + if (!reader.PopArrayOfBytesAsProto(&proto)) { + LOG(ERROR) << "Unable to decode protocol buffer from " + << power_manager::kSuspendDoneSignal << " signal"; + return; + } + + const base::TimeDelta duration = + base::TimeDelta::FromInternalValue(proto.suspend_duration()); + VLOG(1) << "Got " << power_manager::kSuspendDoneSignal << " signal:" + << " suspend_id=" << proto.suspend_id() + << " duration=" << duration.InSeconds() << " sec"; + FOR_EACH_OBSERVER( + PowerManagerClient::Observer, observers_, SuspendDone(duration)); + } + void IdleActionImminentReceived(dbus::Signal* signal) { - FOR_EACH_OBSERVER(Observer, observers_, IdleActionImminent()); + dbus::MessageReader reader(signal); + power_manager::IdleActionImminent proto; + if (!reader.PopArrayOfBytesAsProto(&proto)) { + LOG(ERROR) << "Unable to decode protocol buffer from " + << power_manager::kIdleActionImminentSignal << " signal"; + return; + } + FOR_EACH_OBSERVER(Observer, observers_, + IdleActionImminent(base::TimeDelta::FromInternalValue( + proto.time_until_idle_action()))); } void IdleActionDeferredReceived(dbus::Signal* signal) { @@ -527,31 +556,6 @@ class PowerManagerClientImpl : public PowerManagerClient { } } - void SuspendStateChangedReceived(dbus::Signal* signal) { - dbus::MessageReader reader(signal); - power_manager::SuspendState proto; - if (!reader.PopArrayOfBytesAsProto(&proto)) { - LOG(ERROR) << "Unable to decode protocol buffer from " - << power_manager::kSuspendStateChangedSignal << " signal"; - return; - } - - VLOG(1) << "Got " << power_manager::kSuspendStateChangedSignal << " signal:" - << " type=" << proto.type() << " wall_time=" << proto.wall_time(); - base::Time wall_time = - base::Time::FromInternalValue(proto.wall_time()); - switch (proto.type()) { - case power_manager::SuspendState_Type_SUSPEND_TO_MEMORY: - last_suspend_wall_time_ = wall_time; - break; - case power_manager::SuspendState_Type_RESUME: - FOR_EACH_OBSERVER( - PowerManagerClient::Observer, observers_, - SystemResumed(wall_time - last_suspend_wall_time_)); - break; - } - } - // Registers a suspend delay with the power manager. This is usually // only called at startup, but if the power manager restarts, we need to // create a new delay. @@ -608,6 +612,8 @@ class PowerManagerClientImpl : public PowerManagerClient { power_manager::kHandleSuspendReadinessMethod); dbus::MessageWriter writer(&method_call); + VLOG(1) << "Announcing readiness of suspend delay " << suspend_delay_id_ + << " for suspend attempt " << pending_suspend_id_; power_manager::SuspendReadinessInfo protobuf_request; protobuf_request.set_delay_id(suspend_delay_id_); protobuf_request.set_suspend_id(pending_suspend_id_); @@ -646,10 +652,6 @@ class PowerManagerClientImpl : public PowerManagerClient { // attempt but have not yet been called. int num_pending_suspend_readiness_callbacks_; - // Wall time from the latest signal telling us that the system was about to - // suspend to memory. - base::Time last_suspend_wall_time_; - // Last state passed to SetIsProjecting(). bool last_is_projecting_; diff --git a/chromeos/dbus/power_manager_client.h b/chromeos/dbus/power_manager_client.h index 5c957f4..f37476e 100644 --- a/chromeos/dbus/power_manager_client.h +++ b/chromeos/dbus/power_manager_client.h @@ -66,6 +66,11 @@ class CHROMEOS_EXPORT PowerManagerClient : public DBusClient { // the observer is ready for suspend. virtual void SuspendImminent() {} + // Called when a suspend attempt (previously announced via + // SuspendImminent()) has completed. The system may not have actually + // suspended (if e.g. the user canceled the suspend attempt). + virtual void SuspendDone(const base::TimeDelta& sleep_duration) {} + // Called when the power button is pressed or released. virtual void PowerButtonEventReceived(bool down, const base::TimeTicks& timestamp) {} @@ -74,11 +79,10 @@ class CHROMEOS_EXPORT PowerManagerClient : public DBusClient { virtual void LidEventReceived(bool open, const base::TimeTicks& timestamp) {} - // Called when the system resumes from sleep. - virtual void SystemResumed(const base::TimeDelta& sleep_duration) {} - - // Called when the idle action will be performed soon. - virtual void IdleActionImminent() {} + // Called when the idle action will be performed after + // |time_until_idle_action|. + virtual void IdleActionImminent( + const base::TimeDelta& time_until_idle_action) {} // Called after IdleActionImminent() when the inactivity timer is reset // before the idle action has been performed. diff --git a/chromeos/network/network_change_notifier_chromeos.cc b/chromeos/network/network_change_notifier_chromeos.cc index d8d3d2c..5c6908a 100644 --- a/chromeos/network/network_change_notifier_chromeos.cc +++ b/chromeos/network/network_change_notifier_chromeos.cc @@ -84,7 +84,7 @@ NetworkChangeNotifierChromeos::GetCurrentConnectionType() const { return connection_type_; } -void NetworkChangeNotifierChromeos::SystemResumed( +void NetworkChangeNotifierChromeos::SuspendDone( const base::TimeDelta& sleep_duration) { // Force invalidation of network resources on resume. NetworkChangeNotifier::NotifyObserversOfIPAddressChange(); diff --git a/chromeos/network/network_change_notifier_chromeos.h b/chromeos/network/network_change_notifier_chromeos.h index aabfddc..d70386e 100644 --- a/chromeos/network/network_change_notifier_chromeos.h +++ b/chromeos/network/network_change_notifier_chromeos.h @@ -36,7 +36,7 @@ class CHROMEOS_EXPORT NetworkChangeNotifierChromeos GetCurrentConnectionType() const OVERRIDE; // PowerManagerClient::Observer overrides. - virtual void SystemResumed(const base::TimeDelta& sleep_duration) OVERRIDE; + virtual void SuspendDone(const base::TimeDelta& sleep_duration) OVERRIDE; // NetworkStateHandlerObserver overrides. virtual void DefaultNetworkChanged( |