| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromeos/dbus/power_manager_client.h" | 5 #include "chromeos/dbus/power_manager_client.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 << (old_owner.empty() ? "[none]" : old_owner.c_str()) | 381 << (old_owner.empty() ? "[none]" : old_owner.c_str()) |
| 382 << " New owner: " | 382 << " New owner: " |
| 383 << (new_owner.empty() ? "[none]" : new_owner.c_str()); | 383 << (new_owner.empty() ? "[none]" : new_owner.c_str()); |
| 384 suspend_is_pending_ = false; | 384 suspend_is_pending_ = false; |
| 385 pending_suspend_id_ = -1; | 385 pending_suspend_id_ = -1; |
| 386 suspending_from_dark_resume_ = false; | 386 suspending_from_dark_resume_ = false; |
| 387 if (!new_owner.empty()) { | 387 if (!new_owner.empty()) { |
| 388 POWER_LOG(EVENT) << "Sending initial state to power manager"; | 388 POWER_LOG(EVENT) << "Sending initial state to power manager"; |
| 389 RegisterSuspendDelays(); | 389 RegisterSuspendDelays(); |
| 390 SetIsProjecting(last_is_projecting_); | 390 SetIsProjecting(last_is_projecting_); |
| 391 FOR_EACH_OBSERVER(Observer, observers_, PowerManagerRestarted()); | 391 for (auto& observer : observers_) |
| 392 observer.PowerManagerRestarted(); |
| 392 } | 393 } |
| 393 } | 394 } |
| 394 | 395 |
| 395 void BrightnessChangedReceived(dbus::Signal* signal) { | 396 void BrightnessChangedReceived(dbus::Signal* signal) { |
| 396 dbus::MessageReader reader(signal); | 397 dbus::MessageReader reader(signal); |
| 397 int32_t brightness_level = 0; | 398 int32_t brightness_level = 0; |
| 398 bool user_initiated = 0; | 399 bool user_initiated = 0; |
| 399 if (!(reader.PopInt32(&brightness_level) && | 400 if (!(reader.PopInt32(&brightness_level) && |
| 400 reader.PopBool(&user_initiated))) { | 401 reader.PopBool(&user_initiated))) { |
| 401 POWER_LOG(ERROR) << "Brightness changed signal had incorrect parameters: " | 402 POWER_LOG(ERROR) << "Brightness changed signal had incorrect parameters: " |
| 402 << signal->ToString(); | 403 << signal->ToString(); |
| 403 return; | 404 return; |
| 404 } | 405 } |
| 405 POWER_LOG(DEBUG) << "Brightness changed to " << brightness_level | 406 POWER_LOG(DEBUG) << "Brightness changed to " << brightness_level |
| 406 << ": user initiated " << user_initiated; | 407 << ": user initiated " << user_initiated; |
| 407 FOR_EACH_OBSERVER(Observer, observers_, | 408 for (auto& observer : observers_) |
| 408 BrightnessChanged(brightness_level, user_initiated)); | 409 observer.BrightnessChanged(brightness_level, user_initiated); |
| 409 } | 410 } |
| 410 | 411 |
| 411 void PeripheralBatteryStatusReceived(dbus::Signal* signal) { | 412 void PeripheralBatteryStatusReceived(dbus::Signal* signal) { |
| 412 dbus::MessageReader reader(signal); | 413 dbus::MessageReader reader(signal); |
| 413 power_manager::PeripheralBatteryStatus protobuf_status; | 414 power_manager::PeripheralBatteryStatus protobuf_status; |
| 414 if (!reader.PopArrayOfBytesAsProto(&protobuf_status)) { | 415 if (!reader.PopArrayOfBytesAsProto(&protobuf_status)) { |
| 415 POWER_LOG(ERROR) << "Unable to decode protocol buffer from " | 416 POWER_LOG(ERROR) << "Unable to decode protocol buffer from " |
| 416 << power_manager::kPeripheralBatteryStatusSignal | 417 << power_manager::kPeripheralBatteryStatusSignal |
| 417 << " signal"; | 418 << " signal"; |
| 418 return; | 419 return; |
| 419 } | 420 } |
| 420 | 421 |
| 421 std::string path = protobuf_status.path(); | 422 std::string path = protobuf_status.path(); |
| 422 std::string name = protobuf_status.name(); | 423 std::string name = protobuf_status.name(); |
| 423 int level = protobuf_status.has_level() ? protobuf_status.level() : -1; | 424 int level = protobuf_status.has_level() ? protobuf_status.level() : -1; |
| 424 | 425 |
| 425 POWER_LOG(DEBUG) << "Device battery status received " << level << " for " | 426 POWER_LOG(DEBUG) << "Device battery status received " << level << " for " |
| 426 << name << " at " << path; | 427 << name << " at " << path; |
| 427 | 428 |
| 428 FOR_EACH_OBSERVER(Observer, observers_, | 429 for (auto& observer : observers_) |
| 429 PeripheralBatteryStatusReceived(path, name, level)); | 430 observer.PeripheralBatteryStatusReceived(path, name, level); |
| 430 } | 431 } |
| 431 | 432 |
| 432 void PowerSupplyPollReceived(dbus::Signal* signal) { | 433 void PowerSupplyPollReceived(dbus::Signal* signal) { |
| 433 POWER_LOG(DEBUG) << "Received power supply poll signal."; | 434 POWER_LOG(DEBUG) << "Received power supply poll signal."; |
| 434 dbus::MessageReader reader(signal); | 435 dbus::MessageReader reader(signal); |
| 435 power_manager::PowerSupplyProperties protobuf; | 436 power_manager::PowerSupplyProperties protobuf; |
| 436 if (reader.PopArrayOfBytesAsProto(&protobuf)) { | 437 if (reader.PopArrayOfBytesAsProto(&protobuf)) { |
| 437 HandlePowerSupplyProperties(protobuf); | 438 HandlePowerSupplyProperties(protobuf); |
| 438 } else { | 439 } else { |
| 439 POWER_LOG(ERROR) << "Unable to decode " | 440 POWER_LOG(ERROR) << "Unable to decode " |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 dbus::MessageReader reader(response); | 473 dbus::MessageReader reader(response); |
| 473 double percent = 0.0; | 474 double percent = 0.0; |
| 474 if (!reader.PopDouble(&percent)) | 475 if (!reader.PopDouble(&percent)) |
| 475 POWER_LOG(ERROR) << "Error reading response from powerd: " | 476 POWER_LOG(ERROR) << "Error reading response from powerd: " |
| 476 << response->ToString(); | 477 << response->ToString(); |
| 477 callback.Run(percent); | 478 callback.Run(percent); |
| 478 } | 479 } |
| 479 | 480 |
| 480 void HandlePowerSupplyProperties( | 481 void HandlePowerSupplyProperties( |
| 481 const power_manager::PowerSupplyProperties& proto) { | 482 const power_manager::PowerSupplyProperties& proto) { |
| 482 FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(proto)); | 483 for (auto& observer : observers_) |
| 484 observer.PowerChanged(proto); |
| 483 const bool on_battery = proto.external_power() == | 485 const bool on_battery = proto.external_power() == |
| 484 power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED; | 486 power_manager::PowerSupplyProperties_ExternalPower_DISCONNECTED; |
| 485 base::PowerMonitorDeviceSource::SetPowerSource(on_battery); | 487 base::PowerMonitorDeviceSource::SetPowerSource(on_battery); |
| 486 } | 488 } |
| 487 | 489 |
| 488 void HandleRegisterSuspendDelayReply(bool dark_suspend, | 490 void HandleRegisterSuspendDelayReply(bool dark_suspend, |
| 489 const std::string& method_name, | 491 const std::string& method_name, |
| 490 dbus::Response* response) { | 492 dbus::Response* response) { |
| 491 if (!response) { | 493 if (!response) { |
| 492 POWER_LOG(ERROR) << "Error calling " << method_name; | 494 POWER_LOG(ERROR) << "Error calling " << method_name; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 suspend_is_pending_ = true; | 550 suspend_is_pending_ = true; |
| 549 suspending_from_dark_resume_ = in_dark_resume; | 551 suspending_from_dark_resume_ = in_dark_resume; |
| 550 num_pending_suspend_readiness_callbacks_ = 0; | 552 num_pending_suspend_readiness_callbacks_ = 0; |
| 551 | 553 |
| 552 // Record the fact that observers are being notified to ensure that we don't | 554 // Record the fact that observers are being notified to ensure that we don't |
| 553 // report readiness prematurely if one of them calls | 555 // report readiness prematurely if one of them calls |
| 554 // GetSuspendReadinessCallback() and then runs the callback synchonously | 556 // GetSuspendReadinessCallback() and then runs the callback synchonously |
| 555 // instead of asynchronously. | 557 // instead of asynchronously. |
| 556 notifying_observers_about_suspend_imminent_ = true; | 558 notifying_observers_about_suspend_imminent_ = true; |
| 557 if (suspending_from_dark_resume_) | 559 if (suspending_from_dark_resume_) |
| 558 FOR_EACH_OBSERVER(Observer, observers_, DarkSuspendImminent()); | 560 for (auto& observer : observers_) |
| 561 observer.DarkSuspendImminent(); |
| 559 else | 562 else |
| 560 FOR_EACH_OBSERVER(Observer, observers_, SuspendImminent()); | 563 for (auto& observer : observers_) |
| 564 observer.SuspendImminent(); |
| 561 notifying_observers_about_suspend_imminent_ = false; | 565 notifying_observers_about_suspend_imminent_ = false; |
| 562 | 566 |
| 563 base::PowerMonitorDeviceSource::HandleSystemSuspending(); | 567 base::PowerMonitorDeviceSource::HandleSystemSuspending(); |
| 564 MaybeReportSuspendReadiness(); | 568 MaybeReportSuspendReadiness(); |
| 565 } | 569 } |
| 566 | 570 |
| 567 void SuspendDoneReceived(dbus::Signal* signal) { | 571 void SuspendDoneReceived(dbus::Signal* signal) { |
| 568 dbus::MessageReader reader(signal); | 572 dbus::MessageReader reader(signal); |
| 569 power_manager::SuspendDone proto; | 573 power_manager::SuspendDone proto; |
| 570 if (!reader.PopArrayOfBytesAsProto(&proto)) { | 574 if (!reader.PopArrayOfBytesAsProto(&proto)) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 } | 606 } |
| 603 | 607 |
| 604 // powerd always pairs each SuspendImminent signal with SuspendDone before | 608 // powerd always pairs each SuspendImminent signal with SuspendDone before |
| 605 // starting the next suspend attempt, so we should no longer report | 609 // starting the next suspend attempt, so we should no longer report |
| 606 // readiness for any in-progress suspend attempts. | 610 // readiness for any in-progress suspend attempts. |
| 607 pending_suspend_id_ = -1; | 611 pending_suspend_id_ = -1; |
| 608 suspend_is_pending_ = false; | 612 suspend_is_pending_ = false; |
| 609 suspending_from_dark_resume_ = false; | 613 suspending_from_dark_resume_ = false; |
| 610 num_pending_suspend_readiness_callbacks_ = 0; | 614 num_pending_suspend_readiness_callbacks_ = 0; |
| 611 | 615 |
| 612 FOR_EACH_OBSERVER( | 616 for (auto& observer : observers_) |
| 613 PowerManagerClient::Observer, observers_, SuspendDone(duration)); | 617 observer.SuspendDone(duration); |
| 614 base::PowerMonitorDeviceSource::HandleSystemResumed(); | 618 base::PowerMonitorDeviceSource::HandleSystemResumed(); |
| 615 } | 619 } |
| 616 | 620 |
| 617 void IdleActionImminentReceived(dbus::Signal* signal) { | 621 void IdleActionImminentReceived(dbus::Signal* signal) { |
| 618 dbus::MessageReader reader(signal); | 622 dbus::MessageReader reader(signal); |
| 619 power_manager::IdleActionImminent proto; | 623 power_manager::IdleActionImminent proto; |
| 620 if (!reader.PopArrayOfBytesAsProto(&proto)) { | 624 if (!reader.PopArrayOfBytesAsProto(&proto)) { |
| 621 POWER_LOG(ERROR) << "Unable to decode protocol buffer from " | 625 POWER_LOG(ERROR) << "Unable to decode protocol buffer from " |
| 622 << power_manager::kIdleActionImminentSignal << " signal"; | 626 << power_manager::kIdleActionImminentSignal << " signal"; |
| 623 return; | 627 return; |
| 624 } | 628 } |
| 625 FOR_EACH_OBSERVER(Observer, observers_, | 629 for (auto& observer : observers_) { |
| 626 IdleActionImminent(base::TimeDelta::FromInternalValue( | 630 observer.IdleActionImminent( |
| 627 proto.time_until_idle_action()))); | 631 base::TimeDelta::FromInternalValue(proto.time_until_idle_action())); |
| 632 } |
| 628 } | 633 } |
| 629 | 634 |
| 630 void IdleActionDeferredReceived(dbus::Signal* signal) { | 635 void IdleActionDeferredReceived(dbus::Signal* signal) { |
| 631 FOR_EACH_OBSERVER(Observer, observers_, IdleActionDeferred()); | 636 for (auto& observer : observers_) |
| 637 observer.IdleActionDeferred(); |
| 632 } | 638 } |
| 633 | 639 |
| 634 void InputEventReceived(dbus::Signal* signal) { | 640 void InputEventReceived(dbus::Signal* signal) { |
| 635 dbus::MessageReader reader(signal); | 641 dbus::MessageReader reader(signal); |
| 636 power_manager::InputEvent proto; | 642 power_manager::InputEvent proto; |
| 637 if (!reader.PopArrayOfBytesAsProto(&proto)) { | 643 if (!reader.PopArrayOfBytesAsProto(&proto)) { |
| 638 POWER_LOG(ERROR) << "Unable to decode protocol buffer from " | 644 POWER_LOG(ERROR) << "Unable to decode protocol buffer from " |
| 639 << power_manager::kInputEventSignal << " signal"; | 645 << power_manager::kInputEventSignal << " signal"; |
| 640 return; | 646 return; |
| 641 } | 647 } |
| 642 | 648 |
| 643 base::TimeTicks timestamp = | 649 base::TimeTicks timestamp = |
| 644 base::TimeTicks::FromInternalValue(proto.timestamp()); | 650 base::TimeTicks::FromInternalValue(proto.timestamp()); |
| 645 POWER_LOG(USER) << "Got " << power_manager::kInputEventSignal << " signal:" | 651 POWER_LOG(USER) << "Got " << power_manager::kInputEventSignal << " signal:" |
| 646 << " type=" << proto.type() | 652 << " type=" << proto.type() |
| 647 << " timestamp=" << proto.timestamp(); | 653 << " timestamp=" << proto.timestamp(); |
| 648 switch (proto.type()) { | 654 switch (proto.type()) { |
| 649 case power_manager::InputEvent_Type_POWER_BUTTON_DOWN: | 655 case power_manager::InputEvent_Type_POWER_BUTTON_DOWN: |
| 650 case power_manager::InputEvent_Type_POWER_BUTTON_UP: { | 656 case power_manager::InputEvent_Type_POWER_BUTTON_UP: { |
| 651 const bool down = | 657 const bool down = |
| 652 (proto.type() == power_manager::InputEvent_Type_POWER_BUTTON_DOWN); | 658 (proto.type() == power_manager::InputEvent_Type_POWER_BUTTON_DOWN); |
| 653 FOR_EACH_OBSERVER(PowerManagerClient::Observer, observers_, | 659 for (auto& observer : observers_) |
| 654 PowerButtonEventReceived(down, timestamp)); | 660 observer.PowerButtonEventReceived(down, timestamp); |
| 655 | 661 |
| 656 // Tell powerd that Chrome has handled power button presses. | 662 // Tell powerd that Chrome has handled power button presses. |
| 657 if (down) { | 663 if (down) { |
| 658 dbus::MethodCall method_call( | 664 dbus::MethodCall method_call( |
| 659 power_manager::kPowerManagerInterface, | 665 power_manager::kPowerManagerInterface, |
| 660 power_manager::kHandlePowerButtonAcknowledgmentMethod); | 666 power_manager::kHandlePowerButtonAcknowledgmentMethod); |
| 661 dbus::MessageWriter writer(&method_call); | 667 dbus::MessageWriter writer(&method_call); |
| 662 writer.AppendInt64(proto.timestamp()); | 668 writer.AppendInt64(proto.timestamp()); |
| 663 power_manager_proxy_->CallMethod( | 669 power_manager_proxy_->CallMethod( |
| 664 &method_call, | 670 &method_call, |
| 665 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 671 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 666 dbus::ObjectProxy::EmptyResponseCallback()); | 672 dbus::ObjectProxy::EmptyResponseCallback()); |
| 667 } | 673 } |
| 668 break; | 674 break; |
| 669 } | 675 } |
| 670 case power_manager::InputEvent_Type_LID_OPEN: | 676 case power_manager::InputEvent_Type_LID_OPEN: |
| 671 case power_manager::InputEvent_Type_LID_CLOSED: { | 677 case power_manager::InputEvent_Type_LID_CLOSED: { |
| 672 bool open = | 678 bool open = |
| 673 (proto.type() == power_manager::InputEvent_Type_LID_OPEN); | 679 (proto.type() == power_manager::InputEvent_Type_LID_OPEN); |
| 674 FOR_EACH_OBSERVER(PowerManagerClient::Observer, observers_, | 680 for (auto& observer : observers_) |
| 675 LidEventReceived(open, timestamp)); | 681 observer.LidEventReceived(open, timestamp); |
| 676 break; | 682 break; |
| 677 } | 683 } |
| 678 case power_manager::InputEvent_Type_TABLET_MODE_ON: | 684 case power_manager::InputEvent_Type_TABLET_MODE_ON: |
| 679 case power_manager::InputEvent_Type_TABLET_MODE_OFF: { | 685 case power_manager::InputEvent_Type_TABLET_MODE_OFF: { |
| 680 bool on = | 686 bool on = |
| 681 (proto.type() == power_manager::InputEvent_Type_TABLET_MODE_ON); | 687 (proto.type() == power_manager::InputEvent_Type_TABLET_MODE_ON); |
| 682 FOR_EACH_OBSERVER(PowerManagerClient::Observer, observers_, | 688 for (auto& observer : observers_) |
| 683 TabletModeEventReceived(on, timestamp)); | 689 observer.TabletModeEventReceived(on, timestamp); |
| 684 break; | 690 break; |
| 685 } | 691 } |
| 686 } | 692 } |
| 687 } | 693 } |
| 688 | 694 |
| 689 void RegisterSuspendDelayImpl( | 695 void RegisterSuspendDelayImpl( |
| 690 const std::string& method_name, | 696 const std::string& method_name, |
| 691 const power_manager::RegisterSuspendDelayRequest& protobuf_request, | 697 const power_manager::RegisterSuspendDelayRequest& protobuf_request, |
| 692 dbus::ObjectProxy::ResponseCallback callback) { | 698 dbus::ObjectProxy::ResponseCallback callback) { |
| 693 dbus::MethodCall method_call( | 699 dbus::MethodCall method_call( |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 // static | 880 // static |
| 875 PowerManagerClient* PowerManagerClient::Create( | 881 PowerManagerClient* PowerManagerClient::Create( |
| 876 DBusClientImplementationType type) { | 882 DBusClientImplementationType type) { |
| 877 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 883 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
| 878 return new PowerManagerClientImpl(); | 884 return new PowerManagerClientImpl(); |
| 879 DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type); | 885 DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type); |
| 880 return new FakePowerManagerClient(); | 886 return new FakePowerManagerClient(); |
| 881 } | 887 } |
| 882 | 888 |
| 883 } // namespace chromeos | 889 } // namespace chromeos |
| OLD | NEW |