Index: chrome/browser/metrics/desktop_engagement/desktop_engagement_service.cc |
diff --git a/chrome/browser/metrics/desktop_engagement/desktop_engagement_service.cc b/chrome/browser/metrics/desktop_engagement/desktop_engagement_service.cc |
deleted file mode 100644 |
index b64ebddc13b028f712169397fd12b0f2265262eb..0000000000000000000000000000000000000000 |
--- a/chrome/browser/metrics/desktop_engagement/desktop_engagement_service.cc |
+++ /dev/null |
@@ -1,144 +0,0 @@ |
-// Copyright 2016 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/metrics/desktop_engagement/desktop_engagement_service.h" |
- |
-#include "base/bind.h" |
-#include "base/metrics/histogram_macros.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "components/variations/variations_associated_data.h" |
- |
-namespace metrics { |
- |
-namespace { |
- |
-DesktopEngagementService* g_instance = nullptr; |
- |
-} // namespace |
- |
-// static |
-void DesktopEngagementService::Initialize() { |
- g_instance = new DesktopEngagementService; |
-} |
- |
-// static |
-bool DesktopEngagementService::IsInitialized() { |
- return g_instance != nullptr; |
-} |
- |
-// static |
-DesktopEngagementService* DesktopEngagementService::Get() { |
- DCHECK(g_instance); |
- return g_instance; |
-} |
- |
-void DesktopEngagementService::StartTimer(base::TimeDelta duration) { |
- timer_.Start(FROM_HERE, duration, |
- base::Bind(&DesktopEngagementService::OnTimerFired, |
- weak_factory_.GetWeakPtr())); |
-} |
- |
-void DesktopEngagementService::OnVisibilityChanged(bool visible) { |
- is_visible_ = visible; |
- if (is_visible_ && !is_first_session_) { |
- OnUserEvent(); |
- } else if (in_session_ && !is_audio_playing_) { |
- DVLOG(4) << "Ending session due to visibility change"; |
- EndSession(); |
- } |
-} |
- |
-void DesktopEngagementService::OnUserEvent() { |
- if (!is_visible_) |
- return; |
- |
- last_user_event_ = base::TimeTicks::Now(); |
- // This may start session. |
- if (!in_session_) { |
- DVLOG(4) << "Starting session due to user event"; |
- StartSession(); |
- } |
-} |
- |
-void DesktopEngagementService::OnAudioStart() { |
- // This may start session. |
- is_audio_playing_ = true; |
- if (!in_session_) { |
- DVLOG(4) << "Starting session due to audio start"; |
- StartSession(); |
- } |
-} |
- |
-void DesktopEngagementService::OnAudioEnd() { |
- is_audio_playing_ = false; |
- |
- // If the timer is not running, this means that no user events happened in the |
- // last 5 minutes so the session can be terminated. |
- if (!timer_.IsRunning()) { |
- DVLOG(4) << "Ending session due to audio ending"; |
- EndSession(); |
- } |
-} |
- |
-DesktopEngagementService::DesktopEngagementService() |
- : session_start_(base::TimeTicks::Now()), |
- last_user_event_(session_start_), |
- audio_tracker_(this), |
- weak_factory_(this) { |
- InitInactivityTimeout(); |
-} |
- |
-DesktopEngagementService::~DesktopEngagementService() {} |
- |
-void DesktopEngagementService::OnTimerFired() { |
- base::TimeDelta remaining = |
- inactivity_timeout_ - (base::TimeTicks::Now() - last_user_event_); |
- if (remaining.ToInternalValue() > 0) { |
- StartTimer(remaining); |
- return; |
- } |
- |
- // No user events happened in the last 5 min. Terminate the session now. |
- if (!is_audio_playing_) { |
- DVLOG(4) << "Ending session after delay"; |
- EndSession(); |
- } |
-} |
- |
-void DesktopEngagementService::StartSession() { |
- in_session_ = true; |
- is_first_session_ = false; |
- session_start_ = base::TimeTicks::Now(); |
- StartTimer(inactivity_timeout_); |
-} |
- |
-void DesktopEngagementService::EndSession() { |
- in_session_ = false; |
- |
- base::TimeDelta delta = base::TimeTicks::Now() - session_start_; |
- |
- // If timer is not running then session ended because of inactivity. |
- if (!timer_.IsRunning()) |
- delta -= inactivity_timeout_; |
- |
- DVLOG(4) << "Logging session length of " << delta.InSeconds() << " seconds."; |
- |
- // Note: This metric is recorded separately for Android in |
- // UmaSessionStats::UmaEndSession. |
- UMA_HISTOGRAM_LONG_TIMES("Session.TotalDuration", delta); |
-} |
- |
-void DesktopEngagementService::InitInactivityTimeout() { |
- const int kDefaultInactivityTimeoutMinutes = 5; |
- |
- int timeout_minutes = kDefaultInactivityTimeoutMinutes; |
- std::string param_value = variations::GetVariationParamValue( |
- "DesktopEngagement", "inactivity_timeout"); |
- if (!param_value.empty()) |
- base::StringToInt(param_value, &timeout_minutes); |
- |
- inactivity_timeout_ = base::TimeDelta::FromMinutes(timeout_minutes); |
-} |
- |
-} // namespace metrics |