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() { ...@@ -28,23 +28,27 @@ UsageClock::~UsageClock() {
base::TimeDelta UsageClock::GetTotalUsageTime() const { base::TimeDelta UsageClock::GetTotalUsageTime() const {
base::TimeDelta elapsed_time_in_session = usage_time_in_completed_sessions_; 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_; elapsed_time_in_session += NowTicks() - current_usage_session_start_time_;
return elapsed_time_in_session; return elapsed_time_in_session;
} }
bool UsageClock::IsInUse() const {
return !current_usage_session_start_time_.is_null();
}
#if !defined(OS_CHROMEOS) #if !defined(OS_CHROMEOS)
void UsageClock::OnSessionStarted(base::TimeTicks session_start) { void UsageClock::OnSessionStarted(base::TimeTicks session_start) {
// Ignore |session_start| because it doesn't come from the resource // Ignore |session_start| because it doesn't come from the resource
// coordinator clock. // coordinator clock.
DCHECK(current_usage_session_start_time_.is_null()); DCHECK(!IsInUse());
current_usage_session_start_time_ = NowTicks(); current_usage_session_start_time_ = NowTicks();
} }
void UsageClock::OnSessionEnded(base::TimeDelta session_length) { void UsageClock::OnSessionEnded(base::TimeDelta session_length) {
// Ignore |session_length| because it wasn't measured using the resource // Ignore |session_length| because it wasn't measured using the resource
// coordinator clock. // coordinator clock.
DCHECK(!current_usage_session_start_time_.is_null()); DCHECK(IsInUse());
usage_time_in_completed_sessions_ += usage_time_in_completed_sessions_ +=
NowTicks() - current_usage_session_start_time_; NowTicks() - current_usage_session_start_time_;
current_usage_session_start_time_ = base::TimeTicks(); current_usage_session_start_time_ = base::TimeTicks();
......
...@@ -38,6 +38,9 @@ class UsageClock ...@@ -38,6 +38,9 @@ class UsageClock
// Returns the amount of Chrome usage time since this was instantiated. // Returns the amount of Chrome usage time since this was instantiated.
base::TimeDelta GetTotalUsageTime() const; base::TimeDelta GetTotalUsageTime() const;
// Returns true if Chrome is currently considered to be in use.
bool IsInUse() const;
private: private:
#if !defined(OS_CHROMEOS) #if !defined(OS_CHROMEOS)
void OnSessionStarted(base::TimeTicks session_start) override; void OnSessionStarted(base::TimeTicks session_start) override;
......
...@@ -27,15 +27,13 @@ TEST(ResourceCoordinatorUsageClock, UsageClock) { ...@@ -27,15 +27,13 @@ TEST(ResourceCoordinatorUsageClock, UsageClock) {
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
// On ChromeOS, UsageClock behaves like a normal clock. // On ChromeOS, UsageClock behaves like a normal clock.
UsageClock session_clock; UsageClock usage_clock;
EXPECT_EQ(session_clock.GetTotalUsageTime(), base::TimeDelta()); EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta());
clock.Advance(base::TimeDelta::FromMinutes(1)); clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(), EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(1));
base::TimeDelta::FromMinutes(1));
clock.Advance(base::TimeDelta::FromMinutes(1)); clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(), EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(2));
base::TimeDelta::FromMinutes(2));
#else #else
// On non-ChromeOS, UsageClock advances when // On non-ChromeOS, UsageClock advances when
// DesktopSessionDurationTracker::in_session() is true. // DesktopSessionDurationTracker::in_session() is true.
...@@ -46,35 +44,34 @@ TEST(ResourceCoordinatorUsageClock, UsageClock) { ...@@ -46,35 +44,34 @@ TEST(ResourceCoordinatorUsageClock, UsageClock) {
tracker->OnUserEvent(); tracker->OnUserEvent();
EXPECT_TRUE(tracker->in_session()); EXPECT_TRUE(tracker->in_session());
UsageClock session_clock; UsageClock usage_clock;
EXPECT_EQ(session_clock.GetTotalUsageTime(), base::TimeDelta()); 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. // Verify that time advances when Chrome is in use.
clock.Advance(base::TimeDelta::FromMinutes(1)); clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(), EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(1));
base::TimeDelta::FromMinutes(1));
clock.Advance(base::TimeDelta::FromMinutes(1)); clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(), EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(2));
base::TimeDelta::FromMinutes(2));
// Verify that time is updated when Chrome stops being used. // Verify that time is updated when Chrome stops being used.
clock.Advance(base::TimeDelta::FromMinutes(1)); clock.Advance(base::TimeDelta::FromMinutes(1));
tracker->OnVisibilityChanged(false, base::TimeDelta()); tracker->OnVisibilityChanged(false, base::TimeDelta());
EXPECT_FALSE(tracker->in_session()); EXPECT_FALSE(tracker->in_session());
EXPECT_EQ(session_clock.GetTotalUsageTime(), EXPECT_FALSE(usage_clock.IsInUse());
base::TimeDelta::FromMinutes(3)); EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(3));
// Verify that time stays still when Chrome is not in use. // Verify that time stays still when Chrome is not in use.
clock.Advance(base::TimeDelta::FromMinutes(1)); clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(), EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(3));
base::TimeDelta::FromMinutes(3));
// Verify that time advances again when Chrome is in use. // Verify that time advances again when Chrome is in use.
tracker->OnVisibilityChanged(true, base::TimeDelta()); tracker->OnVisibilityChanged(true, base::TimeDelta());
EXPECT_TRUE(tracker->in_session()); EXPECT_TRUE(tracker->in_session());
EXPECT_TRUE(usage_clock.IsInUse());
clock.Advance(base::TimeDelta::FromMinutes(1)); clock.Advance(base::TimeDelta::FromMinutes(1));
EXPECT_EQ(session_clock.GetTotalUsageTime(), EXPECT_EQ(usage_clock.GetTotalUsageTime(), base::TimeDelta::FromMinutes(4));
base::TimeDelta::FromMinutes(4));
#endif // defined(OS_CHROMEOS) #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