Bug 1261955 - Re-activate VIDEO_PLAY_TIME_MS telemetry probe. r=SingingTree,bsmedberg draft
authorRalph Giles <giles@mozilla.com>
Thu, 21 Apr 2016 14:39:10 -0700
changeset 363873 b13b1f15195a0a1871a5f61101ddc77e840d9049
parent 363872 4f9582bfbba41d37000009e4e7c1e02b51c3d9dc
child 363874 72d9d3ffe6471d4dc49d42e20da0bbf18f76008b
push id17329
push userbmo:giles@thaumas.net
push dateThu, 05 May 2016 19:43:28 +0000
reviewersSingingTree, bsmedberg
bugs1261955
milestone49.0a1
Bug 1261955 - Re-activate VIDEO_PLAY_TIME_MS telemetry probe. r=SingingTree,bsmedberg Rename the VIDEO_MSE_PLAY_TIME_MS telemetry probe to just VIDEO_PLAY_TIME_MS and make it active for all video playback. We were using this to track MSE deployment success. Now we'd like to do something similar for video playback in general, regardless of the origin. This allows us to simplify the collection code somewhat. MozReview-Commit-ID: 7s8pOQWipf4
dom/html/HTMLMediaElement.cpp
dom/html/HTMLMediaElement.h
toolkit/components/telemetry/Histograms.json
toolkit/components/telemetry/histogram-whitelists.json
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -2847,18 +2847,18 @@ HTMLMediaElement::ReportMSETelemetry()
       Telemetry::Accumulate(Telemetry::VIDEO_DROPPED_FRAMES_PROPORTION,
                             percentage);
     }
   }
 
   Telemetry::Accumulate(Telemetry::VIDEO_MSE_UNLOAD_STATE, state);
   LOG(LogLevel::Debug, ("%p VIDEO_MSE_UNLOAD_STATE = %d", this, state));
 
-  Telemetry::Accumulate(Telemetry::VIDEO_MSE_PLAY_TIME_MS, SECONDS_TO_MS(mPlayTime.Total()));
-  LOG(LogLevel::Debug, ("%p VIDEO_MSE_PLAY_TIME_MS = %f", this, mPlayTime.Total()));
+  Telemetry::Accumulate(Telemetry::VIDEO_PLAY_TIME_MS, SECONDS_TO_MS(mPlayTime.Total()));
+  LOG(LogLevel::Debug, ("%p VIDEO_PLAY_TIME_MS = %f", this, mPlayTime.Total()));
 }
 
 void HTMLMediaElement::UnbindFromTree(bool aDeep,
                                       bool aNullParent)
 {
   if (!mPaused && mNetworkState != nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
     Pause();
   }
@@ -4315,21 +4315,16 @@ nsresult HTMLMediaElement::DispatchAsync
   if (mEventDeliveryPaused) {
     mPendingEvents.AppendElement(aName);
     return NS_OK;
   }
 
   nsCOMPtr<nsIRunnable> event = new nsAsyncEventRunner(aName, this);
   NS_DispatchToMainThread(event);
 
-  // Only collect rebuffer and stall rate stats for MSE video.
-  if (!mMediaSource) {
-    return NS_OK;
-  }
-
   if ((aName.EqualsLiteral("play") || aName.EqualsLiteral("playing"))) {
     mPlayTime.Start();
   } else if (aName.EqualsLiteral("waiting")) {
     mPlayTime.Pause();
   } else if (aName.EqualsLiteral("pause")) {
     mPlayTime.Pause();
   }
 
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -1593,17 +1593,17 @@ public:
       return mCount;
     }
   private:
     TimeStamp mStartTime;
     TimeDuration mSum;
     uint32_t mCount;
   };
 private:
-  // Total time an MSE video has spent playing
+  // Total time a video has spent playing.
   TimeDurationAccumulator mPlayTime;
 
   // Indicates if user has interacted with the element.
   // Used to block autoplay when disabled.
   bool mHasUserInteraction;
 
   // True if the first frame has been successfully loaded.
   bool mFirstFrameLoaded;
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -8943,22 +8943,24 @@
     "n_buckets": 16,
     "description": "The number of entries in persistent DataStorage (HSTS and HPKP data, basically)"
   },
   "VIDEO_EME_PLAY_SUCCESS": {
     "expires_in_version": "45",
     "kind": "boolean",
     "description": "EME video playback success or failure"
   },
-  "VIDEO_MSE_PLAY_TIME_MS" : {
-    "expires_in_version": "45",
-    "description": "Total time spent playing MSE video",
+  "VIDEO_PLAY_TIME_MS" : {
+    "alert_emails": ["ajones@mozilla.com"],
+    "expires_in_version": "55",
+    "description": "Total time spent playing video in milliseconds. This reports the total play time for an HTML Media Element whenever it is suspended or resumed, such as when the page is unloaded, or when the mute status changes when the AudioChannelAPI pref is set.",
     "kind": "exponential",
     "high": 7200000,
-    "n_buckets": 100
+    "n_buckets": 100,
+    "bug_numbers": [1261955, 1127646]
   },
   "VIDEO_MSE_UNLOAD_STATE": {
     "expires_in_version": "45",
     "kind": "enumerated",
     "n_values": 5,
     "description": "MSE video state when unloading. ended = 0, paused = 1, stalled = 2, seeking = 3, other = 4"
   },
   "VIDEO_ADOBE_GMP_DISAPPEARED": {
--- a/toolkit/components/telemetry/histogram-whitelists.json
+++ b/toolkit/components/telemetry/histogram-whitelists.json
@@ -1013,17 +1013,16 @@
     "VIDEO_CANPLAYTYPE_H264_CONSTRAINT_SET_FLAG",
     "VIDEO_CANPLAYTYPE_H264_LEVEL",
     "VIDEO_CANPLAYTYPE_H264_PROFILE",
     "VIDEO_DECODED_H264_SPS_CONSTRAINT_SET_FLAG",
     "VIDEO_DECODED_H264_SPS_LEVEL",
     "VIDEO_DECODED_H264_SPS_PROFILE",
     "VIDEO_EME_PLAY_SUCCESS",
     "VIDEO_H264_SPS_MAX_NUM_REF_FRAMES",
-    "VIDEO_MSE_PLAY_TIME_MS",
     "VIDEO_MSE_UNLOAD_STATE",
     "WEAVE_COMPLETE_SUCCESS_COUNT",
     "WEAVE_CONFIGURED",
     "WEAVE_CONFIGURED_MASTER_PASSWORD",
     "WEAVE_START_COUNT",
     "WEBCRYPTO_ALG",
     "WEBCRYPTO_EXTRACTABLE_ENC",
     "WEBCRYPTO_EXTRACTABLE_GENERATE",
@@ -2379,17 +2378,16 @@
     "VIDEO_DECODED_H264_SPS_PROFILE",
     "VIDEO_EME_ADOBE_HIDDEN_REASON",
     "VIDEO_EME_ADOBE_INSTALL_FAILED_REASON",
     "VIDEO_EME_ADOBE_UNSUPPORTED_REASON",
     "VIDEO_EME_PLAY_SUCCESS",
     "VIDEO_EME_REQUEST_FAILURE_LATENCY_MS",
     "VIDEO_EME_REQUEST_SUCCESS_LATENCY_MS",
     "VIDEO_H264_SPS_MAX_NUM_REF_FRAMES",
-    "VIDEO_MSE_PLAY_TIME_MS",
     "VIDEO_MSE_UNLOAD_STATE",
     "VIDEO_OPENH264_GMP_DISAPPEARED",
     "VIDEO_OPENH264_GMP_MISSING_FILES",
     "VIEW_SOURCE_EXTERNAL_RESULT_BOOLEAN",
     "VIEW_SOURCE_IN_BROWSER_OPENED_BOOLEAN",
     "VIEW_SOURCE_IN_WINDOW_OPENED_BOOLEAN",
     "WEAVE_COMPLETE_SUCCESS_COUNT",
     "WEAVE_CONFIGURED",