|  | // Copyright 2020 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "content/browser/xr/metrics/session_timer.h" | 
|  |  | 
|  | #include "base/metrics/histogram_functions.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | SessionTimer::SessionTimer(size_t trace_id) : trace_id_(trace_id) {} | 
|  |  | 
|  | SessionTimer::~SessionTimer() { | 
|  | StopSession(); | 
|  | } | 
|  |  | 
|  | size_t SessionTimer::GetTraceId() { | 
|  | return trace_id_; | 
|  | } | 
|  |  | 
|  | base::Time SessionTimer::GetStartTime() { | 
|  | return start_time_; | 
|  | } | 
|  |  | 
|  | void SessionTimer::StartSession() { | 
|  | DCHECK(start_time_.is_null()) | 
|  | << "Must stop existing session before starting a new one"; | 
|  |  | 
|  | start_time_ = base::Time::Now(); | 
|  | } | 
|  |  | 
|  | void SessionTimer::StopSession() { | 
|  | if (start_time_.is_null()) { | 
|  | return; | 
|  | } | 
|  | // Calculate the duration of the session. | 
|  | base::TimeDelta session_duration = base::Time::Now() - start_time_; | 
|  | if (!session_duration.is_zero()) { | 
|  | // TODO(crbug.com/40677123): Consider renaming the timers to | 
|  | // something that indicates both that these also record AR, and that these | 
|  | // are no longer "suffixed" histograms. | 
|  | base::UmaHistogramCustomTimes("VRSessionTime.WebVR", session_duration, | 
|  | base::TimeDelta(), base::Hours(5), 100); | 
|  | } | 
|  |  | 
|  | start_time_ = base::Time(); | 
|  | trace_id_ = 0; | 
|  | } | 
|  |  | 
|  | }  // namespace content |