Bug 1357682 - telemetry for monitoring OMT success rate in HttpChannelChild. r?jduell,bsmedberg draft
authorShih-Chiang Chien <schien@mozilla.com>
Thu, 20 Apr 2017 18:06:48 +0800
changeset 568599 a6612f23dc8b49dcd30e34274458699c619a267d
parent 567425 abdcc8dfc28397b95338245390e12c56658ad182
child 625962 93018f449cc09560557d40b1a7d525c00437fc30
push id55912
push userbmo:schien@mozilla.com
push dateWed, 26 Apr 2017 10:05:49 +0000
reviewersjduell, bsmedberg
bugs1357682
milestone55.0a1
Bug 1357682 - telemetry for monitoring OMT success rate in HttpChannelChild. r?jduell,bsmedberg MozReview-Commit-ID: KNosSEJ7faY
netwerk/protocol/http/HttpChannelChild.cpp
toolkit/components/telemetry/Histograms.json
--- a/netwerk/protocol/http/HttpChannelChild.cpp
+++ b/netwerk/protocol/http/HttpChannelChild.cpp
@@ -30,16 +30,17 @@
 #include "nsSerializationHelper.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/dom/Performance.h"
 #include "mozilla/ipc/InputStreamUtils.h"
 #include "mozilla/ipc/URIUtils.h"
 #include "mozilla/ipc/BackgroundUtils.h"
 #include "mozilla/net/ChannelDiverterChild.h"
 #include "mozilla/net/DNS.h"
+#include "mozilla/Telemetry.h"
 #include "SerializedLoadContext.h"
 #include "nsInputStreamPump.h"
 #include "InterceptedChannel.h"
 #include "mozIThirdPartyUtil.h"
 #include "nsContentSecurityManager.h"
 #include "nsIDeprecationWarner.h"
 #include "nsICompressConvStats.h"
 #include "nsIDocument.h"
@@ -55,16 +56,18 @@
 
 #ifdef MOZ_TASK_TRACER
 #include "GeckoTaskTracer.h"
 #endif
 
 using namespace mozilla::dom;
 using namespace mozilla::ipc;
 
+using mozilla::Telemetry::LABELS_HTTP_CHILD_OMT_STATS;
+
 namespace mozilla {
 namespace net {
 
 namespace {
 
 const uint32_t kMaxFileDescriptorsPerMessage = 250;
 
 #ifdef OS_POSIX
@@ -3046,39 +3049,44 @@ HttpChannelChild::RetargetDeliveryTo(nsI
 
   MOZ_ASSERT(NS_IsMainThread(), "Should be called on main thread only");
   MOZ_ASSERT(!mODATarget);
   MOZ_ASSERT(aNewTarget);
 
   NS_ENSURE_ARG(aNewTarget);
   if (aNewTarget == NS_GetCurrentThread()) {
     NS_WARNING("Retargeting delivery to same thread");
+    Telemetry::AccumulateCategorical(LABELS_HTTP_CHILD_OMT_STATS::successMainThread);
     return NS_OK;
   }
 
   // Ensure that |mListener| and any subsequent listeners can be retargeted
   // to another thread.
   nsresult rv = NS_OK;
   nsCOMPtr<nsIThreadRetargetableStreamListener> retargetableListener =
       do_QueryInterface(mListener, &rv);
   if (!retargetableListener || NS_FAILED(rv)) {
     NS_WARNING("Listener is not retargetable");
+    Telemetry::AccumulateCategorical(LABELS_HTTP_CHILD_OMT_STATS::failListener);
     return NS_ERROR_NO_INTERFACE;
   }
 
   rv = retargetableListener->CheckListenerChain();
   if (NS_FAILED(rv)) {
     NS_WARNING("Subsequent listeners are not retargetable");
+    Telemetry::AccumulateCategorical(LABELS_HTTP_CHILD_OMT_STATS::failListenerChain);
     return rv;
   }
 
   {
     MutexAutoLock lock(mEventTargetMutex);
     mODATarget = aNewTarget;
   }
+
+  Telemetry::AccumulateCategorical(LABELS_HTTP_CHILD_OMT_STATS::success);
   return NS_OK;
 }
 
 void
 HttpChannelChild::ResetInterception()
 {
   NS_ENSURE_TRUE_VOID(gNeckoChild != nullptr);
 
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -2157,16 +2157,24 @@
     "alert_emails": ["rbarnes@mozilla.com"],
     "bug_numbers": [1266571],
     "expires_in_version": "52",
     "kind": "enumerated",
     "n_values": 8,
     "releaseChannelCollection": "opt-out",
     "description": "Recorded once for each HTTP 401 response. The value records the type of authentication and the TLS-enabled status. (0=basic/clear, 1=basic/tls, 2=digest/clear, 3=digest/tls, 4=ntlm/clear, 5=ntlm/tls, 6=negotiate/clear, 7=negotiate/tls)"
   },
+  "HTTP_CHILD_OMT_STATS": {
+    "alert_emails": ["necko@mozilla.com"],
+    "bug_numbers": [1357682],
+    "expires_in_version": "never",
+    "kind": "categorical",
+    "description": "Stats about success rate of HTTP OMT request in content process.",
+    "labels": ["success", "successMainThread", "failListener", "failListenerChain"]
+  },
   "TLS_EARLY_DATA_NEGOTIATED": {
     "expires_in_version": "58",
     "kind": "enumerated",
     "n_values": 3,
     "description": "Sending TLS early data was possible: 0 - not possible, 1 - possible but not used, 2 - possible and used.",
     "alert_emails": ["necko@mozilla.com"],
     "bug_numbers": [1296288]
   },