summaryrefslogtreecommitdiffstats
path: root/content/browser/media/capture/window_activity_tracker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/media/capture/window_activity_tracker.cc')
-rw-r--r--content/browser/media/capture/window_activity_tracker.cc54
1 files changed, 54 insertions, 0 deletions
diff --git a/content/browser/media/capture/window_activity_tracker.cc b/content/browser/media/capture/window_activity_tracker.cc
new file mode 100644
index 0000000..394792d
--- /dev/null
+++ b/content/browser/media/capture/window_activity_tracker.cc
@@ -0,0 +1,54 @@
+// 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 "content/browser/media/capture/window_activity_tracker.h"
+
+#include "base/time/time.h"
+
+namespace content {
+
+namespace {
+
+// The time period within which a triggered UI event is considered
+// currently active.
+const int kTimePeriodUiEventMicros = 100000; // 100 ms
+
+// Minimum number of user interactions before we consider the user to be in
+// interactive mode. The goal is to prevent user interactions to launch
+// animated content from causing target playout time flip-flop.
+const int kMinUserInteractions = 5;
+
+} // namespace
+
+WindowActivityTracker::WindowActivityTracker() {
+ Reset();
+}
+
+WindowActivityTracker::~WindowActivityTracker() {}
+
+bool WindowActivityTracker::IsUiInteractionActive() const {
+ return ui_events_count_ > kMinUserInteractions;
+}
+
+void WindowActivityTracker::RegisterMouseInteractionObserver(
+ const base::Closure& observer) {
+ mouse_interaction_observer_ = observer;
+}
+
+void WindowActivityTracker::Reset() {
+ ui_events_count_ = 0;
+ last_time_ui_event_detected_ = base::TimeTicks();
+}
+
+void WindowActivityTracker::OnMouseActivity() {
+ if (!mouse_interaction_observer_.is_null())
+ mouse_interaction_observer_.Run();
+ if (base::TimeTicks::Now() - last_time_ui_event_detected_ >
+ base::TimeDelta::FromMicroseconds(kTimePeriodUiEventMicros)) {
+ ui_events_count_++;
+ }
+ last_time_ui_event_detected_ = base::TimeTicks::Now();
+}
+
+} // namespace content