Commit 9e1cac23 authored by Francois Doray's avatar Francois Doray Committed by Commit Bot

RC: Add UsageClock::IsInUse().

This method returns true if Chrome is considered to be in use. This
will be used by TabManager to know whether it should schedule a call
to PerformStateTransitions() (it is never necessary to schedule a call
to this method when Chrome is not in use).

Bug: 775644
Change-Id: I20e2e55280c84fcef9b56bb18c2feedb3aed136d
Reviewed-on: https://chromium-review.googlesource.com/1133301Reviewed-by: default avatarSébastien Marchand <sebmarchand@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#574216}
parent c0b4e54e
......@@ -28,23 +28,27 @@ UsageClock::~UsageClock() {
base::TimeDelta UsageClock::GetTotalUsageTime() const {
base::TimeDelta elapsed_time_in_session = usage_time_in_completed_sessions_;
if (!current_usage_session_start_time_.is_null())
if (IsInUse())
elapsed_time_in_session += NowTicks() - current_usage_session_start_time_;
return elapsed_time_in_session;
}
bool UsageClock::IsInUse() const {
return !current_usage_session_start_time_.is_null();
}
#if !defined(OS_CHROMEOS)
void UsageClock::OnSessionStarted(base::TimeTicks session_start) {
// Ignore |session_start| because it doesn't come from the resource
// coordinator clock.
DCHECK(current_usage_session_start_time_.is_null());
DCHECK(!IsInUse());
current_usage_session_start_time_ = NowTicks();
}
void UsageClock::OnSessionEnded(base::TimeDelta session_length) {
// Ignore |session_length| because it wasn't measured using the resource
// coordinator clock.
DCHECK(!current_usage_session_start_time_.is_null());
DCHECK(IsInUse());
usage_time_in_completed_sessions_ +=
NowTicks() - current_usage_session_start_time_;
current_usage_session_start_time_ = base::TimeTicks();
......
......@@ -38,6 +38,9 @@ class UsageClock
// Returns the amount of Chrome usage time since this was instantiated.
base::TimeDelta GetTotalUsageTime() const;
// Returns true if Chrome is currently considered to be in use.
bool IsInUse() const;
private:
#if !defined(OS_CHROMEOS)
void OnSessionStarted(base::TimeTicks session_start) override;
......
......@@ -27,15 +27,13 @@ TEST(ResourceCoordinatorUsageClock, UsageClock) {
#if defined(OS_CHROMEOS)
// On ChromeOS, UsageClock behaves like a normal clock.
UsageClock session_clock;
EXPECT_EQ(session_clock.GetTotalUsageTime(), base::TimeDelta());
UsageClock usage_clock;
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta());
clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(),
base::TimeDelta::FromMinutes(1));
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(1));
clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(),
base::TimeDelta::FromMinutes(2));
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(2));
#else
// On non-ChromeOS, UsageClock advances when
// DesktopSessionDurationTracker::in_session() is true.
......@@ -46,35 +44,34 @@ TEST(ResourceCoordinatorUsageClock, UsageClock) {
tracker->OnUserEvent();
EXPECT_TRUE(tracker->in_session());
UsageClock session_clock;
EXPECT_EQ(session_clock.GetTotalUsageTime(), base::TimeDelta());
UsageClock usage_clock;
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta());
EXPECT_TRUE(tracker->in_session());
EXPECT_TRUE(usage_clock.IsInUse());
// Verify that time advances when Chrome is in use.
clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(),
base::TimeDelta::FromMinutes(1));
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(1));
clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(),
base::TimeDelta::FromMinutes(2));
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(2));
// Verify that time is updated when Chrome stops being used.
clock.Advance(base::TimeDelta::FromMinutes(1));
tracker->OnVisibilityChanged(false, base::TimeDelta());
EXPECT_FALSE(tracker->in_session());
EXPECT_EQ(session_clock.GetTotalUsageTime(),
base::TimeDelta::FromMinutes(3));
EXPECT_FALSE(usage_clock.IsInUse());
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(3));
// Verify that time stays still when Chrome is not in use.
clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(),
base::TimeDelta::FromMinutes(3));
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(3));
// Verify that time advances again when Chrome is in use.
tracker->OnVisibilityChanged(true, base::TimeDelta());
EXPECT_TRUE(tracker->in_session());
EXPECT_TRUE(usage_clock.IsInUse());
clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(),
base::TimeDelta::FromMinutes(4));
EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(4));
#endif // defined(OS_CHROMEOS)
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment