Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1087)

Unified Diff: content/browser/renderer_host/media/media_track_lifetime_metrics_host.cc

Issue 183973021: Add metrics to track the duration of tracks received over a PeerConnection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Now logging in browser process. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/media_track_lifetime_metrics_host.cc
diff --git a/content/browser/renderer_host/media/media_track_lifetime_metrics_host.cc b/content/browser/renderer_host/media/media_track_lifetime_metrics_host.cc
new file mode 100644
index 0000000000000000000000000000000000000000..651d317994aaf8e9961ad0c3f57598e73c15a1f3
--- /dev/null
+++ b/content/browser/renderer_host/media/media_track_lifetime_metrics_host.cc
@@ -0,0 +1,92 @@
+// Copyright 2014 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/renderer_host/media/media_track_lifetime_metrics_host.h"
+
+#include "base/metrics/histogram.h"
+#include "content/common/media/media_track_lifetime_metrics_messages.h"
+#include "content/public/browser/render_process_host.h"
+
+// We use a histogram with a maximum bucket of 16 hours to infinity
+// for track durations.
+#define UMA_HISTOGRAM_TIMES_16H(name, sample) \
+ UMA_HISTOGRAM_CUSTOM_TIMES(name, sample, \
+ base::TimeDelta::FromMilliseconds(100), \
+ base::TimeDelta::FromHours(16), \
+ 50);
+
+namespace content {
+
+MediaTrackLifetimeMetricsHost::MediaTrackLifetimeMetricsHost(
+ RenderProcessHost* owner)
+ : BrowserMessageFilter(MediaTrackLifetimeMetricsHostMsgStart),
+ owner_(owner) {
+ owner_->AddObserver(this);
+}
+
+MediaTrackLifetimeMetricsHost::~MediaTrackLifetimeMetricsHost() {
+ owner_->RemoveObserver(this);
+
+ DCHECK(tracks_.empty());
+}
+
+bool MediaTrackLifetimeMetricsHost::OnMessageReceived(
+ const IPC::Message& message,
+ bool* message_was_ok) {
+ bool handled = true;
+
+ IPC_BEGIN_MESSAGE_MAP_EX(MediaTrackLifetimeMetricsHost,
+ message,
+ *message_was_ok)
+ IPC_MESSAGE_HANDLER(MediaTrackLifetimeMetrics_AddTrack, OnAddTrack)
+ IPC_MESSAGE_HANDLER(MediaTrackLifetimeMetrics_RemoveTrack, OnRemoveTrack)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP_EX()
+
+ return handled;
+}
+
+void MediaTrackLifetimeMetricsHost::RenderProcessExited(
+ RenderProcessHost* host,
+ base::ProcessHandle handle,
+ base::TerminationStatus status,
+ int exit_code) {
+ DCHECK_EQ(owner_, host);
+
+ // Our render process has exited. We won't receive any more IPC
+ // messages from it. Assume all tracks ended now.
+ for (TrackMap::iterator it = tracks_.begin();
+ it != tracks_.end();
+ ++it) {
+ ReportDuration(it->second.first, it->second.second);
perkj_chrome 2014/03/11 08:05:21 nit: can you use temp variables instead of second.
Jói 2014/03/11 17:36:33 I added a temp IsAudioPlusTimestamp variable then
+ }
+ tracks_.clear();
+}
+
+void MediaTrackLifetimeMetricsHost::OnAddTrack(const std::string& id,
+ bool is_audio) {
+ DCHECK(tracks_.find(id) == tracks_.end());
perkj_chrome 2014/03/11 08:05:21 To make this a bit harder - the same track can the
+
+ tracks_[id] = IsAudioPlusTimestamp(is_audio, base::TimeTicks::Now());
+}
+
+void MediaTrackLifetimeMetricsHost::OnRemoveTrack(const std::string& id) {
+ DCHECK(tracks_.find(id) != tracks_.end());
+
+ IsAudioPlusTimestamp& info = tracks_[id];
+ ReportDuration(info.first, info.second);
+ tracks_.erase(id);
+}
+
+void MediaTrackLifetimeMetricsHost::ReportDuration(bool is_audio,
+ base::TimeTicks start_time) {
+ base::TimeDelta duration = start_time - base::TimeTicks::Now();
+ if (is_audio) {
+ UMA_HISTOGRAM_TIMES_16H("WebRTC.ReceivedAudioTrackDuration", duration);
perkj_chrome 2014/03/11 08:05:21 Will we not have the same problem for local tracks
Jói 2014/03/11 17:36:33 I think we had settled on track duration in the de
+ } else {
+ UMA_HISTOGRAM_TIMES_16H("WebRTC.ReceivedVideoTrackDuration", duration);
+ }
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698