-
Notifications
You must be signed in to change notification settings - Fork 6.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[media] Add WMPI watch time histogram.
This new histogram follows the structure of the MediaPlayer watch time histogram, so that the two can be directly comparable. As a result it does not record watch time when the rate is significantly larger than 1. Bug: 985144 Change-Id: Id5a52cf12a015a2e2a232ccc89fc6e9a4ee6d84f Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1745503 Reviewed-by: Thomas Guilbert <tguilbert@chromium.org> Reviewed-by: Mark Pearson <mpearson@chromium.org> Commit-Queue: Dan Sanders <sandersd@chromium.org> Cr-Commit-Position: refs/heads/master@{#686254}
- Loading branch information
Dan Sanders
authored and
Commit Bot
committed
Aug 13, 2019
1 parent
c25b198
commit 6edfd78
Showing
11 changed files
with
200 additions
and
62 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
// Copyright 2019 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 "media/base/simple_watch_timer.h" | ||
|
||
#include "base/location.h" | ||
|
||
namespace media { | ||
|
||
namespace { | ||
|
||
constexpr base::TimeDelta kQueryInterval = | ||
base::TimeDelta::FromMilliseconds(750); | ||
|
||
} // namespace | ||
|
||
SimpleWatchTimer::SimpleWatchTimer(TickCB tick_cb, | ||
GetCurrentTimeCB get_current_time_cb) | ||
: tick_cb_(std::move(tick_cb)), | ||
get_current_time_cb_(std::move(get_current_time_cb)) { | ||
DCHECK(!tick_cb_.is_null()); | ||
DCHECK(!get_current_time_cb_.is_null()); | ||
} | ||
|
||
SimpleWatchTimer::~SimpleWatchTimer() {} | ||
|
||
void SimpleWatchTimer::Start() { | ||
if (timer_.IsRunning()) | ||
return; | ||
|
||
last_current_time_ = get_current_time_cb_.Run(); | ||
timer_.Start(FROM_HERE, kQueryInterval, this, &SimpleWatchTimer::Tick); | ||
} | ||
|
||
void SimpleWatchTimer::Stop() { | ||
if (!timer_.IsRunning()) | ||
return; | ||
|
||
timer_.Stop(); | ||
Tick(); | ||
} | ||
|
||
void SimpleWatchTimer::Tick() { | ||
base::TimeDelta current_time = get_current_time_cb_.Run(); | ||
base::TimeDelta duration = current_time - last_current_time_; | ||
last_current_time_ = current_time; | ||
|
||
// Accumulate watch time if the duration is reasonable. | ||
if (duration > base::TimeDelta() && duration < kQueryInterval * 2) { | ||
unreported_ms_ += duration.InMilliseconds(); | ||
} | ||
|
||
// Tick if the accumulated time is about a second. | ||
if (unreported_ms_ >= 500) { | ||
unreported_ms_ -= 1000; | ||
tick_cb_.Run(); | ||
} | ||
} | ||
|
||
} // namespace media |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Copyright 2019 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. | ||
|
||
#ifndef MEDIA_BASE_SIMPLE_WATCH_TIMER_H_ | ||
#define MEDIA_BASE_SIMPLE_WATCH_TIMER_H_ | ||
|
||
#include "base/callback_forward.h" | ||
#include "base/macros.h" | ||
#include "base/time/time.h" | ||
#include "base/timer/timer.h" | ||
#include "media/base/media_export.h" | ||
|
||
namespace media { | ||
|
||
// SimpleWatchTimer aids in recording UMA counts that accumulate media watch | ||
// time in seconds. It will fire its callback about once per second during | ||
// active playback. | ||
// | ||
// Active playback is a duration after Start() and before Stop() in | ||
// which current time progresses. Large jumps in current time are not considered | ||
// to be progress; they are assumed to be seeks or media errors. | ||
// | ||
// Start() and Stop() may be called repeatedly. It is recommended to call Stop() | ||
// before destructing a SimpleWatchTimer so that |tick_cb| can be fired at an | ||
// opportune time. | ||
// | ||
// Note: SimpleWatchTimer does not understand playbackRate and will discard | ||
// durations with high rates. | ||
class MEDIA_EXPORT SimpleWatchTimer { | ||
public: | ||
using TickCB = base::RepeatingClosure; | ||
using GetCurrentTimeCB = base::RepeatingCallback<base::TimeDelta()>; | ||
|
||
SimpleWatchTimer(TickCB tick_cb, GetCurrentTimeCB get_current_time_cb); | ||
~SimpleWatchTimer(); | ||
|
||
void Start(); | ||
void Stop(); | ||
|
||
private: | ||
void Tick(); | ||
|
||
TickCB tick_cb_; | ||
GetCurrentTimeCB get_current_time_cb_; | ||
|
||
int unreported_ms_ = 0; | ||
base::TimeDelta last_current_time_; | ||
base::RepeatingTimer timer_; | ||
|
||
DISALLOW_COPY_AND_ASSIGN(SimpleWatchTimer); | ||
}; | ||
|
||
} // namespace media | ||
|
||
#endif // MEDIA_BASE_SIMPLE_WATCH_TIMER_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.