blob: 3ff310adf70564dc2f24b90b968ea5b91b6e064f [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/resource_coordinator/usage_clock.h"
#include "chrome/browser/resource_coordinator/time.h"
namespace resource_coordinator {
UsageClock::UsageClock() : current_usage_session_start_time_(NowTicks()) {
if (metrics::DesktopSessionDurationTracker::IsInitialized()) {
auto* tracker = metrics::DesktopSessionDurationTracker::Get();
tracker->AddObserver(this);
if (!tracker->in_session())
current_usage_session_start_time_ = base::TimeTicks();
}
}
UsageClock::~UsageClock() {
if (metrics::DesktopSessionDurationTracker::IsInitialized())
metrics::DesktopSessionDurationTracker::Get()->RemoveObserver(this);
}
base::TimeDelta UsageClock::GetTotalUsageTime() const {
base::TimeDelta elapsed_time_in_session = usage_time_in_completed_sessions_;
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();
}
void UsageClock::OnSessionStarted(base::TimeTicks session_start) {
// Ignore |session_start| because it doesn't come from the resource
// coordinator clock.
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(IsInUse());
usage_time_in_completed_sessions_ +=
NowTicks() - current_usage_session_start_time_;
current_usage_session_start_time_ = base::TimeTicks();
}
} // namespace resource_coordinator