Bug 1357682 - telemetry for monitoring OMT success rate in HttpChannelChild. r?jduell,bsmedberg
MozReview-Commit-ID: KNosSEJ7faY
--- 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]
},