buffet: Push state changed to the server immediately Current delay for polling_period_ms is not acceptable. We'd like to see state change on server immediately. Simple throttling to 1 update per seconds. BUG=brillo:1124 TEST=`FEATURES=test emerge-gizmo buffet` Change-Id: Id042e1a6445850d024849e689b8d305c5c3af30f Reviewed-on: https://chromium-review.googlesource.com/273367 Tested-by: Vitaly Buka <vitalybuka@chromium.org> Trybot-Ready: Vitaly Buka <vitalybuka@chromium.org> Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc index f31495c..15d3dc4 100644 --- a/buffet/device_registration_info.cc +++ b/buffet/device_registration_info.cc
@@ -123,6 +123,9 @@ command_manager_->AddOnCommandDefChanged( base::Bind(&DeviceRegistrationInfo::OnCommandDefsChanged, weak_factory_.GetWeakPtr())); + state_manager_->AddOnChangedCallback( + base::Bind(&DeviceRegistrationInfo::OnStateChanged, + weak_factory_.GetWeakPtr())); } DeviceRegistrationInfo::~DeviceRegistrationInfo() = default; @@ -836,14 +839,6 @@ base::Bind(&DeviceRegistrationInfo::PublishCommands, base::Unretained(this)), base::Bind(&IgnoreCloudError))); - // TODO(antonm): Use better trigger: when StateManager registers new updates, - // it should call closure which will post a task, probably with some - // throttling, to publish state updates. - state_push_timer_.Start( - FROM_HERE, - base::TimeDelta::FromMilliseconds(config_->polling_period_ms()), - base::Bind(&DeviceRegistrationInfo::PublishStateUpdates, - base::Unretained(this))); } void DeviceRegistrationInfo::PublishCommands(const base::ListValue& commands) { @@ -942,6 +937,15 @@ base::Bind(&IgnoreCloudError)); } +void DeviceRegistrationInfo::OnStateChanged() { + VLOG(1) << "StateChanged notification received"; + if (!HaveRegistrationCredentials(nullptr)) + return; + + // TODO(vitalybuka): Integrate BackoffEntry. + PublishStateUpdates(); +} + void DeviceRegistrationInfo::OnConnected(const std::string& channel_name) { LOG(INFO) << "Notification channel successfully established over " << channel_name;
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h index 1314d5f..674bbd6 100644 --- a/buffet/device_registration_info.h +++ b/buffet/device_registration_info.h
@@ -224,6 +224,7 @@ // Callback called when command definitions are changed to re-publish new CDD. void OnCommandDefsChanged(); + void OnStateChanged(); // Overrides from NotificationDelegate void OnConnected(const std::string& channel_name) override; @@ -251,7 +252,6 @@ RegistrationStatus registration_status_{RegistrationStatus::kUnconfigured}; base::RepeatingTimer<DeviceRegistrationInfo> command_poll_timer_; - base::RepeatingTimer<DeviceRegistrationInfo> state_push_timer_; std::vector<OnRegistrationChangedCallback> on_registration_changed_;