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

Unified Diff: content/renderer/media/webrtc_uma_histograms.h

Issue 214983003: Add the WebRTC.webkitApiCountPerSession metric. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix per discussion. 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/renderer/media/webrtc_uma_histograms.h
diff --git a/content/renderer/media/webrtc_uma_histograms.h b/content/renderer/media/webrtc_uma_histograms.h
index de358f4c8d7bddeb037a3fa3ecfd446a768b2e36..453e1c695f5ed618f47b8248354aa693c7f318d1 100644
--- a/content/renderer/media/webrtc_uma_histograms.h
+++ b/content/renderer/media/webrtc_uma_histograms.h
@@ -5,7 +5,9 @@
#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_UMA_HISTOGRAMS_H_
#define CONTENT_RENDERER_MEDIA_WEBRTC_UMA_HISTOGRAMS_H_
-#include "base/metrics/histogram.h"
+#include "base/memory/singleton.h"
+#include "base/threading/non_thread_safe.h"
+#include "content/common/content_export.h"
namespace content {
@@ -19,11 +21,61 @@ enum JavaScriptAPIName {
};
// Helper method used to collect information about the number of times
-// different WebRTC API:s are called from JavaScript.
-// The histogram can be viewed at chrome://histograms/WebRTC.webkitApiCount.
-inline void UpdateWebRTCMethodCount(JavaScriptAPIName api_name) {
- UMA_HISTOGRAM_ENUMERATION("WebRTC.webkitApiCount", api_name, INVALID_NAME);
-}
+// different WebRTC APIs are called from JavaScript.
+//
+// This contributes to two histograms; the former is a raw count of
+// the number of times the APIs are called, and be viewed at
+// chrome://histograms/WebRTC.webkitApiCount.
+//
+// The latter is a count of the number of times the APIs are called
+// that gets incremented only once per "session" as established by the
+// PerSessionWebRTCAPIMetrics singleton below. It can be viewed at
+// chrome://histograms/WebRTC.webkitApiCountPerSession.
+void UpdateWebRTCMethodCount(JavaScriptAPIName api_name);
+
+// A singleton that keeps track of the number of MediaStreams being
+// sent over PeerConnections. It uses the transition to zero such
+// streams to demarcate the start of a new "session". Note that this
+// is a rough approximation of sessions, as you could conceivably have
+// multiple tabs using this renderer process, and each of them using
+// PeerConnections.
+//
+// The UpdateWebRTCMethodCount function above uses this class to log a
+// metric at most once per session.
+class CONTENT_EXPORT PerSessionWebRTCAPIMetrics : public base::NonThreadSafe {
+ public:
+ virtual ~PerSessionWebRTCAPIMetrics();
+
+ static PerSessionWebRTCAPIMetrics* GetInstance();
+
+ // Increment/decrement the number of streams being sent or received
+ // over any current PeerConnection.
+ void IncrementStreamCounter();
+ void DecrementStreamCounter();
+
+ protected:
+ friend struct DefaultSingletonTraits<PerSessionWebRTCAPIMetrics>;
+ friend void UpdateWebRTCMethodCount(JavaScriptAPIName);
+
+ // Protected so that unit tests can test without this being a
+ // singleton.
+ PerSessionWebRTCAPIMetrics();
+
+ // Overridable by unit tests.
+ virtual void LogUsage(JavaScriptAPIName api_name);
+
+ // Called by UpdateWebRTCMethodCount above. Protected rather than
+ // private so that unit tests can call it.
+ void LogUsageOnlyOnce(JavaScriptAPIName api_name);
+
+ private:
+ void ResetUsage();
+
+ int num_streams_;
+ bool has_used_api_[INVALID_NAME];
+
+ DISALLOW_COPY_AND_ASSIGN(PerSessionWebRTCAPIMetrics);
+};
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698