Add D-Bus method to get the duration since an update completed.
This new API can be used by Chrome to automatically reboot the device
at N hours after updating. This is implemented as a D-Bus method that
returns the number of micro-seconds on the wall-clock since the update
completed. If the device has not updated, the D-Bus method returns an
error.
For robustness, durations are measured using the CLOCK_BOOTTIME clock
instead of the usual CLOCK_REALTIME clock. This avoids interference
with NTP adjustments, the RTC clock being wrong and other things.
BUG=chromium:218192
TEST=New unit test + unit tests pass + manual test on a device using
the gdbus(1) command as the chronos user.
Change-Id: I51d44d69afe2d3024bb0780916c3c4e3f8ebb19e
Reviewed-on: https://chromium-review.googlesource.com/173032
Reviewed-by: David Zeuthen <zeuthen@chromium.org>
Commit-Queue: David Zeuthen <zeuthen@chromium.org>
Tested-by: David Zeuthen <zeuthen@chromium.org>
diff --git a/fake_clock.h b/fake_clock.h
index 105d664..d920aaf 100644
--- a/fake_clock.h
+++ b/fake_clock.h
@@ -22,6 +22,10 @@
return monotonic_time_;
}
+ virtual base::Time GetBootTime() {
+ return boot_time_;
+ }
+
void SetWallclockTime(const base::Time &time) {
wallclock_time_ = time;
}
@@ -30,9 +34,14 @@
monotonic_time_ = time;
}
+ void SetBootTime(const base::Time &time) {
+ boot_time_ = time;
+ }
+
private:
base::Time wallclock_time_;
base::Time monotonic_time_;
+ base::Time boot_time_;
DISALLOW_COPY_AND_ASSIGN(FakeClock);
};