// Copyright 2016 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_MEDIA_WATCH_TIME_REPORTER_H_ #define THIRD_PARTY_BLINK_PUBLIC_COMMON_MEDIA_WATCH_TIME_REPORTER_H_ #include <vector> #include "base/functional/callback.h" #include "base/power_monitor/power_observer.h" #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "media/base/audio_codecs.h" #include "media/base/media_log.h" #include "media/base/timestamp_constants.h" #include "media/base/video_codecs.h" #include "media/mojo/mojom/media_metrics_provider.mojom.h" #include "media/mojo/mojom/watch_time_recorder.mojom.h" #include "mojo/public/cpp/bindings/remote.h" #include "third_party/blink/public/common/common_export.h" #include "third_party/blink/public/common/media/display_type.h" #include "third_party/blink/public/common/media/watch_time_component.h" #include "ui/gfx/geometry/size.h" #include "url/origin.h" namespace blink { // Class for monitoring and reporting watch time in response to various state // changes during the playback of media. We record metrics for audio only // playbacks as well as video only or audio+video playbacks of sufficient size. // // Watch time for our purposes is defined as the amount of elapsed media time. // Any amount of elapsed time is reported to the WatchTimeRecorder, but only // amounts above limits::kMinimumElapsedWatchTimeSecs are reported to UMA. Watch // time is checked every 5 seconds from then on and reported to multiple // buckets: All, MSE, SRC, EME, AC, and battery. // // Either of paused or muted is sufficient to stop watch time metric reports. // Each of these has a hysteresis where if the state change is undone within 5 // seconds, the watch time will be counted as uninterrupted. // // There are both foreground and background buckets for watch time. E.g., when // media goes into the background foreground collection stops and background // collection starts. As with other events, there is hysteresis on change // between the foreground and background. // // Similarly, there are both muted and unmuted buckets for watch time. E.g., if // a playback is muted the unmuted collection stops and muted collection starts. // As with other events, there is hysteresis between mute and unmute. // // Power events (on/off battery power), native controls changes, or display type // changes have a similar hysteresis, but unlike the aforementioned properties, // will not stop metric collection. // // Each seek event will result in a new watch time metric being started and the // old metric finalized as accurately as possible. class BLINK_COMMON_EXPORT WatchTimeReporter : base::PowerStateObserver { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_MEDIA_WATCH_TIME_REPORTER_H_