mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-29 20:07:30 +09:00
Telemetry: Remove stubs and related code
This commit is contained in:
parent
10053448d6
commit
aea50f182f
134 changed files with 68 additions and 3422 deletions
|
|
@ -1,39 +0,0 @@
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* vim: set ts=2 et sw=2 tw=80: */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
#ifndef A11Y_STATISTICS_H_
|
|
||||||
#define A11Y_STATISTICS_H_
|
|
||||||
|
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
|
|
||||||
namespace mozilla {
|
|
||||||
namespace a11y {
|
|
||||||
namespace statistics {
|
|
||||||
|
|
||||||
inline void A11yInitialized()
|
|
||||||
{ /* STUB */ }
|
|
||||||
|
|
||||||
inline void A11yConsumers(uint32_t aConsumer)
|
|
||||||
{ /* STUB */ }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Report that ISimpleDOM* has been used.
|
|
||||||
*/
|
|
||||||
inline void ISimpleDOMUsed()
|
|
||||||
{ /* STUB */ }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Report that IAccessibleTable has been used.
|
|
||||||
*/
|
|
||||||
inline void IAccessibleTableUsed()
|
|
||||||
{ /* STUB */ }
|
|
||||||
|
|
||||||
} // namespace statistics
|
|
||||||
} // namespace a11y
|
|
||||||
} // namespace mozilla
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
@ -32,7 +32,6 @@
|
||||||
#include "RootAccessibleWrap.h"
|
#include "RootAccessibleWrap.h"
|
||||||
#endif
|
#endif
|
||||||
#include "States.h"
|
#include "States.h"
|
||||||
#include "Statistics.h"
|
|
||||||
#include "TextLeafAccessibleWrap.h"
|
#include "TextLeafAccessibleWrap.h"
|
||||||
#include "TreeWalker.h"
|
#include "TreeWalker.h"
|
||||||
#include "xpcAccessibleApplication.h"
|
#include "xpcAccessibleApplication.h"
|
||||||
|
|
@ -1288,8 +1287,6 @@ nsAccessibilityService::Init()
|
||||||
if (XRE_IsParentProcess())
|
if (XRE_IsParentProcess())
|
||||||
PlatformInit();
|
PlatformInit();
|
||||||
|
|
||||||
statistics::A11yInitialized();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
|
|
||||||
#include "AccessibleWrap.h"
|
#include "AccessibleWrap.h"
|
||||||
#include "IUnknownImpl.h"
|
#include "IUnknownImpl.h"
|
||||||
#include "Statistics.h"
|
|
||||||
#include "TableAccessible.h"
|
#include "TableAccessible.h"
|
||||||
|
|
||||||
#include "nsCOMPtr.h"
|
#include "nsCOMPtr.h"
|
||||||
|
|
@ -32,7 +31,6 @@ ia2AccessibleTable::QueryInterface(REFIID iid, void** ppv)
|
||||||
*ppv = nullptr;
|
*ppv = nullptr;
|
||||||
|
|
||||||
if (IID_IAccessibleTable == iid) {
|
if (IID_IAccessibleTable == iid) {
|
||||||
statistics::IAccessibleTableUsed();
|
|
||||||
*ppv = static_cast<IAccessibleTable*>(this);
|
*ppv = static_cast<IAccessibleTable*>(this);
|
||||||
(reinterpret_cast<IUnknown*>(*ppv))->AddRef();
|
(reinterpret_cast<IUnknown*>(*ppv))->AddRef();
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
#include "Compatibility.h"
|
#include "Compatibility.h"
|
||||||
|
|
||||||
#include "nsWinUtils.h"
|
#include "nsWinUtils.h"
|
||||||
#include "Statistics.h"
|
|
||||||
|
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
|
|
||||||
|
|
@ -52,8 +51,6 @@ uint32_t Compatibility::sConsumers = Compatibility::UNKNOWN;
|
||||||
void
|
void
|
||||||
Compatibility::Init()
|
Compatibility::Init()
|
||||||
{
|
{
|
||||||
// Note we collect some AT statistics/telemetry here for convenience.
|
|
||||||
|
|
||||||
HMODULE jawsHandle = ::GetModuleHandleW(L"jhook");
|
HMODULE jawsHandle = ::GetModuleHandleW(L"jhook");
|
||||||
if (jawsHandle)
|
if (jawsHandle)
|
||||||
sConsumers |= (IsModuleVersionLessThan(jawsHandle, 8, 2173)) ?
|
sConsumers |= (IsModuleVersionLessThan(jawsHandle, 8, 2173)) ?
|
||||||
|
|
@ -92,15 +89,6 @@ Compatibility::Init()
|
||||||
if (sConsumers != Compatibility::UNKNOWN)
|
if (sConsumers != Compatibility::UNKNOWN)
|
||||||
sConsumers ^= Compatibility::UNKNOWN;
|
sConsumers ^= Compatibility::UNKNOWN;
|
||||||
|
|
||||||
// Gather telemetry
|
|
||||||
uint32_t temp = sConsumers;
|
|
||||||
for (int i = 0; temp; i++) {
|
|
||||||
if (temp & 0x1)
|
|
||||||
statistics::A11yConsumers(i);
|
|
||||||
|
|
||||||
temp >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turn off new tab switching for Jaws and WE.
|
// Turn off new tab switching for Jaws and WE.
|
||||||
if (sConsumers & (JAWS | OLDJAWS | WE)) {
|
if (sConsumers & (JAWS | OLDJAWS | WE)) {
|
||||||
// Check to see if the pref for disallowing CtrlTab is already set. If so,
|
// Check to see if the pref for disallowing CtrlTab is already set. If so,
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
#include "Role.h"
|
#include "Role.h"
|
||||||
#include "RootAccessible.h"
|
#include "RootAccessible.h"
|
||||||
#include "sdnDocAccessible.h"
|
#include "sdnDocAccessible.h"
|
||||||
#include "Statistics.h"
|
|
||||||
|
|
||||||
#include "nsIDocShell.h"
|
#include "nsIDocShell.h"
|
||||||
#include "nsIInterfaceRequestorUtils.h"
|
#include "nsIInterfaceRequestorUtils.h"
|
||||||
|
|
@ -36,7 +35,6 @@ DocAccessibleWrap::~DocAccessibleWrap()
|
||||||
|
|
||||||
IMPL_IUNKNOWN_QUERY_HEAD(DocAccessibleWrap)
|
IMPL_IUNKNOWN_QUERY_HEAD(DocAccessibleWrap)
|
||||||
if (aIID == IID_ISimpleDOMDocument) {
|
if (aIID == IID_ISimpleDOMDocument) {
|
||||||
statistics::ISimpleDOMUsed();
|
|
||||||
*aInstancePtr = static_cast<ISimpleDOMDocument*>(new sdnDocAccessible(this));
|
*aInstancePtr = static_cast<ISimpleDOMDocument*>(new sdnDocAccessible(this));
|
||||||
static_cast<IUnknown*>(*aInstancePtr)->AddRef();
|
static_cast<IUnknown*>(*aInstancePtr)->AddRef();
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,11 @@
|
||||||
#include "TextLeafAccessibleWrap.h"
|
#include "TextLeafAccessibleWrap.h"
|
||||||
|
|
||||||
#include "sdnTextAccessible.h"
|
#include "sdnTextAccessible.h"
|
||||||
#include "Statistics.h"
|
|
||||||
|
|
||||||
using namespace mozilla::a11y;
|
using namespace mozilla::a11y;
|
||||||
|
|
||||||
IMPL_IUNKNOWN_QUERY_HEAD(TextLeafAccessibleWrap)
|
IMPL_IUNKNOWN_QUERY_HEAD(TextLeafAccessibleWrap)
|
||||||
if (aIID == IID_ISimpleDOMText) {
|
if (aIID == IID_ISimpleDOMText) {
|
||||||
statistics::ISimpleDOMUsed();
|
|
||||||
*aInstancePtr = static_cast<ISimpleDOMText*>(new sdnTextAccessible(this));
|
*aInstancePtr = static_cast<ISimpleDOMText*>(new sdnTextAccessible(this));
|
||||||
static_cast<IUnknown*>(*aInstancePtr)->AddRef();
|
static_cast<IUnknown*>(*aInstancePtr)->AddRef();
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
|
||||||
|
|
@ -1351,10 +1351,6 @@ class MOZ_STACK_CLASS HeapSnapshotHandler
|
||||||
JS::CompartmentSet* compartments;
|
JS::CompartmentSet* compartments;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// For telemetry.
|
|
||||||
uint32_t nodeCount;
|
|
||||||
uint32_t edgeCount;
|
|
||||||
|
|
||||||
HeapSnapshotHandler(CoreDumpWriter& writer,
|
HeapSnapshotHandler(CoreDumpWriter& writer,
|
||||||
JS::CompartmentSet* compartments)
|
JS::CompartmentSet* compartments)
|
||||||
: writer(writer),
|
: writer(writer),
|
||||||
|
|
@ -1371,8 +1367,6 @@ public:
|
||||||
NodeData*,
|
NodeData*,
|
||||||
bool first)
|
bool first)
|
||||||
{
|
{
|
||||||
edgeCount++;
|
|
||||||
|
|
||||||
// We're only interested in the first time we reach edge.referent, not in
|
// We're only interested in the first time we reach edge.referent, not in
|
||||||
// every edge arriving at that node. "But, don't we want to serialize every
|
// every edge arriving at that node. "But, don't we want to serialize every
|
||||||
// edge in the heap graph?" you ask. Don't worry! This edge is still
|
// edge in the heap graph?" you ask. Don't worry! This edge is still
|
||||||
|
|
@ -1386,8 +1380,6 @@ public:
|
||||||
if (!ShouldIncludeEdge(compartments, origin, edge, &policy))
|
if (!ShouldIncludeEdge(compartments, origin, edge, &policy))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
nodeCount++;
|
|
||||||
|
|
||||||
if (policy == CoreDumpWriter::EXCLUDE_EDGES)
|
if (policy == CoreDumpWriter::EXCLUDE_EDGES)
|
||||||
traversal.abandonReferent();
|
traversal.abandonReferent();
|
||||||
|
|
||||||
|
|
@ -1402,9 +1394,7 @@ WriteHeapGraph(JSContext* cx,
|
||||||
CoreDumpWriter& writer,
|
CoreDumpWriter& writer,
|
||||||
bool wantNames,
|
bool wantNames,
|
||||||
JS::CompartmentSet* compartments,
|
JS::CompartmentSet* compartments,
|
||||||
JS::AutoCheckCannotGC& noGC,
|
JS::AutoCheckCannotGC& noGC)
|
||||||
uint32_t& outNodeCount,
|
|
||||||
uint32_t& outEdgeCount)
|
|
||||||
{
|
{
|
||||||
// Serialize the starting node to the core dump.
|
// Serialize the starting node to the core dump.
|
||||||
|
|
||||||
|
|
@ -1424,11 +1414,6 @@ WriteHeapGraph(JSContext* cx,
|
||||||
bool ok = traversal.addStartVisited(node) &&
|
bool ok = traversal.addStartVisited(node) &&
|
||||||
traversal.traverse();
|
traversal.traverse();
|
||||||
|
|
||||||
if (ok) {
|
|
||||||
outNodeCount = handler.nodeCount;
|
|
||||||
outEdgeCount = handler.edgeCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1562,8 +1547,6 @@ ThreadSafeChromeUtils::SaveHeapSnapshot(GlobalObject& global,
|
||||||
|
|
||||||
bool wantNames = true;
|
bool wantNames = true;
|
||||||
CompartmentSet compartments;
|
CompartmentSet compartments;
|
||||||
uint32_t nodeCount = 0;
|
|
||||||
uint32_t edgeCount = 0;
|
|
||||||
|
|
||||||
nsCOMPtr<nsIOutputStream> outputStream = getCoreDumpOutputStream(rv, start, outFilePath);
|
nsCOMPtr<nsIOutputStream> outputStream = getCoreDumpOutputStream(rv, start, outFilePath);
|
||||||
if (NS_WARN_IF(rv.Failed()))
|
if (NS_WARN_IF(rv.Failed()))
|
||||||
|
|
@ -1599,9 +1582,7 @@ ThreadSafeChromeUtils::SaveHeapSnapshot(GlobalObject& global,
|
||||||
writer,
|
writer,
|
||||||
wantNames,
|
wantNames,
|
||||||
compartments.initialized() ? &compartments : nullptr,
|
compartments.initialized() ? &compartments : nullptr,
|
||||||
maybeNoGC.ref(),
|
maybeNoGC.ref()))
|
||||||
nodeCount,
|
|
||||||
edgeCount))
|
|
||||||
{
|
{
|
||||||
rv.Throw(zeroCopyStream.failed()
|
rv.Throw(zeroCopyStream.failed()
|
||||||
? zeroCopyStream.result()
|
? zeroCopyStream.result()
|
||||||
|
|
|
||||||
|
|
@ -213,22 +213,7 @@ WriteHeapGraph(JSContext* cx,
|
||||||
CoreDumpWriter& writer,
|
CoreDumpWriter& writer,
|
||||||
bool wantNames,
|
bool wantNames,
|
||||||
JS::CompartmentSet* compartments,
|
JS::CompartmentSet* compartments,
|
||||||
JS::AutoCheckCannotGC& noGC,
|
JS::AutoCheckCannotGC& noGC);
|
||||||
uint32_t& outNodeCount,
|
|
||||||
uint32_t& outEdgeCount);
|
|
||||||
inline bool
|
|
||||||
WriteHeapGraph(JSContext* cx,
|
|
||||||
const JS::ubi::Node& node,
|
|
||||||
CoreDumpWriter& writer,
|
|
||||||
bool wantNames,
|
|
||||||
JS::CompartmentSet* compartments,
|
|
||||||
JS::AutoCheckCannotGC& noGC)
|
|
||||||
{
|
|
||||||
uint32_t ignoreNodeCount;
|
|
||||||
uint32_t ignoreEdgeCount;
|
|
||||||
return WriteHeapGraph(cx, node, writer, wantNames, compartments, noGC,
|
|
||||||
ignoreNodeCount, ignoreEdgeCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the mozilla::MallocSizeOf for the current thread's JSRuntime.
|
// Get the mozilla::MallocSizeOf for the current thread's JSRuntime.
|
||||||
MallocSizeOf GetCurrentThreadDebuggerMallocSizeOf();
|
MallocSizeOf GetCurrentThreadDebuggerMallocSizeOf();
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Services.h"
|
#include "mozilla/Services.h"
|
||||||
#include "mozilla/StartupTimeline.h"
|
#include "mozilla/StartupTimeline.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/Unused.h"
|
#include "mozilla/Unused.h"
|
||||||
#include "Navigator.h"
|
#include "Navigator.h"
|
||||||
#include "URIUtils.h"
|
#include "URIUtils.h"
|
||||||
|
|
@ -194,7 +193,6 @@
|
||||||
#include "nsSandboxFlags.h"
|
#include "nsSandboxFlags.h"
|
||||||
#include "nsXULAppAPI.h"
|
#include "nsXULAppAPI.h"
|
||||||
#include "nsDOMNavigationTiming.h"
|
#include "nsDOMNavigationTiming.h"
|
||||||
#include "nsISecurityUITelemetry.h"
|
|
||||||
#include "nsIAppsService.h"
|
#include "nsIAppsService.h"
|
||||||
#include "nsDSURIContentListener.h"
|
#include "nsDSURIContentListener.h"
|
||||||
#include "nsDocShellLoadTypes.h"
|
#include "nsDocShellLoadTypes.h"
|
||||||
|
|
@ -4985,15 +4983,6 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
|
||||||
cssClass.AssignLiteral("badStsCert");
|
cssClass.AssignLiteral("badStsCert");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t bucketId;
|
|
||||||
if (isStsHost) {
|
|
||||||
// measuring STS separately allows us to measure click through
|
|
||||||
// rates easily
|
|
||||||
bucketId = nsISecurityUITelemetry::WARNING_BAD_CERT_TOP_STS;
|
|
||||||
} else {
|
|
||||||
bucketId = nsISecurityUITelemetry::WARNING_BAD_CERT_TOP;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if an alternate cert error page is registered
|
// See if an alternate cert error page is registered
|
||||||
nsAdoptingCString alternateErrorPage =
|
nsAdoptingCString alternateErrorPage =
|
||||||
Preferences::GetCString("security.alternate_certificate_error_page");
|
Preferences::GetCString("security.alternate_certificate_error_page");
|
||||||
|
|
@ -5021,23 +5010,12 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
|
||||||
errorPage.Assign(alternateErrorPage);
|
errorPage.Assign(alternateErrorPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t bucketId;
|
|
||||||
bool sendTelemetry = false;
|
|
||||||
if (NS_ERROR_PHISHING_URI == aError) {
|
if (NS_ERROR_PHISHING_URI == aError) {
|
||||||
sendTelemetry = true;
|
|
||||||
error.AssignLiteral("deceptiveBlocked");
|
error.AssignLiteral("deceptiveBlocked");
|
||||||
bucketId = IsFrame() ? nsISecurityUITelemetry::WARNING_PHISHING_PAGE_FRAME
|
|
||||||
: nsISecurityUITelemetry::WARNING_PHISHING_PAGE_TOP;
|
|
||||||
} else if (NS_ERROR_MALWARE_URI == aError) {
|
} else if (NS_ERROR_MALWARE_URI == aError) {
|
||||||
sendTelemetry = true;
|
|
||||||
error.AssignLiteral("malwareBlocked");
|
error.AssignLiteral("malwareBlocked");
|
||||||
bucketId = IsFrame() ? nsISecurityUITelemetry::WARNING_MALWARE_PAGE_FRAME
|
|
||||||
: nsISecurityUITelemetry::WARNING_MALWARE_PAGE_TOP;
|
|
||||||
} else if (NS_ERROR_UNWANTED_URI == aError) {
|
} else if (NS_ERROR_UNWANTED_URI == aError) {
|
||||||
sendTelemetry = true;
|
|
||||||
error.AssignLiteral("unwantedBlocked");
|
error.AssignLiteral("unwantedBlocked");
|
||||||
bucketId = IsFrame() ? nsISecurityUITelemetry::WARNING_UNWANTED_PAGE_FRAME
|
|
||||||
: nsISecurityUITelemetry::WARNING_UNWANTED_PAGE_TOP;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cssClass.AssignLiteral("blacklist");
|
cssClass.AssignLiteral("blacklist");
|
||||||
|
|
|
||||||
|
|
@ -4033,8 +4033,6 @@ nsDOMWindowUtils::ForceUseCounterFlush(nsIDOMNode *aNode)
|
||||||
if (nsCOMPtr<nsIDocument> doc = do_QueryInterface(aNode)) {
|
if (nsCOMPtr<nsIDocument> doc = do_QueryInterface(aNode)) {
|
||||||
mozilla::css::ImageLoader* loader = doc->StyleImageLoader();
|
mozilla::css::ImageLoader* loader = doc->StyleImageLoader();
|
||||||
loader->FlushUseCounters();
|
loader->FlushUseCounters();
|
||||||
|
|
||||||
static_cast<nsDocument*>(doc.get())->ReportUseCounters();
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1395,63 +1395,6 @@ nsDocument::~nsDocument()
|
||||||
|
|
||||||
NS_ASSERTION(!mIsShowing, "Destroying a currently-showing document");
|
NS_ASSERTION(!mIsShowing, "Destroying a currently-showing document");
|
||||||
|
|
||||||
if (IsTopLevelContentDocument()) {
|
|
||||||
//don't report for about: pages
|
|
||||||
if (!IsAboutPage()) {
|
|
||||||
// Record the page load
|
|
||||||
uint32_t pageLoaded = 1;
|
|
||||||
Accumulate(Telemetry::MIXED_CONTENT_UNBLOCK_COUNTER, pageLoaded);
|
|
||||||
// Record the mixed content status of the docshell in Telemetry
|
|
||||||
enum {
|
|
||||||
NO_MIXED_CONTENT = 0, // There is no Mixed Content on the page
|
|
||||||
MIXED_DISPLAY_CONTENT = 1, // The page attempted to load Mixed Display Content
|
|
||||||
MIXED_ACTIVE_CONTENT = 2, // The page attempted to load Mixed Active Content
|
|
||||||
MIXED_DISPLAY_AND_ACTIVE_CONTENT = 3 // The page attempted to load Mixed Display & Mixed Active Content
|
|
||||||
};
|
|
||||||
|
|
||||||
bool mixedActiveLoaded = GetHasMixedActiveContentLoaded();
|
|
||||||
bool mixedActiveBlocked = GetHasMixedActiveContentBlocked();
|
|
||||||
|
|
||||||
bool mixedDisplayLoaded = GetHasMixedDisplayContentLoaded();
|
|
||||||
bool mixedDisplayBlocked = GetHasMixedDisplayContentBlocked();
|
|
||||||
|
|
||||||
bool hasMixedDisplay = (mixedDisplayBlocked || mixedDisplayLoaded);
|
|
||||||
bool hasMixedActive = (mixedActiveBlocked || mixedActiveLoaded);
|
|
||||||
|
|
||||||
uint32_t mixedContentLevel = NO_MIXED_CONTENT;
|
|
||||||
if (hasMixedDisplay && hasMixedActive) {
|
|
||||||
mixedContentLevel = MIXED_DISPLAY_AND_ACTIVE_CONTENT;
|
|
||||||
} else if (hasMixedActive){
|
|
||||||
mixedContentLevel = MIXED_ACTIVE_CONTENT;
|
|
||||||
} else if (hasMixedDisplay) {
|
|
||||||
mixedContentLevel = MIXED_DISPLAY_CONTENT;
|
|
||||||
}
|
|
||||||
Accumulate(Telemetry::MIXED_CONTENT_PAGE_LOAD, mixedContentLevel);
|
|
||||||
|
|
||||||
// record mixed object subrequest telemetry
|
|
||||||
if (mHasMixedContentObjectSubrequest) {
|
|
||||||
/* mixed object subrequest loaded on page*/
|
|
||||||
Accumulate(Telemetry::MIXED_CONTENT_OBJECT_SUBREQUEST, 1);
|
|
||||||
} else {
|
|
||||||
/* no mixed object subrequests loaded on page*/
|
|
||||||
Accumulate(Telemetry::MIXED_CONTENT_OBJECT_SUBREQUEST, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// record CSP telemetry on this document
|
|
||||||
if (mHasCSP) {
|
|
||||||
Accumulate(Telemetry::CSP_DOCUMENTS_COUNT, 1);
|
|
||||||
}
|
|
||||||
if (mHasUnsafeInlineCSP) {
|
|
||||||
Accumulate(Telemetry::CSP_UNSAFE_INLINE_DOCUMENTS_COUNT, 1);
|
|
||||||
}
|
|
||||||
if (mHasUnsafeEvalCSP) {
|
|
||||||
Accumulate(Telemetry::CSP_UNSAFE_EVAL_DOCUMENTS_COUNT, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ReportUseCounters();
|
|
||||||
|
|
||||||
mInDestructor = true;
|
mInDestructor = true;
|
||||||
mInUnlinkOrDeletion = true;
|
mInUnlinkOrDeletion = true;
|
||||||
|
|
||||||
|
|
@ -12353,23 +12296,6 @@ nsIDocument::InlineScriptAllowedByCSP()
|
||||||
return allowsInlineScript;
|
return allowsInlineScript;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
|
||||||
MightBeAboutOrChromeScheme(nsIURI* aURI)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(aURI);
|
|
||||||
bool isAbout = true;
|
|
||||||
bool isChrome = true;
|
|
||||||
aURI->SchemeIs("about", &isAbout);
|
|
||||||
aURI->SchemeIs("chrome", &isChrome);
|
|
||||||
return isAbout || isChrome;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nsDocument::ReportUseCounters()
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
nsDocument::AddIntersectionObserver(DOMIntersectionObserver* aObserver)
|
nsDocument::AddIntersectionObserver(DOMIntersectionObserver* aObserver)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -774,8 +774,6 @@ public:
|
||||||
|
|
||||||
virtual nsViewportInfo GetViewportInfo(const mozilla::ScreenIntSize& aDisplaySize) override;
|
virtual nsViewportInfo GetViewportInfo(const mozilla::ScreenIntSize& aDisplaySize) override;
|
||||||
|
|
||||||
void ReportUseCounters();
|
|
||||||
|
|
||||||
virtual void AddIntersectionObserver(
|
virtual void AddIntersectionObserver(
|
||||||
mozilla::dom::DOMIntersectionObserver* aObserver) override;
|
mozilla::dom::DOMIntersectionObserver* aObserver) override;
|
||||||
virtual void RemoveIntersectionObserver(
|
virtual void RemoveIntersectionObserver(
|
||||||
|
|
@ -1449,14 +1447,6 @@ public:
|
||||||
// 'style-sheet-applicable-state-changed' notification.
|
// 'style-sheet-applicable-state-changed' notification.
|
||||||
bool mSSApplicableStateNotificationPending:1;
|
bool mSSApplicableStateNotificationPending:1;
|
||||||
|
|
||||||
// Whether we have reported use counters for this document with Telemetry yet.
|
|
||||||
// Normally this is only done at document destruction time, but for image
|
|
||||||
// documents (SVG documents) that are not guaranteed to be destroyed, we
|
|
||||||
// report use counters when the image cache no longer has any imgRequestProxys
|
|
||||||
// pointing to them. We track whether we ever reported use counters so
|
|
||||||
// that we only report them once for the document.
|
|
||||||
bool mReportedUseCounters:1;
|
|
||||||
|
|
||||||
// Whether we have filled our pres shell's style set with the document's
|
// Whether we have filled our pres shell's style set with the document's
|
||||||
// additional sheets and sheets from the nsStyleSheetService.
|
// additional sheets and sheets from the nsStyleSheetService.
|
||||||
bool mStyleSetFilled:1;
|
bool mStyleSetFilled:1;
|
||||||
|
|
|
||||||
|
|
@ -706,12 +706,6 @@ nsFrameMessageManager::SendRpcMessage(const nsAString& aMessageName,
|
||||||
static bool
|
static bool
|
||||||
AllowMessage(size_t aDataLength, const nsAString& aMessageName)
|
AllowMessage(size_t aDataLength, const nsAString& aMessageName)
|
||||||
{
|
{
|
||||||
static const size_t kMinTelemetryMessageSize = 8192;
|
|
||||||
|
|
||||||
if (aDataLength < kMinTelemetryMessageSize) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_ConvertUTF16toUTF8 messageName(aMessageName);
|
NS_ConvertUTF16toUTF8 messageName(aMessageName);
|
||||||
messageName.StripChars("0123456789");
|
messageName.StripChars("0123456789");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -288,7 +288,6 @@ static bool gMouseDown = false;
|
||||||
static bool gDragServiceDisabled = false;
|
static bool gDragServiceDisabled = false;
|
||||||
static FILE *gDumpFile = nullptr;
|
static FILE *gDumpFile = nullptr;
|
||||||
static uint32_t gSerialCounter = 0;
|
static uint32_t gSerialCounter = 0;
|
||||||
static TimeStamp gLastRecordedRecentTimeouts;
|
|
||||||
#define STATISTICS_INTERVAL (30 * PR_MSEC_PER_SEC)
|
#define STATISTICS_INTERVAL (30 * PR_MSEC_PER_SEC)
|
||||||
|
|
||||||
#ifdef DEBUG_jst
|
#ifdef DEBUG_jst
|
||||||
|
|
@ -1518,7 +1517,6 @@ nsGlobalWindow::nsGlobalWindow(nsGlobalWindow *aOuterWindow)
|
||||||
mIsPopupSpam(false),
|
mIsPopupSpam(false),
|
||||||
mBlockScriptedClosingFlag(false),
|
mBlockScriptedClosingFlag(false),
|
||||||
mWasOffline(false),
|
mWasOffline(false),
|
||||||
mHasHadSlowScript(false),
|
|
||||||
mNotifyIdleObserversIdleOnThaw(false),
|
mNotifyIdleObserversIdleOnThaw(false),
|
||||||
mNotifyIdleObserversActiveOnThaw(false),
|
mNotifyIdleObserversActiveOnThaw(false),
|
||||||
mCreatingInnerWindow(false),
|
mCreatingInnerWindow(false),
|
||||||
|
|
@ -11542,8 +11540,6 @@ nsGlobalWindow::ShowSlowScriptDialog()
|
||||||
unsigned lineno;
|
unsigned lineno;
|
||||||
bool hasFrame = JS::DescribeScriptedCaller(cx, &filename, &lineno);
|
bool hasFrame = JS::DescribeScriptedCaller(cx, &filename, &lineno);
|
||||||
|
|
||||||
mHasHadSlowScript = true;
|
|
||||||
|
|
||||||
if (XRE_IsContentProcess() &&
|
if (XRE_IsContentProcess() &&
|
||||||
ProcessHangMonitor::Get()) {
|
ProcessHangMonitor::Get()) {
|
||||||
ProcessHangMonitor::SlowScriptAction action;
|
ProcessHangMonitor::SlowScriptAction action;
|
||||||
|
|
@ -13399,13 +13395,6 @@ nsGlobalWindow::RunTimeout(Timeout* aTimeout)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record telemetry information about timers set recently.
|
|
||||||
TimeDuration recordingInterval = TimeDuration::FromMilliseconds(STATISTICS_INTERVAL);
|
|
||||||
if (gLastRecordedRecentTimeouts.IsNull() ||
|
|
||||||
now - gLastRecordedRecentTimeouts > recordingInterval) {
|
|
||||||
gLastRecordedRecentTimeouts = now;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert a dummy timeout into the list of timeouts between the
|
// Insert a dummy timeout into the list of timeouts between the
|
||||||
// portion of the list that we are about to process now and those
|
// portion of the list that we are about to process now and those
|
||||||
// timeouts that will be processed in a future call to
|
// timeouts that will be processed in a future call to
|
||||||
|
|
|
||||||
|
|
@ -1780,11 +1780,6 @@ protected:
|
||||||
// Window offline status. Checked to see if we need to fire offline event
|
// Window offline status. Checked to see if we need to fire offline event
|
||||||
bool mWasOffline : 1;
|
bool mWasOffline : 1;
|
||||||
|
|
||||||
// Represents whether the inner window's page has had a slow script notice.
|
|
||||||
// Only used by inner windows; will always be false for outer windows.
|
|
||||||
// This is used to implement Telemetry measures such as SLOW_SCRIPT_PAGE_COUNT.
|
|
||||||
bool mHasHadSlowScript : 1;
|
|
||||||
|
|
||||||
// Track what sorts of events we need to fire when thawed
|
// Track what sorts of events we need to fire when thawed
|
||||||
bool mNotifyIdleObserversIdleOnThaw : 1;
|
bool mNotifyIdleObserversIdleOnThaw : 1;
|
||||||
bool mNotifyIdleObserversActiveOnThaw : 1;
|
bool mNotifyIdleObserversActiveOnThaw : 1;
|
||||||
|
|
|
||||||
|
|
@ -1582,7 +1582,6 @@ nsObjectLoadingContent::MaybeRewriteYoutubeEmbed(nsIURI* aURI, nsIURI* aBaseURI,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're pref'd off, return after telemetry has been logged.
|
|
||||||
if (!Preferences::GetBool(kPrefYoutubeRewrite)) {
|
if (!Preferences::GetBool(kPrefYoutubeRewrite)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
#include "nsXULAppAPI.h"
|
#include "nsXULAppAPI.h"
|
||||||
|
|
||||||
#include "mozilla/dom/ContentChild.h"
|
#include "mozilla/dom/ContentChild.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/UniquePtr.h"
|
#include "mozilla/UniquePtr.h"
|
||||||
|
|
||||||
#include "nsGeolocation.h"
|
#include "nsGeolocation.h"
|
||||||
|
|
@ -70,7 +69,6 @@ class nsGeolocationRequest final
|
||||||
GeoPositionCallback aCallback,
|
GeoPositionCallback aCallback,
|
||||||
GeoPositionErrorCallback aErrorCallback,
|
GeoPositionErrorCallback aErrorCallback,
|
||||||
UniquePtr<PositionOptions>&& aOptions,
|
UniquePtr<PositionOptions>&& aOptions,
|
||||||
uint8_t aProtocolType,
|
|
||||||
bool aWatchPositionRequest = false,
|
bool aWatchPositionRequest = false,
|
||||||
int32_t aWatchId = 0);
|
int32_t aWatchId = 0);
|
||||||
|
|
||||||
|
|
@ -119,7 +117,6 @@ class nsGeolocationRequest final
|
||||||
int32_t mWatchId;
|
int32_t mWatchId;
|
||||||
bool mShutdown;
|
bool mShutdown;
|
||||||
nsCOMPtr<nsIContentPermissionRequester> mRequester;
|
nsCOMPtr<nsIContentPermissionRequester> mRequester;
|
||||||
uint8_t mProtocolType;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static UniquePtr<PositionOptions>
|
static UniquePtr<PositionOptions>
|
||||||
|
|
@ -287,7 +284,6 @@ nsGeolocationRequest::nsGeolocationRequest(Geolocation* aLocator,
|
||||||
GeoPositionCallback aCallback,
|
GeoPositionCallback aCallback,
|
||||||
GeoPositionErrorCallback aErrorCallback,
|
GeoPositionErrorCallback aErrorCallback,
|
||||||
UniquePtr<PositionOptions>&& aOptions,
|
UniquePtr<PositionOptions>&& aOptions,
|
||||||
uint8_t aProtocolType,
|
|
||||||
bool aWatchPositionRequest,
|
bool aWatchPositionRequest,
|
||||||
int32_t aWatchId)
|
int32_t aWatchId)
|
||||||
: mIsWatchPositionRequest(aWatchPositionRequest),
|
: mIsWatchPositionRequest(aWatchPositionRequest),
|
||||||
|
|
@ -296,8 +292,7 @@ nsGeolocationRequest::nsGeolocationRequest(Geolocation* aLocator,
|
||||||
mOptions(Move(aOptions)),
|
mOptions(Move(aOptions)),
|
||||||
mLocator(aLocator),
|
mLocator(aLocator),
|
||||||
mWatchId(aWatchId),
|
mWatchId(aWatchId),
|
||||||
mShutdown(false),
|
mShutdown(false)
|
||||||
mProtocolType(aProtocolType)
|
|
||||||
{
|
{
|
||||||
if (nsCOMPtr<nsPIDOMWindowInner> win =
|
if (nsCOMPtr<nsPIDOMWindowInner> win =
|
||||||
do_QueryReferent(mLocator->GetOwner())) {
|
do_QueryReferent(mLocator->GetOwner())) {
|
||||||
|
|
@ -949,8 +944,7 @@ NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(Geolocation,
|
||||||
mPendingRequests)
|
mPendingRequests)
|
||||||
|
|
||||||
Geolocation::Geolocation()
|
Geolocation::Geolocation()
|
||||||
: mProtocolType(ProtocolType::OTHER)
|
: mLastWatchId(0)
|
||||||
, mLastWatchId(0)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -982,23 +976,6 @@ Geolocation::Init(nsPIDOMWindowInner* aContentDom)
|
||||||
nsCOMPtr<nsIURI> uri;
|
nsCOMPtr<nsIURI> uri;
|
||||||
nsresult rv = mPrincipal->GetURI(getter_AddRefs(uri));
|
nsresult rv = mPrincipal->GetURI(getter_AddRefs(uri));
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
if (uri) {
|
|
||||||
bool isHttp;
|
|
||||||
rv = uri->SchemeIs("http", &isHttp);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
bool isHttps;
|
|
||||||
rv = uri->SchemeIs("https", &isHttps);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
// Store the protocol to send via telemetry later.
|
|
||||||
if (isHttp) {
|
|
||||||
mProtocolType = ProtocolType::HTTP;
|
|
||||||
} else if (isHttps) {
|
|
||||||
mProtocolType = ProtocolType::HTTPS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no aContentDom was passed into us, we are being used
|
// If no aContentDom was passed into us, we are being used
|
||||||
|
|
@ -1185,7 +1162,7 @@ Geolocation::GetCurrentPosition(GeoPositionCallback callback,
|
||||||
|
|
||||||
RefPtr<nsGeolocationRequest> request =
|
RefPtr<nsGeolocationRequest> request =
|
||||||
new nsGeolocationRequest(this, Move(callback), Move(errorCallback),
|
new nsGeolocationRequest(this, Move(callback), Move(errorCallback),
|
||||||
Move(options), static_cast<uint8_t>(mProtocolType),
|
Move(options),
|
||||||
false);
|
false);
|
||||||
|
|
||||||
if (!sGeoEnabled) {
|
if (!sGeoEnabled) {
|
||||||
|
|
@ -1263,7 +1240,7 @@ Geolocation::WatchPosition(GeoPositionCallback aCallback,
|
||||||
RefPtr<nsGeolocationRequest> request =
|
RefPtr<nsGeolocationRequest> request =
|
||||||
new nsGeolocationRequest(this, Move(aCallback), Move(aErrorCallback),
|
new nsGeolocationRequest(this, Move(aCallback), Move(aErrorCallback),
|
||||||
Move(aOptions),
|
Move(aOptions),
|
||||||
static_cast<uint8_t>(mProtocolType), true, *aRv);
|
true, *aRv);
|
||||||
|
|
||||||
if (!sGeoEnabled) {
|
if (!sGeoEnabled) {
|
||||||
nsCOMPtr<nsIRunnable> ev = new RequestAllowEvent(false, request);
|
nsCOMPtr<nsIRunnable> ev = new RequestAllowEvent(false, request);
|
||||||
|
|
|
||||||
|
|
@ -202,12 +202,6 @@ private:
|
||||||
// where the content was loaded from
|
// where the content was loaded from
|
||||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||||
|
|
||||||
// the protocols we want to measure
|
|
||||||
enum class ProtocolType: uint8_t { OTHER, HTTP, HTTPS };
|
|
||||||
|
|
||||||
// the protocol used to load the content
|
|
||||||
ProtocolType mProtocolType;
|
|
||||||
|
|
||||||
// owning back pointer.
|
// owning back pointer.
|
||||||
RefPtr<nsGeolocationService> mService;
|
RefPtr<nsGeolocationService> mService;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,6 @@
|
||||||
#include "nsIWebProgress.h"
|
#include "nsIWebProgress.h"
|
||||||
#include "nsIDocShell.h"
|
#include "nsIDocShell.h"
|
||||||
#include "nsIPrompt.h"
|
#include "nsIPrompt.h"
|
||||||
#include "nsISecurityUITelemetry.h"
|
|
||||||
#include "nsIStringBundle.h"
|
#include "nsIStringBundle.h"
|
||||||
|
|
||||||
// radio buttons
|
// radio buttons
|
||||||
|
|
@ -954,8 +953,6 @@ HTMLFormElement::DoSecureToInsecureSubmitCheck(nsIURI* aActionURL,
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
*aCancelSubmit = (buttonPressed == 1);
|
*aCancelSubmit = (buttonPressed == 1);
|
||||||
uint32_t telemetryBucket =
|
|
||||||
nsISecurityUITelemetry::WARNING_CONFIRM_POST_TO_INSECURE_FROM_SECURE;
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1345,8 +1345,6 @@ HTMLImageElement::FlushUseCounters()
|
||||||
|
|
||||||
nsCOMPtr<imgIContainer> container;
|
nsCOMPtr<imgIContainer> container;
|
||||||
request->GetImage(getter_AddRefs(container));
|
request->GetImage(getter_AddRefs(container));
|
||||||
|
|
||||||
static_cast<image::Image*>(container.get())->ReportUseCounters();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
|
|
|
||||||
|
|
@ -1037,14 +1037,6 @@ void HTMLMediaElement::ShutdownDecoder()
|
||||||
|
|
||||||
void HTMLMediaElement::AbortExistingLoads()
|
void HTMLMediaElement::AbortExistingLoads()
|
||||||
{
|
{
|
||||||
#ifdef MOZ_EME
|
|
||||||
// If there is no existing decoder then we don't have anything to
|
|
||||||
// report. This prevents reporting the initial load from an
|
|
||||||
// empty video element as a failed EME load.
|
|
||||||
if (mDecoder) {
|
|
||||||
ReportEMETelemetry();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
// Abort any already-running instance of the resource selection algorithm.
|
// Abort any already-running instance of the resource selection algorithm.
|
||||||
mLoadWaitStatus = NOT_WAITING;
|
mLoadWaitStatus = NOT_WAITING;
|
||||||
|
|
||||||
|
|
@ -1900,7 +1892,6 @@ NS_IMETHODIMP HTMLMediaElement::GetCurrentTime(double* aCurrentTime)
|
||||||
void
|
void
|
||||||
HTMLMediaElement::FastSeek(double aTime, ErrorResult& aRv)
|
HTMLMediaElement::FastSeek(double aTime, ErrorResult& aRv)
|
||||||
{
|
{
|
||||||
LOG(LogLevel::Debug, ("Reporting telemetry VIDEO_FASTSEEK_USED"));
|
|
||||||
RefPtr<Promise> tobeDropped = Seek(aTime, SeekTarget::PrevSyncPoint, aRv);
|
RefPtr<Promise> tobeDropped = Seek(aTime, SeekTarget::PrevSyncPoint, aRv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3648,191 +3639,6 @@ nsresult HTMLMediaElement::BindToTree(nsIDocument* aDocument, nsIContent* aParen
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */
|
|
||||||
void HTMLMediaElement::VideoDecodeSuspendTimerCallback(nsITimer* aTimer, void* aClosure)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
auto element = static_cast<HTMLMediaElement*>(aClosure);
|
|
||||||
element->mVideoDecodeSuspendTime.Start();
|
|
||||||
element->mVideoDecodeSuspendTimer = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HTMLMediaElement::HiddenVideoStart()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
mHiddenPlayTime.Start();
|
|
||||||
if (mVideoDecodeSuspendTimer) {
|
|
||||||
// Already started, just keep it running.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mVideoDecodeSuspendTimer = do_CreateInstance("@mozilla.org/timer;1");
|
|
||||||
mVideoDecodeSuspendTimer->InitWithNamedFuncCallback(
|
|
||||||
VideoDecodeSuspendTimerCallback, this,
|
|
||||||
MediaPrefs::MDSMSuspendBackgroundVideoDelay(), nsITimer::TYPE_ONE_SHOT,
|
|
||||||
"HTMLMediaElement::VideoDecodeSuspendTimerCallback");
|
|
||||||
}
|
|
||||||
|
|
||||||
void HTMLMediaElement::HiddenVideoStop()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
mHiddenPlayTime.Pause();
|
|
||||||
mVideoDecodeSuspendTime.Pause();
|
|
||||||
if (!mVideoDecodeSuspendTimer) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mVideoDecodeSuspendTimer->Cancel();
|
|
||||||
mVideoDecodeSuspendTimer = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MOZ_EME
|
|
||||||
void
|
|
||||||
HTMLMediaElement::ReportEMETelemetry()
|
|
||||||
{
|
|
||||||
// Report telemetry for EME videos when a page is unloaded.
|
|
||||||
NS_ASSERTION(NS_IsMainThread(), "Should be on main thread.");
|
|
||||||
if (mIsEncrypted && Preferences::GetBool("media.eme.enabled")) {
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_EME_PLAY_SUCCESS = %s",
|
|
||||||
this, mLoadedDataFired ? "true" : "false"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
|
||||||
HTMLMediaElement::ReportTelemetry()
|
|
||||||
{
|
|
||||||
// Report telemetry for videos when a page is unloaded. We
|
|
||||||
// want to know data on what state the video is at when
|
|
||||||
// the user has exited.
|
|
||||||
enum UnloadedState {
|
|
||||||
ENDED = 0,
|
|
||||||
PAUSED = 1,
|
|
||||||
STALLED = 2,
|
|
||||||
SEEKING = 3,
|
|
||||||
OTHER = 4
|
|
||||||
};
|
|
||||||
|
|
||||||
UnloadedState state = OTHER;
|
|
||||||
if (Seeking()) {
|
|
||||||
state = SEEKING;
|
|
||||||
}
|
|
||||||
else if (Ended()) {
|
|
||||||
state = ENDED;
|
|
||||||
}
|
|
||||||
else if (Paused()) {
|
|
||||||
state = PAUSED;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// For buffering we check if the current playback position is at the end
|
|
||||||
// of a buffered range, within a margin of error. We also consider to be
|
|
||||||
// buffering if the last frame status was buffering and the ready state is
|
|
||||||
// HAVE_CURRENT_DATA to account for times where we are in a buffering state
|
|
||||||
// regardless of what actual data we have buffered.
|
|
||||||
bool stalled = false;
|
|
||||||
RefPtr<TimeRanges> ranges = Buffered();
|
|
||||||
const double errorMargin = 0.05;
|
|
||||||
double t = CurrentTime();
|
|
||||||
TimeRanges::index_type index = ranges->Find(t, errorMargin);
|
|
||||||
ErrorResult ignore;
|
|
||||||
stalled = index != TimeRanges::NoIndex &&
|
|
||||||
(ranges->End(index, ignore) - t) < errorMargin;
|
|
||||||
stalled |= mDecoder && NextFrameStatus() == MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_BUFFERING &&
|
|
||||||
mReadyState == HTMLMediaElement::HAVE_CURRENT_DATA;
|
|
||||||
if (stalled) {
|
|
||||||
state = STALLED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_UNLOAD_STATE = %d", this, state));
|
|
||||||
|
|
||||||
FrameStatisticsData data;
|
|
||||||
|
|
||||||
if (HTMLVideoElement* vid = HTMLVideoElement::FromContentOrNull(this)) {
|
|
||||||
FrameStatistics* stats = vid->GetFrameStatistics();
|
|
||||||
if (stats) {
|
|
||||||
data = stats->GetFrameStatisticsData();
|
|
||||||
if (data.mParsedFrames) {
|
|
||||||
MOZ_ASSERT(data.mDroppedFrames <= data.mParsedFrames);
|
|
||||||
// Dropped frames <= total frames, so 'percentage' cannot be higher than
|
|
||||||
// 100 and therefore can fit in a uint32_t (that Telemetry takes).
|
|
||||||
uint32_t percentage = 100 * data.mDroppedFrames / data.mParsedFrames;
|
|
||||||
LOG(LogLevel::Debug,
|
|
||||||
("Reporting telemetry DROPPED_FRAMES_IN_VIDEO_PLAYBACK"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mMediaInfo.HasVideo() &&
|
|
||||||
mMediaInfo.mVideo.mImage.height > 0) {
|
|
||||||
// We have a valid video.
|
|
||||||
double playTime = mPlayTime.Total();
|
|
||||||
double hiddenPlayTime = mHiddenPlayTime.Total();
|
|
||||||
double videoDecodeSuspendTime = mVideoDecodeSuspendTime.Total();
|
|
||||||
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_PLAY_TIME_MS = %f", this, playTime));
|
|
||||||
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_HIDDEN_PLAY_TIME_MS = %f", this, hiddenPlayTime));
|
|
||||||
|
|
||||||
if (playTime > 0.0) {
|
|
||||||
// We have actually played something -> Report some valid-video telemetry.
|
|
||||||
|
|
||||||
// Keyed by audio+video or video alone, and by a resolution range.
|
|
||||||
nsCString key(mMediaInfo.HasAudio() ? "AV," : "V,");
|
|
||||||
static const struct { int32_t mH; const char* mRes; } sResolutions[] = {
|
|
||||||
{ 240, "0<h<=240" },
|
|
||||||
{ 480, "240<h<=480" },
|
|
||||||
{ 576, "480<h<=576" },
|
|
||||||
{ 720, "576<h<=720" },
|
|
||||||
{ 1080, "720<h<=1080" },
|
|
||||||
{ 2160, "1080<h<=2160" }
|
|
||||||
};
|
|
||||||
const char* resolution = "h>2160";
|
|
||||||
int32_t height = mMediaInfo.mVideo.mImage.height;
|
|
||||||
for (const auto& res : sResolutions) {
|
|
||||||
if (height <= res.mH) {
|
|
||||||
resolution = res.mRes;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
key.AppendASCII(resolution);
|
|
||||||
|
|
||||||
uint32_t hiddenPercentage = uint32_t(hiddenPlayTime / playTime * 100.0 + 0.5);
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_HIDDEN_PLAY_TIME_PERCENTAGE = %u, keys: '%s' and 'All'",
|
|
||||||
this, hiddenPercentage, key.get()));
|
|
||||||
|
|
||||||
uint32_t videoDecodeSuspendPercentage =
|
|
||||||
uint32_t(videoDecodeSuspendTime / playTime * 100.0 + 0.5);
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_INFERRED_DECODE_SUSPEND_PERCENTAGE = %u, keys: '%s' and 'All'",
|
|
||||||
this, videoDecodeSuspendPercentage, key.get()));
|
|
||||||
|
|
||||||
if (data.mInterKeyframeCount != 0) {
|
|
||||||
uint32_t average_ms =
|
|
||||||
uint32_t(std::min<uint64_t>(double(data.mInterKeyframeSum_us)
|
|
||||||
/ double(data.mInterKeyframeCount)
|
|
||||||
/ 1000.0
|
|
||||||
+ 0.5,
|
|
||||||
UINT32_MAX));
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_INTER_KEYFRAME_AVERAGE_MS = %u, keys: '%s' and 'All'",
|
|
||||||
this, average_ms, key.get()));
|
|
||||||
|
|
||||||
uint32_t max_ms =
|
|
||||||
uint32_t(std::min<uint64_t>((data.mInterKeyFrameMax_us + 500) / 1000,
|
|
||||||
UINT32_MAX));
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_INTER_KEYFRAME_MAX_MS = %u, keys: '%s' and 'All'",
|
|
||||||
this, max_ms, key.get()));
|
|
||||||
} else {
|
|
||||||
// Here, we have played *some* of the video, but didn't get more than 1
|
|
||||||
// keyframe. Report '0' if we have played for longer than the video-
|
|
||||||
// decode-suspend delay (showing recovery would be difficult).
|
|
||||||
uint32_t suspendDelay_ms = MediaPrefs::MDSMSuspendBackgroundVideoDelay();
|
|
||||||
if (uint32_t(playTime * 1000.0) > suspendDelay_ms) {
|
|
||||||
LOG(LogLevel::Debug, ("%p VIDEO_INTER_KEYFRAME_MAX_MS = 0 (only 1 keyframe), keys: '%s' and 'All'",
|
|
||||||
this, key.get()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void HTMLMediaElement::UnbindFromTree(bool aDeep,
|
void HTMLMediaElement::UnbindFromTree(bool aDeep,
|
||||||
bool aNullParent)
|
bool aNullParent)
|
||||||
{
|
{
|
||||||
|
|
@ -5312,19 +5118,6 @@ nsresult HTMLMediaElement::DispatchAsyncEvent(const nsAString& aName)
|
||||||
nsCOMPtr<nsIRunnable> event = new nsAsyncEventRunner(aName, this);
|
nsCOMPtr<nsIRunnable> event = new nsAsyncEventRunner(aName, this);
|
||||||
NS_DispatchToMainThread(event);
|
NS_DispatchToMainThread(event);
|
||||||
|
|
||||||
if ((aName.EqualsLiteral("play") || aName.EqualsLiteral("playing"))) {
|
|
||||||
mPlayTime.Start();
|
|
||||||
if (IsHidden()) {
|
|
||||||
HiddenVideoStart();
|
|
||||||
}
|
|
||||||
} else if (aName.EqualsLiteral("waiting")) {
|
|
||||||
mPlayTime.Pause();
|
|
||||||
HiddenVideoStop();
|
|
||||||
} else if (aName.EqualsLiteral("pause")) {
|
|
||||||
mPlayTime.Pause();
|
|
||||||
HiddenVideoStop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5450,11 +5243,6 @@ void HTMLMediaElement::SuspendOrResumeElement(bool aPauseElement, bool aSuspendE
|
||||||
UpdateSrcMediaStreamPlaying();
|
UpdateSrcMediaStreamPlaying();
|
||||||
UpdateAudioChannelPlayingState();
|
UpdateAudioChannelPlayingState();
|
||||||
if (aPauseElement) {
|
if (aPauseElement) {
|
||||||
ReportTelemetry();
|
|
||||||
#ifdef MOZ_EME
|
|
||||||
ReportEMETelemetry();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef MOZ_EME
|
#ifdef MOZ_EME
|
||||||
// For EME content, we may force destruction of the CDM client (and CDM
|
// For EME content, we may force destruction of the CDM client (and CDM
|
||||||
// instance if this is the last client for that CDM instance) and
|
// instance if this is the last client for that CDM instance) and
|
||||||
|
|
@ -5506,13 +5294,6 @@ bool HTMLMediaElement::IsBeingDestroyed()
|
||||||
void HTMLMediaElement::NotifyOwnerDocumentActivityChanged()
|
void HTMLMediaElement::NotifyOwnerDocumentActivityChanged()
|
||||||
{
|
{
|
||||||
bool visible = !IsHidden();
|
bool visible = !IsHidden();
|
||||||
if (visible) {
|
|
||||||
// Visible -> Just pause hidden play time (no-op if already paused).
|
|
||||||
HiddenVideoStop();
|
|
||||||
} else if (mPlayTime.IsStarted()) {
|
|
||||||
// Not visible, play time is running -> Start hidden play time if needed.
|
|
||||||
HiddenVideoStart();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mDecoder && !IsBeingDestroyed()) {
|
if (mDecoder && !IsBeingDestroyed()) {
|
||||||
mDecoder->NotifyOwnerActivityChanged(visible);
|
mDecoder->NotifyOwnerActivityChanged(visible);
|
||||||
|
|
@ -6288,18 +6069,10 @@ HTMLMediaElement::OnVisibilityChange(Visibility aNewVisibility)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Visibility::APPROXIMATELY_NONVISIBLE: {
|
case Visibility::APPROXIMATELY_NONVISIBLE: {
|
||||||
if (mPlayTime.IsStarted()) {
|
|
||||||
// Not visible, play time is running -> Start hidden play time if needed.
|
|
||||||
HiddenVideoStart();
|
|
||||||
}
|
|
||||||
|
|
||||||
mDecoder->NotifyOwnerActivityChanged(false);
|
mDecoder->NotifyOwnerActivityChanged(false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Visibility::APPROXIMATELY_VISIBLE: {
|
case Visibility::APPROXIMATELY_VISIBLE: {
|
||||||
// Visible -> Just pause hidden play time (no-op if already paused).
|
|
||||||
HiddenVideoStop();
|
|
||||||
|
|
||||||
mDecoder->NotifyOwnerActivityChanged(true);
|
mDecoder->NotifyOwnerActivityChanged(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1195,29 +1195,6 @@ protected:
|
||||||
return isPaused;
|
return isPaused;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Video has been playing while hidden and, if feature was enabled, would
|
|
||||||
* trigger suspending decoder.
|
|
||||||
* Used to track hidden-video-decode-suspend telemetry.
|
|
||||||
*/
|
|
||||||
static void VideoDecodeSuspendTimerCallback(nsITimer* aTimer, void* aClosure);
|
|
||||||
/**
|
|
||||||
* Video is now both: playing and hidden.
|
|
||||||
* Used to track hidden-video telemetry.
|
|
||||||
*/
|
|
||||||
void HiddenVideoStart();
|
|
||||||
/**
|
|
||||||
* Video is not playing anymore and/or has become visible.
|
|
||||||
* Used to track hidden-video telemetry.
|
|
||||||
*/
|
|
||||||
void HiddenVideoStop();
|
|
||||||
|
|
||||||
#ifdef MOZ_EME
|
|
||||||
void ReportEMETelemetry();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void ReportTelemetry();
|
|
||||||
|
|
||||||
// Check the permissions for audiochannel.
|
// Check the permissions for audiochannel.
|
||||||
bool CheckAudioChannelPermissions(const nsAString& aType);
|
bool CheckAudioChannelPermissions(const nsAString& aType);
|
||||||
|
|
||||||
|
|
@ -1688,65 +1665,7 @@ protected:
|
||||||
// before attaching to the DOM tree.
|
// before attaching to the DOM tree.
|
||||||
bool mUnboundFromTree = false;
|
bool mUnboundFromTree = false;
|
||||||
|
|
||||||
public:
|
|
||||||
// Helper class to measure times for MSE telemetry stats
|
|
||||||
class TimeDurationAccumulator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
TimeDurationAccumulator()
|
|
||||||
: mCount(0)
|
|
||||||
{}
|
|
||||||
void Start()
|
|
||||||
{
|
|
||||||
if (IsStarted()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mStartTime = TimeStamp::Now();
|
|
||||||
}
|
|
||||||
void Pause()
|
|
||||||
{
|
|
||||||
if (!IsStarted()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mSum += (TimeStamp::Now() - mStartTime);
|
|
||||||
mCount++;
|
|
||||||
mStartTime = TimeStamp();
|
|
||||||
}
|
|
||||||
bool IsStarted() const
|
|
||||||
{
|
|
||||||
return !mStartTime.IsNull();
|
|
||||||
}
|
|
||||||
double Total() const
|
|
||||||
{
|
|
||||||
if (!IsStarted()) {
|
|
||||||
return mSum.ToSeconds();
|
|
||||||
}
|
|
||||||
// Add current running time until now, but keep it running.
|
|
||||||
return (mSum + (TimeStamp::Now() - mStartTime)).ToSeconds();
|
|
||||||
}
|
|
||||||
uint32_t Count() const
|
|
||||||
{
|
|
||||||
if (!IsStarted()) {
|
|
||||||
return mCount;
|
|
||||||
}
|
|
||||||
// Count current run in this report, without increasing the stored count.
|
|
||||||
return mCount + 1;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
TimeStamp mStartTime;
|
|
||||||
TimeDuration mSum;
|
|
||||||
uint32_t mCount;
|
|
||||||
};
|
|
||||||
private:
|
private:
|
||||||
// Total time a video has spent playing.
|
|
||||||
TimeDurationAccumulator mPlayTime;
|
|
||||||
|
|
||||||
// Total time a video has spent playing while hidden.
|
|
||||||
TimeDurationAccumulator mHiddenPlayTime;
|
|
||||||
|
|
||||||
// Total time a video has (or would have) spent in video-decode-suspend mode.
|
|
||||||
TimeDurationAccumulator mVideoDecodeSuspendTime;
|
|
||||||
|
|
||||||
// Indicates if user has interacted with the element.
|
// Indicates if user has interacted with the element.
|
||||||
// Used to block autoplay when disabled.
|
// Used to block autoplay when disabled.
|
||||||
bool mHasUserInteraction;
|
bool mHasUserInteraction;
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,6 @@ TextTrackManager::TextTrackManager(HTMLMediaElement *aMediaElement)
|
||||||
, mTimeMarchesOnDispatched(false)
|
, mTimeMarchesOnDispatched(false)
|
||||||
, mUpdateCueDisplayDispatched(false)
|
, mUpdateCueDisplayDispatched(false)
|
||||||
, performedTrackSelection(false)
|
, performedTrackSelection(false)
|
||||||
, mCueTelemetryReported(false)
|
|
||||||
, mShutdown(false)
|
, mShutdown(false)
|
||||||
{
|
{
|
||||||
nsISupports* parentObject =
|
nsISupports* parentObject =
|
||||||
|
|
@ -170,7 +169,6 @@ TextTrackManager::AddTextTrack(TextTrackKind aKind, const nsAString& aLabel,
|
||||||
mTextTracks->AddTextTrack(aKind, aLabel, aLanguage, aMode, aReadyState,
|
mTextTracks->AddTextTrack(aKind, aLabel, aLanguage, aMode, aReadyState,
|
||||||
aTextTrackSource, CompareTextTracks(mMediaElement));
|
aTextTrackSource, CompareTextTracks(mMediaElement));
|
||||||
AddCues(track);
|
AddCues(track);
|
||||||
ReportTelemetryForTrack(track);
|
|
||||||
|
|
||||||
if (aTextTrackSource == TextTrackSource::Track) {
|
if (aTextTrackSource == TextTrackSource::Track) {
|
||||||
RefPtr<nsIRunnable> task =
|
RefPtr<nsIRunnable> task =
|
||||||
|
|
@ -190,7 +188,6 @@ TextTrackManager::AddTextTrack(TextTrack* aTextTrack)
|
||||||
WEBVTT_LOG("%p AddTextTrack TextTrack %p",this, aTextTrack);
|
WEBVTT_LOG("%p AddTextTrack TextTrack %p",this, aTextTrack);
|
||||||
mTextTracks->AddTextTrack(aTextTrack, CompareTextTracks(mMediaElement));
|
mTextTracks->AddTextTrack(aTextTrack, CompareTextTracks(mMediaElement));
|
||||||
AddCues(aTextTrack);
|
AddCues(aTextTrack);
|
||||||
ReportTelemetryForTrack(aTextTrack);
|
|
||||||
|
|
||||||
if (aTextTrack->GetTextTrackSource() == TextTrackSource::Track) {
|
if (aTextTrack->GetTextTrackSource() == TextTrackSource::Track) {
|
||||||
RefPtr<nsIRunnable> task =
|
RefPtr<nsIRunnable> task =
|
||||||
|
|
@ -309,7 +306,6 @@ TextTrackManager::NotifyCueAdded(TextTrackCue& aCue)
|
||||||
mNewCues->AddCue(aCue);
|
mNewCues->AddCue(aCue);
|
||||||
}
|
}
|
||||||
DispatchTimeMarchesOn();
|
DispatchTimeMarchesOn();
|
||||||
ReportTelemetryForCue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -827,17 +823,5 @@ TextTrackManager::NotifyReset()
|
||||||
mLastTimeMarchesOnCalled = 0.0;
|
mLastTimeMarchesOnCalled = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
TextTrackManager::ReportTelemetryForTrack(TextTrack* aTextTrack) const
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TextTrackManager::ReportTelemetryForCue()
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
|
||||||
|
|
@ -148,13 +148,6 @@ private:
|
||||||
nsTArray<TextTrack*>& aTextTracks);
|
nsTArray<TextTrack*>& aTextTracks);
|
||||||
bool TrackIsDefault(TextTrack* aTextTrack);
|
bool TrackIsDefault(TextTrack* aTextTrack);
|
||||||
|
|
||||||
void ReportTelemetryForTrack(TextTrack* aTextTrack) const;
|
|
||||||
void ReportTelemetryForCue();
|
|
||||||
|
|
||||||
// If there is at least one cue has been added to the cue list once, we would
|
|
||||||
// report the usage of cue to Telemetry.
|
|
||||||
bool mCueTelemetryReported;
|
|
||||||
|
|
||||||
class ShutdownObserverProxy final : public nsIObserver
|
class ShutdownObserverProxy final : public nsIObserver
|
||||||
{
|
{
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
|
|
|
||||||
|
|
@ -4129,7 +4129,6 @@ GetDatabaseFileURL(nsIFile* aDatabaseFile,
|
||||||
PersistenceType aPersistenceType,
|
PersistenceType aPersistenceType,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint32_t aTelemetryId,
|
|
||||||
nsIFileURL** aResult)
|
nsIFileURL** aResult)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aDatabaseFile);
|
MOZ_ASSERT(aDatabaseFile);
|
||||||
|
|
@ -4161,18 +4160,10 @@ GetDatabaseFileURL(nsIFile* aDatabaseFile,
|
||||||
nsAutoCString type;
|
nsAutoCString type;
|
||||||
PersistenceTypeToText(aPersistenceType, type);
|
PersistenceTypeToText(aPersistenceType, type);
|
||||||
|
|
||||||
nsAutoCString telemetryFilenameClause;
|
|
||||||
if (aTelemetryId) {
|
|
||||||
telemetryFilenameClause.AssignLiteral("&telemetryFilename=indexedDB-");
|
|
||||||
telemetryFilenameClause.AppendInt(aTelemetryId);
|
|
||||||
telemetryFilenameClause.AppendLiteral(".sqlite");
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = fileUrl->SetQuery(NS_LITERAL_CSTRING("persistenceType=") + type +
|
rv = fileUrl->SetQuery(NS_LITERAL_CSTRING("persistenceType=") + type +
|
||||||
NS_LITERAL_CSTRING("&group=") + aGroup +
|
NS_LITERAL_CSTRING("&group=") + aGroup +
|
||||||
NS_LITERAL_CSTRING("&origin=") + aOrigin +
|
NS_LITERAL_CSTRING("&origin=") + aOrigin +
|
||||||
NS_LITERAL_CSTRING("&cache=private") +
|
NS_LITERAL_CSTRING("&cache=private"));
|
||||||
telemetryFilenameClause);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
@ -4422,7 +4413,6 @@ CreateStorageConnection(nsIFile* aDBFile,
|
||||||
PersistenceType aPersistenceType,
|
PersistenceType aPersistenceType,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint32_t aTelemetryId,
|
|
||||||
mozIStorageConnection** aConnection)
|
mozIStorageConnection** aConnection)
|
||||||
{
|
{
|
||||||
AssertIsOnIOThread();
|
AssertIsOnIOThread();
|
||||||
|
|
@ -4454,7 +4444,6 @@ CreateStorageConnection(nsIFile* aDBFile,
|
||||||
aPersistenceType,
|
aPersistenceType,
|
||||||
aGroup,
|
aGroup,
|
||||||
aOrigin,
|
aOrigin,
|
||||||
aTelemetryId,
|
|
||||||
getter_AddRefs(dbFileUrl));
|
getter_AddRefs(dbFileUrl));
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
|
@ -4890,7 +4879,6 @@ GetStorageConnection(nsIFile* aDatabaseFile,
|
||||||
PersistenceType aPersistenceType,
|
PersistenceType aPersistenceType,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint32_t aTelemetryId,
|
|
||||||
mozIStorageConnection** aConnection)
|
mozIStorageConnection** aConnection)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(!NS_IsMainThread());
|
MOZ_ASSERT(!NS_IsMainThread());
|
||||||
|
|
@ -4918,7 +4906,6 @@ GetStorageConnection(nsIFile* aDatabaseFile,
|
||||||
aPersistenceType,
|
aPersistenceType,
|
||||||
aGroup,
|
aGroup,
|
||||||
aOrigin,
|
aOrigin,
|
||||||
aTelemetryId,
|
|
||||||
getter_AddRefs(dbFileUrl));
|
getter_AddRefs(dbFileUrl));
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
|
@ -4955,7 +4942,6 @@ GetStorageConnection(const nsAString& aDatabaseFilePath,
|
||||||
PersistenceType aPersistenceType,
|
PersistenceType aPersistenceType,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint32_t aTelemetryId,
|
|
||||||
mozIStorageConnection** aConnection)
|
mozIStorageConnection** aConnection)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(!NS_IsMainThread());
|
MOZ_ASSERT(!NS_IsMainThread());
|
||||||
|
|
@ -4974,7 +4960,6 @@ GetStorageConnection(const nsAString& aDatabaseFilePath,
|
||||||
aPersistenceType,
|
aPersistenceType,
|
||||||
aGroup,
|
aGroup,
|
||||||
aOrigin,
|
aOrigin,
|
||||||
aTelemetryId,
|
|
||||||
aConnection);
|
aConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6296,7 +6281,6 @@ private:
|
||||||
const nsCString mId;
|
const nsCString mId;
|
||||||
const nsString mFilePath;
|
const nsString mFilePath;
|
||||||
uint32_t mActiveMutableFileCount;
|
uint32_t mActiveMutableFileCount;
|
||||||
const uint32_t mTelemetryId;
|
|
||||||
const PersistenceType mPersistenceType;
|
const PersistenceType mPersistenceType;
|
||||||
const bool mFileHandleDisabled;
|
const bool mFileHandleDisabled;
|
||||||
const bool mChromeWriteAccessAllowed;
|
const bool mChromeWriteAccessAllowed;
|
||||||
|
|
@ -6313,7 +6297,6 @@ public:
|
||||||
const Maybe<ContentParentId>& aOptionalContentParentId,
|
const Maybe<ContentParentId>& aOptionalContentParentId,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint32_t aTelemetryId,
|
|
||||||
FullDatabaseMetadata* aMetadata,
|
FullDatabaseMetadata* aMetadata,
|
||||||
FileManager* aFileManager,
|
FileManager* aFileManager,
|
||||||
already_AddRefed<DirectoryLock> aDirectoryLock,
|
already_AddRefed<DirectoryLock> aDirectoryLock,
|
||||||
|
|
@ -6372,12 +6355,6 @@ public:
|
||||||
return mId;
|
return mId;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
|
||||||
TelemetryId() const
|
|
||||||
{
|
|
||||||
return mTelemetryId;
|
|
||||||
}
|
|
||||||
|
|
||||||
PersistenceType
|
PersistenceType
|
||||||
Type() const
|
Type() const
|
||||||
{
|
{
|
||||||
|
|
@ -7673,8 +7650,6 @@ class OpenDatabaseOp final
|
||||||
// cycles.
|
// cycles.
|
||||||
VersionChangeOp* mVersionChangeOp;
|
VersionChangeOp* mVersionChangeOp;
|
||||||
|
|
||||||
uint32_t mTelemetryId;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OpenDatabaseOp(Factory* aFactory,
|
OpenDatabaseOp(Factory* aFactory,
|
||||||
already_AddRefed<ContentParent> aContentParent,
|
already_AddRefed<ContentParent> aContentParent,
|
||||||
|
|
@ -10302,13 +10277,6 @@ typedef nsDataHashtable<nsIDHashKey, DatabaseLoggingInfo*>
|
||||||
|
|
||||||
StaticAutoPtr<DatabaseLoggingInfoHashtable> gLoggingInfoHashtable;
|
StaticAutoPtr<DatabaseLoggingInfoHashtable> gLoggingInfoHashtable;
|
||||||
|
|
||||||
typedef nsDataHashtable<nsUint32HashKey, uint32_t> TelemetryIdHashtable;
|
|
||||||
|
|
||||||
StaticAutoPtr<TelemetryIdHashtable> gTelemetryIdHashtable;
|
|
||||||
|
|
||||||
// Protects all reads and writes to gTelemetryIdHashtable.
|
|
||||||
StaticAutoPtr<Mutex> gTelemetryIdMutex;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
StaticRefPtr<DEBUGThreadSlower> gDEBUGThreadSlower;
|
StaticRefPtr<DEBUGThreadSlower> gDEBUGThreadSlower;
|
||||||
|
|
@ -10404,88 +10372,6 @@ DecreaseBusyCount()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
|
||||||
TelemetryIdForFile(nsIFile* aFile)
|
|
||||||
{
|
|
||||||
// May be called on any thread!
|
|
||||||
|
|
||||||
MOZ_ASSERT(aFile);
|
|
||||||
MOZ_ASSERT(gTelemetryIdMutex);
|
|
||||||
|
|
||||||
// The storage directory is structured like this:
|
|
||||||
//
|
|
||||||
// <profile>/storage/<persistence>/<origin>/idb/<filename>.sqlite
|
|
||||||
//
|
|
||||||
// For the purposes of this function we're only concerned with the
|
|
||||||
// <persistence>, <origin>, and <filename> pieces.
|
|
||||||
|
|
||||||
nsString filename;
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(aFile->GetLeafName(filename));
|
|
||||||
|
|
||||||
// Make sure we were given a database file.
|
|
||||||
NS_NAMED_LITERAL_STRING(sqliteExtension, ".sqlite");
|
|
||||||
|
|
||||||
MOZ_ASSERT(StringEndsWith(filename, sqliteExtension));
|
|
||||||
|
|
||||||
filename.Truncate(filename.Length() - sqliteExtension.Length());
|
|
||||||
|
|
||||||
// Get the "idb" directory.
|
|
||||||
nsCOMPtr<nsIFile> idbDirectory;
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(aFile->GetParent(getter_AddRefs(idbDirectory)));
|
|
||||||
|
|
||||||
DebugOnly<nsString> idbLeafName;
|
|
||||||
MOZ_ASSERT(NS_SUCCEEDED(idbDirectory->GetLeafName(idbLeafName)));
|
|
||||||
MOZ_ASSERT(static_cast<nsString&>(idbLeafName).EqualsLiteral("idb"));
|
|
||||||
|
|
||||||
// Get the <origin> directory.
|
|
||||||
nsCOMPtr<nsIFile> originDirectory;
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(
|
|
||||||
idbDirectory->GetParent(getter_AddRefs(originDirectory)));
|
|
||||||
|
|
||||||
nsString origin;
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(originDirectory->GetLeafName(origin));
|
|
||||||
|
|
||||||
// Any databases in these directories are owned by the application and should
|
|
||||||
// not have their filenames masked. Hopefully they also appear in the
|
|
||||||
// Telemetry.cpp whitelist.
|
|
||||||
if (origin.EqualsLiteral("chrome") ||
|
|
||||||
origin.EqualsLiteral("moz-safe-about+home")) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the <persistence> directory.
|
|
||||||
nsCOMPtr<nsIFile> persistenceDirectory;
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(
|
|
||||||
originDirectory->GetParent(getter_AddRefs(persistenceDirectory)));
|
|
||||||
|
|
||||||
nsString persistence;
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(persistenceDirectory->GetLeafName(persistence));
|
|
||||||
|
|
||||||
NS_NAMED_LITERAL_STRING(separator, "*");
|
|
||||||
|
|
||||||
uint32_t hashValue = HashString(persistence + separator +
|
|
||||||
origin + separator +
|
|
||||||
filename);
|
|
||||||
|
|
||||||
MutexAutoLock lock(*gTelemetryIdMutex);
|
|
||||||
|
|
||||||
if (!gTelemetryIdHashtable) {
|
|
||||||
gTelemetryIdHashtable = new TelemetryIdHashtable();
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t id;
|
|
||||||
if (!gTelemetryIdHashtable->Get(hashValue, &id)) {
|
|
||||||
static uint32_t sNextId = 1;
|
|
||||||
|
|
||||||
// We're locked, no need for atomics.
|
|
||||||
id = sNextId++;
|
|
||||||
|
|
||||||
gTelemetryIdHashtable->Put(hashValue, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
@ -12265,7 +12151,6 @@ ConnectionPool::GetOrCreateConnection(const Database* aDatabase,
|
||||||
aDatabase->Type(),
|
aDatabase->Type(),
|
||||||
aDatabase->Group(),
|
aDatabase->Group(),
|
||||||
aDatabase->Origin(),
|
aDatabase->Origin(),
|
||||||
aDatabase->TelemetryId(),
|
|
||||||
getter_AddRefs(storageConnection));
|
getter_AddRefs(storageConnection));
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
|
@ -14134,7 +14019,6 @@ Database::Database(Factory* aFactory,
|
||||||
const Maybe<ContentParentId>& aOptionalContentParentId,
|
const Maybe<ContentParentId>& aOptionalContentParentId,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin,
|
||||||
uint32_t aTelemetryId,
|
|
||||||
FullDatabaseMetadata* aMetadata,
|
FullDatabaseMetadata* aMetadata,
|
||||||
FileManager* aFileManager,
|
FileManager* aFileManager,
|
||||||
already_AddRefed<DirectoryLock> aDirectoryLock,
|
already_AddRefed<DirectoryLock> aDirectoryLock,
|
||||||
|
|
@ -14151,7 +14035,6 @@ Database::Database(Factory* aFactory,
|
||||||
, mId(aMetadata->mDatabaseId)
|
, mId(aMetadata->mDatabaseId)
|
||||||
, mFilePath(aMetadata->mFilePath)
|
, mFilePath(aMetadata->mFilePath)
|
||||||
, mActiveMutableFileCount(0)
|
, mActiveMutableFileCount(0)
|
||||||
, mTelemetryId(aTelemetryId)
|
|
||||||
, mPersistenceType(aMetadata->mCommonMetadata.persistenceType())
|
, mPersistenceType(aMetadata->mCommonMetadata.persistenceType())
|
||||||
, mFileHandleDisabled(aFileHandleDisabled)
|
, mFileHandleDisabled(aFileHandleDisabled)
|
||||||
, mChromeWriteAccessAllowed(aChromeWriteAccessAllowed)
|
, mChromeWriteAccessAllowed(aChromeWriteAccessAllowed)
|
||||||
|
|
@ -17391,8 +17274,7 @@ FileManager::InitDirectory(nsIFile* aDirectory,
|
||||||
nsIFile* aDatabaseFile,
|
nsIFile* aDatabaseFile,
|
||||||
PersistenceType aPersistenceType,
|
PersistenceType aPersistenceType,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin)
|
||||||
uint32_t aTelemetryId)
|
|
||||||
{
|
{
|
||||||
AssertIsOnIOThread();
|
AssertIsOnIOThread();
|
||||||
MOZ_ASSERT(aDirectory);
|
MOZ_ASSERT(aDirectory);
|
||||||
|
|
@ -17464,7 +17346,6 @@ FileManager::InitDirectory(nsIFile* aDirectory,
|
||||||
aPersistenceType,
|
aPersistenceType,
|
||||||
aGroup,
|
aGroup,
|
||||||
aOrigin,
|
aOrigin,
|
||||||
aTelemetryId,
|
|
||||||
getter_AddRefs(connection));
|
getter_AddRefs(connection));
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
|
@ -17648,11 +17529,6 @@ QuotaClient::QuotaClient()
|
||||||
{
|
{
|
||||||
AssertIsOnBackgroundThread();
|
AssertIsOnBackgroundThread();
|
||||||
MOZ_ASSERT(!sInstance, "We expect this to be a singleton!");
|
MOZ_ASSERT(!sInstance, "We expect this to be a singleton!");
|
||||||
MOZ_ASSERT(!gTelemetryIdMutex);
|
|
||||||
|
|
||||||
// Always create this so that later access to gTelemetryIdHashtable can be
|
|
||||||
// properly synchronized.
|
|
||||||
gTelemetryIdMutex = new Mutex("IndexedDB gTelemetryIdMutex");
|
|
||||||
|
|
||||||
sInstance = this;
|
sInstance = this;
|
||||||
}
|
}
|
||||||
|
|
@ -17661,14 +17537,8 @@ QuotaClient::~QuotaClient()
|
||||||
{
|
{
|
||||||
AssertIsOnBackgroundThread();
|
AssertIsOnBackgroundThread();
|
||||||
MOZ_ASSERT(sInstance == this, "We expect this to be a singleton!");
|
MOZ_ASSERT(sInstance == this, "We expect this to be a singleton!");
|
||||||
MOZ_ASSERT(gTelemetryIdMutex);
|
|
||||||
MOZ_ASSERT(!mMaintenanceThreadPool);
|
MOZ_ASSERT(!mMaintenanceThreadPool);
|
||||||
|
|
||||||
// No one else should be able to touch gTelemetryIdHashtable now that the
|
|
||||||
// QuotaClient has gone away.
|
|
||||||
gTelemetryIdHashtable = nullptr;
|
|
||||||
gTelemetryIdMutex = nullptr;
|
|
||||||
|
|
||||||
sInstance = nullptr;
|
sInstance = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -17942,8 +17812,7 @@ QuotaClient::InitOrigin(PersistenceType aPersistenceType,
|
||||||
initInfo.mDatabaseFile,
|
initInfo.mDatabaseFile,
|
||||||
aPersistenceType,
|
aPersistenceType,
|
||||||
aGroup,
|
aGroup,
|
||||||
aOrigin,
|
aOrigin);
|
||||||
TelemetryIdForFile(initInfo.mDatabaseFile));
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
@ -19036,7 +18905,6 @@ DatabaseMaintenance::PerformMaintenanceOnDatabase()
|
||||||
mPersistenceType,
|
mPersistenceType,
|
||||||
mGroup,
|
mGroup,
|
||||||
mOrigin,
|
mOrigin,
|
||||||
TelemetryIdForFile(databaseFile),
|
|
||||||
getter_AddRefs(connection));
|
getter_AddRefs(connection));
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -21653,7 +21521,6 @@ OpenDatabaseOp::OpenDatabaseOp(Factory* aFactory,
|
||||||
, mMetadata(new FullDatabaseMetadata(aParams.metadata()))
|
, mMetadata(new FullDatabaseMetadata(aParams.metadata()))
|
||||||
, mRequestedVersion(aParams.metadata().version())
|
, mRequestedVersion(aParams.metadata().version())
|
||||||
, mVersionChangeOp(nullptr)
|
, mVersionChangeOp(nullptr)
|
||||||
, mTelemetryId(0)
|
|
||||||
{
|
{
|
||||||
if (mContentParent) {
|
if (mContentParent) {
|
||||||
// This is a little scary but it looks safe to call this off the main thread
|
// This is a little scary but it looks safe to call this off the main thread
|
||||||
|
|
@ -21762,8 +21629,6 @@ OpenDatabaseOp::DoDatabaseWork()
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
mTelemetryId = TelemetryIdForFile(dbFile);
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
nsString databaseFilePath;
|
nsString databaseFilePath;
|
||||||
rv = dbFile->GetPath(databaseFilePath);
|
rv = dbFile->GetPath(databaseFilePath);
|
||||||
|
|
@ -21794,7 +21659,6 @@ OpenDatabaseOp::DoDatabaseWork()
|
||||||
persistenceType,
|
persistenceType,
|
||||||
mGroup,
|
mGroup,
|
||||||
mOrigin,
|
mOrigin,
|
||||||
mTelemetryId,
|
|
||||||
getter_AddRefs(connection));
|
getter_AddRefs(connection));
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
|
@ -22677,7 +22541,6 @@ OpenDatabaseOp::EnsureDatabaseActor()
|
||||||
mOptionalContentParentId,
|
mOptionalContentParentId,
|
||||||
mGroup,
|
mGroup,
|
||||||
mOrigin,
|
mOrigin,
|
||||||
mTelemetryId,
|
|
||||||
mMetadata,
|
mMetadata,
|
||||||
mFileManager,
|
mFileManager,
|
||||||
mDirectoryLock.forget(),
|
mDirectoryLock.forget(),
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,7 @@ public:
|
||||||
nsIFile* aDatabaseFile,
|
nsIFile* aDatabaseFile,
|
||||||
PersistenceType aPersistenceType,
|
PersistenceType aPersistenceType,
|
||||||
const nsACString& aGroup,
|
const nsACString& aGroup,
|
||||||
const nsACString& aOrigin,
|
const nsACString& aOrigin);
|
||||||
uint32_t aTelemetryId);
|
|
||||||
|
|
||||||
static nsresult
|
static nsresult
|
||||||
GetUsage(nsIFile* aDirectory, uint64_t* aUsage);
|
GetUsage(nsIFile* aDirectory, uint64_t* aUsage);
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,6 @@
|
||||||
#include "mozilla/ScopeExit.h"
|
#include "mozilla/ScopeExit.h"
|
||||||
#include "mozilla/Services.h"
|
#include "mozilla/Services.h"
|
||||||
#include "mozilla/StaticPtr.h"
|
#include "mozilla/StaticPtr.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/WebBrowserPersistDocumentParent.h"
|
#include "mozilla/WebBrowserPersistDocumentParent.h"
|
||||||
#include "mozilla/Unused.h"
|
#include "mozilla/Unused.h"
|
||||||
#include "nsAnonymousTemporaryFile.h"
|
#include "nsAnonymousTemporaryFile.h"
|
||||||
|
|
@ -3363,17 +3362,6 @@ ContentParent::RecvIsSecureURI(const uint32_t& type,
|
||||||
return NS_SUCCEEDED(rv);
|
return NS_SUCCEEDED(rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
ContentParent::RecvAccumulateMixedContentHSTS(const URIParams& aURI, const bool& aActive)
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIURI> ourURI = DeserializeURI(aURI);
|
|
||||||
if (!ourURI) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
nsMixedContentBlocker::AccumulateMixedContentHSTS(ourURI, aActive);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ContentParent::RecvLoadURIExternal(const URIParams& uri,
|
ContentParent::RecvLoadURIExternal(const URIParams& uri,
|
||||||
PBrowserParent* windowContext)
|
PBrowserParent* windowContext)
|
||||||
|
|
@ -4764,19 +4752,3 @@ ContentParent::ForceTabPaint(TabParent* aTabParent, uint64_t aLayerObserverEpoch
|
||||||
}
|
}
|
||||||
ProcessHangMonitor::ForcePaint(mHangMonitorActor, aTabParent, aLayerObserverEpoch);
|
ProcessHangMonitor::ForcePaint(mHangMonitorActor, aTabParent, aLayerObserverEpoch);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
ContentParent::RecvAccumulateChildHistogram(
|
|
||||||
InfallibleTArray<Accumulation>&& aAccumulations)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
ContentParent::RecvAccumulateChildKeyedHistogram(
|
|
||||||
InfallibleTArray<KeyedAccumulation>&& aAccumulations)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -741,9 +741,6 @@ private:
|
||||||
virtual bool RecvIsSecureURI(const uint32_t& aType, const URIParams& aURI,
|
virtual bool RecvIsSecureURI(const uint32_t& aType, const URIParams& aURI,
|
||||||
const uint32_t& aFlags, bool* aIsSecureURI) override;
|
const uint32_t& aFlags, bool* aIsSecureURI) override;
|
||||||
|
|
||||||
virtual bool RecvAccumulateMixedContentHSTS(const URIParams& aURI,
|
|
||||||
const bool& aActive) override;
|
|
||||||
|
|
||||||
virtual bool DeallocPHalParent(PHalParent*) override;
|
virtual bool DeallocPHalParent(PHalParent*) override;
|
||||||
|
|
||||||
virtual bool
|
virtual bool
|
||||||
|
|
@ -1044,10 +1041,6 @@ private:
|
||||||
|
|
||||||
virtual bool RecvDeleteGetFilesRequest(const nsID& aID) override;
|
virtual bool RecvDeleteGetFilesRequest(const nsID& aID) override;
|
||||||
|
|
||||||
virtual bool RecvAccumulateChildHistogram(
|
|
||||||
InfallibleTArray<Accumulation>&& aAccumulations) override;
|
|
||||||
virtual bool RecvAccumulateChildKeyedHistogram(
|
|
||||||
InfallibleTArray<KeyedAccumulation>&& aAccumulations) override;
|
|
||||||
public:
|
public:
|
||||||
void SendGetFilesResponseAndForget(const nsID& aID,
|
void SendGetFilesResponseAndForget(const nsID& aID,
|
||||||
const GetFilesResponseResult& aResult);
|
const GetFilesResponseResult& aResult);
|
||||||
|
|
|
||||||
|
|
@ -89,8 +89,6 @@ using mozilla::DataStorageType from "ipc/DataStorageIPCUtils.h";
|
||||||
using mozilla::DocShellOriginAttributes from "mozilla/ipc/BackgroundUtils.h";
|
using mozilla::DocShellOriginAttributes from "mozilla/ipc/BackgroundUtils.h";
|
||||||
using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
|
using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
|
||||||
using struct mozilla::dom::FlyWebPublishOptions from "mozilla/dom/FlyWebPublishOptionsIPCSerializer.h";
|
using struct mozilla::dom::FlyWebPublishOptions from "mozilla/dom/FlyWebPublishOptionsIPCSerializer.h";
|
||||||
using mozilla::Telemetry::Accumulation from "mozilla/TelemetryComms.h";
|
|
||||||
using mozilla::Telemetry::KeyedAccumulation from "mozilla/TelemetryComms.h";
|
|
||||||
|
|
||||||
union ChromeRegistryItem
|
union ChromeRegistryItem
|
||||||
{
|
{
|
||||||
|
|
@ -658,8 +656,6 @@ parent:
|
||||||
sync IsSecureURI(uint32_t type, URIParams uri, uint32_t flags)
|
sync IsSecureURI(uint32_t type, URIParams uri, uint32_t flags)
|
||||||
returns (bool isSecureURI);
|
returns (bool isSecureURI);
|
||||||
|
|
||||||
async AccumulateMixedContentHSTS(URIParams uri, bool active);
|
|
||||||
|
|
||||||
sync GetLookAndFeelCache()
|
sync GetLookAndFeelCache()
|
||||||
returns (LookAndFeelInt[] lookAndFeelIntCache);
|
returns (LookAndFeelInt[] lookAndFeelIntCache);
|
||||||
|
|
||||||
|
|
@ -1022,12 +1018,6 @@ parent:
|
||||||
|
|
||||||
async UnstoreAndBroadcastBlobURLUnregistration(nsCString url);
|
async UnstoreAndBroadcastBlobURLUnregistration(nsCString url);
|
||||||
|
|
||||||
/**
|
|
||||||
* Messages for communicating child Telemetry to the parent process
|
|
||||||
*/
|
|
||||||
async AccumulateChildHistogram(Accumulation[] accumulations);
|
|
||||||
async AccumulateChildKeyedHistogram(KeyedAccumulation[] accumulations);
|
|
||||||
|
|
||||||
sync GetA11yContentId() returns (uint32_t aContentId);
|
sync GetA11yContentId() returns (uint32_t aContentId);
|
||||||
|
|
||||||
both:
|
both:
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@
|
||||||
#include "nsCharSeparatedTokenizer.h"
|
#include "nsCharSeparatedTokenizer.h"
|
||||||
#include "nsMimeTypes.h"
|
#include "nsMimeTypes.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
|
|
||||||
#include "OggDecoder.h"
|
#include "OggDecoder.h"
|
||||||
#include "OggDemuxer.h"
|
#include "OggDemuxer.h"
|
||||||
|
|
@ -85,22 +84,6 @@ DecoderTraits::IsWebMAudioType(const nsACString& aType)
|
||||||
return aType.EqualsASCII("audio/webm");
|
return aType.EqualsASCII("audio/webm");
|
||||||
}
|
}
|
||||||
|
|
||||||
static char const *const gHttpLiveStreamingTypes[] = {
|
|
||||||
// For m3u8.
|
|
||||||
// https://tools.ietf.org/html/draft-pantos-http-live-streaming-19#section-10
|
|
||||||
"application/vnd.apple.mpegurl",
|
|
||||||
// Some sites serve these as the informal m3u type.
|
|
||||||
"application/x-mpegurl",
|
|
||||||
"audio/x-mpegurl",
|
|
||||||
nullptr
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool
|
|
||||||
IsHttpLiveStreamingType(const nsACString& aType)
|
|
||||||
{
|
|
||||||
return CodecListContains(gHttpLiveStreamingTypes, aType);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MOZ_FMP4
|
#ifdef MOZ_FMP4
|
||||||
static bool
|
static bool
|
||||||
IsMP4SupportedType(const MediaContentType& aParsedType,
|
IsMP4SupportedType(const MediaContentType& aParsedType,
|
||||||
|
|
@ -247,10 +230,6 @@ CanHandleMediaType(const MediaContentType& aType,
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
|
||||||
if (IsHttpLiveStreamingType(aType.GetMIMEType())) {
|
|
||||||
/* Telemetry STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aType.HaveCodecs()) {
|
if (aType.HaveCodecs()) {
|
||||||
CanPlayStatus result = CanHandleCodecsType(aType, aDiagnostics);
|
CanPlayStatus result = CanHandleCodecsType(aType, aDiagnostics);
|
||||||
if (result == CANPLAY_NO || result == CANPLAY_YES) {
|
if (result == CANPLAY_NO || result == CANPLAY_YES) {
|
||||||
|
|
|
||||||
|
|
@ -629,7 +629,6 @@ AudioCallbackDriver::Init()
|
||||||
cubeb_stream_params output;
|
cubeb_stream_params output;
|
||||||
cubeb_stream_params input;
|
cubeb_stream_params input;
|
||||||
uint32_t latency_frames;
|
uint32_t latency_frames;
|
||||||
bool firstStream = CubebUtils::GetFirstStream();
|
|
||||||
|
|
||||||
MOZ_ASSERT(!NS_IsMainThread(),
|
MOZ_ASSERT(!NS_IsMainThread(),
|
||||||
"This is blocking and should never run on the main thread.");
|
"This is blocking and should never run on the main thread.");
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@
|
||||||
#include "mozilla/dom/VideoTrack.h"
|
#include "mozilla/dom/VideoTrack.h"
|
||||||
#include "mozilla/dom/VideoTrackList.h"
|
#include "mozilla/dom/VideoTrackList.h"
|
||||||
#include "nsPrintfCString.h"
|
#include "nsPrintfCString.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "GMPService.h"
|
#include "GMPService.h"
|
||||||
#include "Layers.h"
|
#include "Layers.h"
|
||||||
#include "mozilla/layers/ShadowLayers.h"
|
#include "mozilla/layers/ShadowLayers.h"
|
||||||
|
|
@ -421,7 +420,6 @@ MediaDecoder::MediaDecoder(MediaDecoderOwner* aOwner)
|
||||||
, INIT_CANONICAL(mPlaybackRateReliable, true)
|
, INIT_CANONICAL(mPlaybackRateReliable, true)
|
||||||
, INIT_CANONICAL(mDecoderPosition, 0)
|
, INIT_CANONICAL(mDecoderPosition, 0)
|
||||||
, INIT_CANONICAL(mIsVisible, !aOwner->IsHidden())
|
, INIT_CANONICAL(mIsVisible, !aOwner->IsHidden())
|
||||||
, mTelemetryReported(false)
|
|
||||||
{
|
{
|
||||||
MOZ_COUNT_CTOR(MediaDecoder);
|
MOZ_COUNT_CTOR(MediaDecoder);
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
|
@ -841,41 +839,6 @@ MediaDecoder::MetadataLoaded(nsAutoPtr<MediaInfo> aInfo,
|
||||||
// So we call Invalidate() after calling mOwner->MetadataLoaded to ensure
|
// So we call Invalidate() after calling mOwner->MetadataLoaded to ensure
|
||||||
// the media element has the latest dimensions.
|
// the media element has the latest dimensions.
|
||||||
Invalidate();
|
Invalidate();
|
||||||
|
|
||||||
EnsureTelemetryReported();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
MediaDecoder::EnsureTelemetryReported()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
|
|
||||||
if (mTelemetryReported || !mInfo) {
|
|
||||||
// Note: sometimes we get multiple MetadataLoaded calls (for example
|
|
||||||
// for chained ogg). So we ensure we don't report duplicate results for
|
|
||||||
// these resources.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsTArray<nsCString> codecs;
|
|
||||||
if (mInfo->HasAudio() && !mInfo->mAudio.GetAsAudioInfo()->mMimeType.IsEmpty()) {
|
|
||||||
codecs.AppendElement(mInfo->mAudio.GetAsAudioInfo()->mMimeType);
|
|
||||||
}
|
|
||||||
if (mInfo->HasVideo() && !mInfo->mVideo.GetAsVideoInfo()->mMimeType.IsEmpty()) {
|
|
||||||
codecs.AppendElement(mInfo->mVideo.GetAsVideoInfo()->mMimeType);
|
|
||||||
}
|
|
||||||
if (codecs.IsEmpty()) {
|
|
||||||
if (mResource->GetContentType().IsEmpty()) {
|
|
||||||
NS_WARNING("Somehow the resource's content type is empty");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
codecs.AppendElement(nsPrintfCString("resource; %s", mResource->GetContentType().get()));
|
|
||||||
}
|
|
||||||
for (const nsCString& codec : codecs) {
|
|
||||||
DECODER_LOG("Telemetry MEDIA_CODEC_USED= '%s'", codec.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
mTelemetryReported = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char*
|
const char*
|
||||||
|
|
|
||||||
|
|
@ -440,8 +440,6 @@ private:
|
||||||
|
|
||||||
void SetCDMProxy(CDMProxy* aProxy);
|
void SetCDMProxy(CDMProxy* aProxy);
|
||||||
|
|
||||||
void EnsureTelemetryReported();
|
|
||||||
|
|
||||||
static bool IsOggEnabled();
|
static bool IsOggEnabled();
|
||||||
static bool IsOpusEnabled();
|
static bool IsOpusEnabled();
|
||||||
static bool IsWaveEnabled();
|
static bool IsWaveEnabled();
|
||||||
|
|
@ -852,8 +850,6 @@ private:
|
||||||
// download has ended. Called on the main thread only. aStatus is
|
// download has ended. Called on the main thread only. aStatus is
|
||||||
// the result from OnStopRequest.
|
// the result from OnStopRequest.
|
||||||
void NotifyDownloadEnded(nsresult aStatus);
|
void NotifyDownloadEnded(nsresult aStatus);
|
||||||
|
|
||||||
bool mTelemetryReported;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
|
||||||
|
|
@ -1173,27 +1173,12 @@ StateObject::HandleShutdown()
|
||||||
return SetState<ShutdownState>();
|
return SetState<ShutdownState>();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
ReportRecoveryTelemetry(const TimeStamp& aRecoveryStart,
|
|
||||||
const MediaInfo& aMediaInfo,
|
|
||||||
bool aIsHardwareAccelerated)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaDecoderStateMachine::
|
MediaDecoderStateMachine::
|
||||||
StateObject::HandleResumeVideoDecoding()
|
StateObject::HandleResumeVideoDecoding()
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(mMaster->mVideoDecodeSuspended);
|
MOZ_ASSERT(mMaster->mVideoDecodeSuspended);
|
||||||
|
|
||||||
// Start counting recovery time from right now.
|
|
||||||
TimeStamp start = TimeStamp::Now();
|
|
||||||
|
|
||||||
// Local reference to mInfo, so that it will be copied in the lambda below.
|
|
||||||
auto& info = Info();
|
|
||||||
bool hw = Reader()->VideoIsHardwareAccelerated();
|
|
||||||
|
|
||||||
// Start video-only seek to the current time.
|
// Start video-only seek to the current time.
|
||||||
SeekJob seekJob;
|
SeekJob seekJob;
|
||||||
|
|
||||||
|
|
@ -1205,10 +1190,7 @@ StateObject::HandleResumeVideoDecoding()
|
||||||
type,
|
type,
|
||||||
true /* aVideoOnly */);
|
true /* aVideoOnly */);
|
||||||
|
|
||||||
SetState<SeekingState>(Move(seekJob), EventVisibility::Suppressed)->Then(
|
SetState<SeekingState>(Move(seekJob), EventVisibility::Suppressed);
|
||||||
AbstractThread::MainThread(), __func__,
|
|
||||||
[start, info, hw](){ ReportRecoveryTelemetry(start, info, hw); },
|
|
||||||
[](){});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -2035,7 +2035,6 @@ MediaManager::GetUserMedia(nsPIDOMWindowInner* aWindow,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine permissions early (while we still have a stack).
|
// Determine permissions early (while we still have a stack).
|
||||||
|
|
||||||
nsIURI* docURI = aWindow->GetDocumentURI();
|
nsIURI* docURI = aWindow->GetDocumentURI();
|
||||||
if (!docURI) {
|
if (!docURI) {
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
|
|
@ -2045,22 +2044,9 @@ MediaManager::GetUserMedia(nsPIDOMWindowInner* aWindow,
|
||||||
Preferences::GetBool("media.navigator.permission.disabled", false);
|
Preferences::GetBool("media.navigator.permission.disabled", false);
|
||||||
bool isHTTPS = false;
|
bool isHTTPS = false;
|
||||||
docURI->SchemeIs("https", &isHTTPS);
|
docURI->SchemeIs("https", &isHTTPS);
|
||||||
nsCString host;
|
|
||||||
nsresult rv = docURI->GetHost(host);
|
|
||||||
// Test for some other schemes that ServiceWorker recognizes
|
|
||||||
bool isFile;
|
|
||||||
docURI->SchemeIs("file", &isFile);
|
|
||||||
bool isApp;
|
|
||||||
docURI->SchemeIs("app", &isApp);
|
|
||||||
// Same localhost check as ServiceWorkers uses
|
|
||||||
// (see IsOriginPotentiallyTrustworthy())
|
|
||||||
bool isLocalhost = NS_SUCCEEDED(rv) &&
|
|
||||||
(host.LowerCaseEqualsLiteral("localhost") ||
|
|
||||||
host.LowerCaseEqualsLiteral("127.0.0.1") ||
|
|
||||||
host.LowerCaseEqualsLiteral("::1"));
|
|
||||||
|
|
||||||
nsCString origin;
|
nsCString origin;
|
||||||
rv = nsPrincipal::GetOriginForURI(docURI, origin);
|
nsresult rv = nsPrincipal::GetOriginForURI(docURI, origin);
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,6 @@
|
||||||
#include "mp4_demuxer/Index.h"
|
#include "mp4_demuxer/Index.h"
|
||||||
#include "nsPrintfCString.h"
|
#include "nsPrintfCString.h"
|
||||||
|
|
||||||
// Used for telemetry
|
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mp4_demuxer/AnnexB.h"
|
|
||||||
#include "mp4_demuxer/H264.h"
|
#include "mp4_demuxer/H264.h"
|
||||||
|
|
||||||
#include "nsAutoPtr.h"
|
#include "nsAutoPtr.h"
|
||||||
|
|
@ -72,23 +69,10 @@ private:
|
||||||
// Queued samples extracted by the demuxer, but not yet returned.
|
// Queued samples extracted by the demuxer, but not yet returned.
|
||||||
RefPtr<MediaRawData> mQueuedSample;
|
RefPtr<MediaRawData> mQueuedSample;
|
||||||
bool mNeedReIndex;
|
bool mNeedReIndex;
|
||||||
bool mNeedSPSForTelemetry;
|
|
||||||
bool mIsH264 = false;
|
bool mIsH264 = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Returns true if no SPS was found and search for it should continue.
|
|
||||||
bool
|
|
||||||
AccumulateSPSTelemetry(const MediaByteBuffer* aExtradata)
|
|
||||||
{
|
|
||||||
// XXX: Do we still need this without telemetry?
|
|
||||||
mp4_demuxer::SPSData spsdata;
|
|
||||||
if (mp4_demuxer::H264::DecodeSPSFromExtraData(aExtradata, spsdata)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
MP4Demuxer::MP4Demuxer(MediaResource* aResource)
|
MP4Demuxer::MP4Demuxer(MediaResource* aResource)
|
||||||
: mResource(aResource)
|
: mResource(aResource)
|
||||||
, mStream(new mp4_demuxer::ResourceStream(aResource))
|
, mStream(new mp4_demuxer::ResourceStream(aResource))
|
||||||
|
|
@ -219,25 +203,10 @@ MP4TrackDemuxer::MP4TrackDemuxer(MP4Demuxer* aParent,
|
||||||
EnsureUpToDateIndex(); // Force update of index
|
EnsureUpToDateIndex(); // Force update of index
|
||||||
|
|
||||||
VideoInfo* videoInfo = mInfo->GetAsVideoInfo();
|
VideoInfo* videoInfo = mInfo->GetAsVideoInfo();
|
||||||
// Collect telemetry from h264 AVCC SPS.
|
|
||||||
if (videoInfo &&
|
if (videoInfo &&
|
||||||
(mInfo->mMimeType.EqualsLiteral("video/mp4") ||
|
(mInfo->mMimeType.EqualsLiteral("video/mp4") ||
|
||||||
mInfo->mMimeType.EqualsLiteral("video/avc"))) {
|
mInfo->mMimeType.EqualsLiteral("video/avc"))) {
|
||||||
mIsH264 = true;
|
mIsH264 = true;
|
||||||
RefPtr<MediaByteBuffer> extraData = videoInfo->mExtraData;
|
|
||||||
mNeedSPSForTelemetry = AccumulateSPSTelemetry(extraData);
|
|
||||||
mp4_demuxer::SPSData spsdata;
|
|
||||||
if (mp4_demuxer::H264::DecodeSPSFromExtraData(extraData, spsdata) &&
|
|
||||||
spsdata.pic_width > 0 && spsdata.pic_height > 0 &&
|
|
||||||
mp4_demuxer::H264::EnsureSPSIsSane(spsdata)) {
|
|
||||||
videoInfo->mImage.width = spsdata.pic_width;
|
|
||||||
videoInfo->mImage.height = spsdata.pic_height;
|
|
||||||
videoInfo->mDisplay.width = spsdata.display_width;
|
|
||||||
videoInfo->mDisplay.height = spsdata.display_height;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// No SPS to be found.
|
|
||||||
mNeedSPSForTelemetry = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -364,15 +333,6 @@ MP4TrackDemuxer::GetSamples(int32_t aNumSamples)
|
||||||
if (samples->mSamples.IsEmpty()) {
|
if (samples->mSamples.IsEmpty()) {
|
||||||
return SamplesPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_END_OF_STREAM, __func__);
|
return SamplesPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_END_OF_STREAM, __func__);
|
||||||
} else {
|
} else {
|
||||||
for (const auto& sample : samples->mSamples) {
|
|
||||||
// Collect telemetry from h264 Annex B SPS.
|
|
||||||
if (mNeedSPSForTelemetry && mp4_demuxer::AnnexB::HasSPS(sample)) {
|
|
||||||
RefPtr<MediaByteBuffer> extradata =
|
|
||||||
mp4_demuxer::AnnexB::ExtractExtraData(sample);
|
|
||||||
mNeedSPSForTelemetry = AccumulateSPSTelemetry(extradata);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mNextKeyframeTime.isNothing() ||
|
if (mNextKeyframeTime.isNothing() ||
|
||||||
samples->mSamples.LastElement()->mTime >= mNextKeyframeTime.value().ToMicroseconds()) {
|
samples->mSamples.LastElement()->mTime >= mNextKeyframeTime.value().ToMicroseconds()) {
|
||||||
SetNextKeyFrameTime();
|
SetNextKeyFrameTime();
|
||||||
|
|
|
||||||
|
|
@ -38,39 +38,6 @@ WMFMediaDataDecoder::Init()
|
||||||
return InitPromise::CreateAndResolve(mMFTManager->GetType(), __func__);
|
return InitPromise::CreateAndResolve(mMFTManager->GetType(), __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
// A single telemetry sample is reported for each MediaDataDecoder object
|
|
||||||
// that has detected error or produced output successfully.
|
|
||||||
static void
|
|
||||||
SendTelemetry(unsigned long hr)
|
|
||||||
{
|
|
||||||
// Collapse the error codes into a range of 0-0xff that can be viewed in
|
|
||||||
// telemetry histograms. For most MF_E_* errors, unique samples are used,
|
|
||||||
// retaining the least significant 7 or 8 bits. Other error codes are
|
|
||||||
// bucketed.
|
|
||||||
uint32_t sample;
|
|
||||||
if (SUCCEEDED(hr)) {
|
|
||||||
sample = 0;
|
|
||||||
} else if (hr < 0xc00d36b0) {
|
|
||||||
sample = 1; // low bucket
|
|
||||||
} else if (hr < 0xc00d3700) {
|
|
||||||
sample = hr & 0xffU; // MF_E_*
|
|
||||||
} else if (hr <= 0xc00d3705) {
|
|
||||||
sample = 0x80 + (hr & 0xfU); // more MF_E_*
|
|
||||||
} else if (hr < 0xc00d6d60) {
|
|
||||||
sample = 2; // mid bucket
|
|
||||||
} else if (hr <= 0xc00d6d78) {
|
|
||||||
sample = hr & 0xffU; // MF_E_TRANSFORM_*
|
|
||||||
} else {
|
|
||||||
sample = 3; // high bucket
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction(
|
|
||||||
[sample] {
|
|
||||||
/* Telemetry STUB */
|
|
||||||
});
|
|
||||||
NS_DispatchToMainThread(runnable);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMFMediaDataDecoder::Shutdown()
|
WMFMediaDataDecoder::Shutdown()
|
||||||
{
|
{
|
||||||
|
|
@ -90,9 +57,6 @@ WMFMediaDataDecoder::ProcessShutdown()
|
||||||
if (mMFTManager) {
|
if (mMFTManager) {
|
||||||
mMFTManager->Shutdown();
|
mMFTManager->Shutdown();
|
||||||
mMFTManager = nullptr;
|
mMFTManager = nullptr;
|
||||||
if (!mRecordedError && mHasSuccessfulOutput) {
|
|
||||||
SendTelemetry(S_OK);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,10 +88,6 @@ WMFMediaDataDecoder::ProcessDecode(MediaRawData* aSample)
|
||||||
NS_WARNING("MFTManager rejected sample");
|
NS_WARNING("MFTManager rejected sample");
|
||||||
mCallback->Error(MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
|
mCallback->Error(MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
|
||||||
RESULT_DETAIL("MFTManager::Input:%x", hr)));
|
RESULT_DETAIL("MFTManager::Input:%x", hr)));
|
||||||
if (!mRecordedError) {
|
|
||||||
SendTelemetry(hr);
|
|
||||||
mRecordedError = true;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,7 +103,6 @@ WMFMediaDataDecoder::ProcessOutput()
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
while (SUCCEEDED(hr = mMFTManager->Output(mLastStreamOffset, output)) &&
|
while (SUCCEEDED(hr = mMFTManager->Output(mLastStreamOffset, output)) &&
|
||||||
output) {
|
output) {
|
||||||
mHasSuccessfulOutput = true;
|
|
||||||
mCallback->Output(output);
|
mCallback->Output(output);
|
||||||
}
|
}
|
||||||
if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) {
|
if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) {
|
||||||
|
|
@ -152,10 +111,6 @@ WMFMediaDataDecoder::ProcessOutput()
|
||||||
NS_WARNING("WMFMediaDataDecoder failed to output data");
|
NS_WARNING("WMFMediaDataDecoder failed to output data");
|
||||||
mCallback->Error(MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
|
mCallback->Error(MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR,
|
||||||
RESULT_DETAIL("MFTManager::Output:%x", hr)));
|
RESULT_DETAIL("MFTManager::Output:%x", hr)));
|
||||||
if (!mRecordedError) {
|
|
||||||
SendTelemetry(hr);
|
|
||||||
mRecordedError = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -136,10 +136,6 @@ private:
|
||||||
Atomic<bool> mIsFlushing;
|
Atomic<bool> mIsFlushing;
|
||||||
|
|
||||||
bool mIsShutDown;
|
bool mIsShutDown;
|
||||||
|
|
||||||
// For telemetry
|
|
||||||
bool mHasSuccessfulOutput = false;
|
|
||||||
bool mRecordedError = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
#include "mozilla/OwningNonNull.h"
|
#include "mozilla/OwningNonNull.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Services.h"
|
#include "mozilla/Services.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/Unused.h"
|
#include "mozilla/Unused.h"
|
||||||
|
|
||||||
#include "mozilla/dom/AppNotificationServiceOptionsBinding.h"
|
#include "mozilla/dom/AppNotificationServiceOptionsBinding.h"
|
||||||
|
|
@ -656,172 +655,6 @@ NotificationPermissionRequest::GetTypes(nsIArray** aTypes)
|
||||||
aTypes);
|
aTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_ISUPPORTS(NotificationTelemetryService, nsIObserver)
|
|
||||||
|
|
||||||
NotificationTelemetryService::NotificationTelemetryService()
|
|
||||||
: mDNDRecorded(false)
|
|
||||||
{}
|
|
||||||
|
|
||||||
NotificationTelemetryService::~NotificationTelemetryService()
|
|
||||||
{
|
|
||||||
Unused << NS_WARN_IF(NS_FAILED(RemovePermissionChangeObserver()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* static */ already_AddRefed<NotificationTelemetryService>
|
|
||||||
NotificationTelemetryService::GetInstance()
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsISupports> telemetrySupports =
|
|
||||||
do_GetService(NOTIFICATIONTELEMETRYSERVICE_CONTRACTID);
|
|
||||||
if (!telemetrySupports) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
RefPtr<NotificationTelemetryService> telemetry =
|
|
||||||
static_cast<NotificationTelemetryService*>(telemetrySupports.get());
|
|
||||||
return telemetry.forget();
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
NotificationTelemetryService::Init()
|
|
||||||
{
|
|
||||||
nsresult rv = AddPermissionChangeObserver();
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
RecordPermissions();
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
NotificationTelemetryService::RemovePermissionChangeObserver()
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
|
||||||
if (!obs) {
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
return obs->RemoveObserver(this, "perm-changed");
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
NotificationTelemetryService::AddPermissionChangeObserver()
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
|
||||||
if (!obs) {
|
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
|
||||||
}
|
|
||||||
return obs->AddObserver(this, "perm-changed", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
NotificationTelemetryService::RecordPermissions()
|
|
||||||
{
|
|
||||||
if (!Telemetry::CanRecordBase() || !Telemetry::CanRecordExtended()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsIPermissionManager> permissionManager =
|
|
||||||
services::GetPermissionManager();
|
|
||||||
if (!permissionManager) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsISimpleEnumerator> enumerator;
|
|
||||||
nsresult rv = permissionManager->GetEnumerator(getter_AddRefs(enumerator));
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
bool hasMoreElements;
|
|
||||||
nsresult rv = enumerator->HasMoreElements(&hasMoreElements);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!hasMoreElements) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
nsCOMPtr<nsISupports> supportsPermission;
|
|
||||||
rv = enumerator->GetNext(getter_AddRefs(supportsPermission));
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
uint32_t capability;
|
|
||||||
if (!GetNotificationPermission(supportsPermission, &capability)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
NotificationTelemetryService::GetNotificationPermission(nsISupports* aSupports,
|
|
||||||
uint32_t* aCapability)
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIPermission> permission = do_QueryInterface(aSupports);
|
|
||||||
if (!permission) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
nsAutoCString type;
|
|
||||||
permission->GetType(type);
|
|
||||||
if (!type.Equals("desktop-notification")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
permission->GetCapability(aCapability);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
NotificationTelemetryService::RecordDNDSupported()
|
|
||||||
{
|
|
||||||
if (mDNDRecorded) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsIAlertsService> alertService =
|
|
||||||
do_GetService(NS_ALERTSERVICE_CONTRACTID);
|
|
||||||
if (!alertService) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsIAlertsDoNotDisturb> alertServiceDND =
|
|
||||||
do_QueryInterface(alertService);
|
|
||||||
if (!alertServiceDND) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mDNDRecorded = true;
|
|
||||||
bool isEnabled;
|
|
||||||
nsresult rv = alertServiceDND->GetManualDoNotDisturb(&isEnabled);
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
NotificationTelemetryService::RecordSender(nsIPrincipal* aPrincipal)
|
|
||||||
{
|
|
||||||
if (!Telemetry::CanRecordBase() || !Telemetry::CanRecordExtended() ||
|
|
||||||
!nsAlertsUtils::IsActionablePrincipal(aPrincipal)) {
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
nsAutoString origin;
|
|
||||||
nsresult rv = Notification::GetOrigin(aPrincipal, origin);
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
if (!mOrigins.Contains(origin)) {
|
|
||||||
mOrigins.PutEntry(origin);
|
|
||||||
}
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
|
||||||
NotificationTelemetryService::Observe(nsISupports* aSubject,
|
|
||||||
const char* aTopic,
|
|
||||||
const char16_t* aData)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Observer that the alert service calls to do common tasks and/or dispatch to the
|
// Observer that the alert service calls to do common tasks and/or dispatch to the
|
||||||
// specific observer for the context e.g. main thread, worker, or service worker.
|
// specific observer for the context e.g. main thread, worker, or service worker.
|
||||||
class NotificationObserver final : public nsIObserver
|
class NotificationObserver final : public nsIObserver
|
||||||
|
|
@ -1402,8 +1235,6 @@ NotificationObserver::Observe(nsISupports* aSubject, const char* aTopic,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
} else if (!strcmp("alertshow", aTopic) ||
|
} else if (!strcmp("alertshow", aTopic) ||
|
||||||
!strcmp("alertfinished", aTopic)) {
|
!strcmp("alertfinished", aTopic)) {
|
||||||
RefPtr<NotificationTelemetryService> telemetry =
|
|
||||||
NotificationTelemetryService::GetInstance();
|
|
||||||
Unused << NS_WARN_IF(NS_FAILED(AdjustPushQuota(aTopic)));
|
Unused << NS_WARN_IF(NS_FAILED(AdjustPushQuota(aTopic)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,6 @@
|
||||||
#include "nsTHashtable.h"
|
#include "nsTHashtable.h"
|
||||||
#include "nsWeakReference.h"
|
#include "nsWeakReference.h"
|
||||||
|
|
||||||
#define NOTIFICATIONTELEMETRYSERVICE_CONTRACTID \
|
|
||||||
"@mozilla.org/notificationTelemetryService;1"
|
|
||||||
|
|
||||||
class nsIPrincipal;
|
class nsIPrincipal;
|
||||||
class nsIVariant;
|
class nsIVariant;
|
||||||
|
|
||||||
|
|
@ -49,36 +46,6 @@ public:
|
||||||
Notify(workers::Status aStatus) override;
|
Notify(workers::Status aStatus) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Records telemetry probes at application startup, when a notification is
|
|
||||||
// shown, and when the notification permission is revoked for a site.
|
|
||||||
class NotificationTelemetryService final : public nsIObserver
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
NS_DECL_ISUPPORTS
|
|
||||||
NS_DECL_NSIOBSERVER
|
|
||||||
|
|
||||||
NotificationTelemetryService();
|
|
||||||
|
|
||||||
static already_AddRefed<NotificationTelemetryService> GetInstance();
|
|
||||||
|
|
||||||
nsresult Init();
|
|
||||||
void RecordDNDSupported();
|
|
||||||
void RecordPermissions();
|
|
||||||
nsresult RecordSender(nsIPrincipal* aPrincipal);
|
|
||||||
|
|
||||||
private:
|
|
||||||
virtual ~NotificationTelemetryService();
|
|
||||||
|
|
||||||
nsresult AddPermissionChangeObserver();
|
|
||||||
nsresult RemovePermissionChangeObserver();
|
|
||||||
|
|
||||||
bool GetNotificationPermission(nsISupports* aSupports,
|
|
||||||
uint32_t* aCapability);
|
|
||||||
|
|
||||||
bool mDNDRecorded;
|
|
||||||
nsTHashtable<nsStringHashKey> mOrigins;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Notifications on workers introduce some lifetime issues. The property we
|
* Notifications on workers introduce some lifetime issues. The property we
|
||||||
* are trying to satisfy is:
|
* are trying to satisfy is:
|
||||||
|
|
@ -143,7 +110,6 @@ class Notification : public DOMEventTargetHelper
|
||||||
friend class ServiceWorkerNotificationObserver;
|
friend class ServiceWorkerNotificationObserver;
|
||||||
friend class WorkerGetRunnable;
|
friend class WorkerGetRunnable;
|
||||||
friend class WorkerNotificationObserver;
|
friend class WorkerNotificationObserver;
|
||||||
friend class NotificationTelemetryService;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IMPL_EVENT_HANDLER(click)
|
IMPL_EVENT_HANDLER(click)
|
||||||
|
|
|
||||||
|
|
@ -92,11 +92,6 @@ mozilla::plugins::SetupBridge(uint32_t aPluginId,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
PluginModuleChromeParent* chromeParent = static_cast<PluginModuleChromeParent*>(plugin->GetLibrary());
|
PluginModuleChromeParent* chromeParent = static_cast<PluginModuleChromeParent*>(plugin->GetLibrary());
|
||||||
/*
|
|
||||||
* We can't accumulate BLOCKED_ON_PLUGIN_MODULE_INIT_MS until here because
|
|
||||||
* its histogram key is not available until *after* NP_Initialize.
|
|
||||||
*/
|
|
||||||
chromeParent->AccumulateModuleInitBlockedTime();
|
|
||||||
*rv = chromeParent->GetRunID(runID);
|
*rv = chromeParent->GetRunID(runID);
|
||||||
if (NS_FAILED(*rv)) {
|
if (NS_FAILED(*rv)) {
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -335,16 +330,13 @@ PluginModuleContentParent::LoadModule(uint32_t aPluginId,
|
||||||
dom::ContentChild* cp = dom::ContentChild::GetSingleton();
|
dom::ContentChild* cp = dom::ContentChild::GetSingleton();
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
uint32_t runID;
|
uint32_t runID;
|
||||||
TimeStamp sendLoadPluginStart = TimeStamp::Now();
|
|
||||||
if (!cp->SendLoadPlugin(aPluginId, &rv, &runID) ||
|
if (!cp->SendLoadPlugin(aPluginId, &rv, &runID) ||
|
||||||
NS_FAILED(rv)) {
|
NS_FAILED(rv)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
TimeStamp sendLoadPluginEnd = TimeStamp::Now();
|
|
||||||
|
|
||||||
PluginModuleContentParent* parent = mapping->GetModule();
|
PluginModuleContentParent* parent = mapping->GetModule();
|
||||||
MOZ_ASSERT(parent);
|
MOZ_ASSERT(parent);
|
||||||
parent->mTimeBlocked += (sendLoadPluginEnd - sendLoadPluginStart);
|
|
||||||
|
|
||||||
if (!mapping->IsChannelOpened()) {
|
if (!mapping->IsChannelOpened()) {
|
||||||
// mapping is linked into PluginModuleMapping::sModuleListHead and is
|
// mapping is linked into PluginModuleMapping::sModuleListHead and is
|
||||||
|
|
@ -440,7 +432,6 @@ PluginModuleChromeParent::LoadModule(const char* aFilePath, uint32_t aPluginId,
|
||||||
aPluginTag->mSupportsAsyncInit));
|
aPluginTag->mSupportsAsyncInit));
|
||||||
UniquePtr<LaunchCompleteTask> onLaunchedRunnable(new LaunchedTask(parent));
|
UniquePtr<LaunchCompleteTask> onLaunchedRunnable(new LaunchedTask(parent));
|
||||||
parent->mSubprocess->SetCallRunnableImmediately(!parent->mIsStartingAsync);
|
parent->mSubprocess->SetCallRunnableImmediately(!parent->mIsStartingAsync);
|
||||||
TimeStamp launchStart = TimeStamp::Now();
|
|
||||||
bool launched = parent->mSubprocess->Launch(Move(onLaunchedRunnable),
|
bool launched = parent->mSubprocess->Launch(Move(onLaunchedRunnable),
|
||||||
aPluginTag->mSandboxLevel);
|
aPluginTag->mSandboxLevel);
|
||||||
if (!launched) {
|
if (!launched) {
|
||||||
|
|
@ -459,8 +450,6 @@ PluginModuleChromeParent::LoadModule(const char* aFilePath, uint32_t aPluginId,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TimeStamp launchEnd = TimeStamp::Now();
|
|
||||||
parent->mTimeBlocked = (launchEnd - launchStart);
|
|
||||||
return parent.forget();
|
return parent.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1758,15 +1747,12 @@ PluginModuleChromeParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs*
|
||||||
PluginSettings settings;
|
PluginSettings settings;
|
||||||
GetSettings(&settings);
|
GetSettings(&settings);
|
||||||
|
|
||||||
TimeStamp callNpInitStart = TimeStamp::Now();
|
|
||||||
// Asynchronous case
|
// Asynchronous case
|
||||||
if (mIsStartingAsync) {
|
if (mIsStartingAsync) {
|
||||||
if (!SendAsyncNP_Initialize(settings)) {
|
if (!SendAsyncNP_Initialize(settings)) {
|
||||||
Close();
|
Close();
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
TimeStamp callNpInitEnd = TimeStamp::Now();
|
|
||||||
mTimeBlocked += (callNpInitEnd - callNpInitStart);
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1779,8 +1765,6 @@ PluginModuleChromeParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs*
|
||||||
Close();
|
Close();
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
TimeStamp callNpInitEnd = TimeStamp::Now();
|
|
||||||
mTimeBlocked += (callNpInitEnd - callNpInitStart);
|
|
||||||
|
|
||||||
RecvNP_InitializeResult(*error);
|
RecvNP_InitializeResult(*error);
|
||||||
|
|
||||||
|
|
@ -1882,13 +1866,10 @@ PluginModuleChromeParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error)
|
||||||
PluginSettings settings;
|
PluginSettings settings;
|
||||||
GetSettings(&settings);
|
GetSettings(&settings);
|
||||||
|
|
||||||
TimeStamp callNpInitStart = TimeStamp::Now();
|
|
||||||
if (mIsStartingAsync) {
|
if (mIsStartingAsync) {
|
||||||
if (!SendAsyncNP_Initialize(settings)) {
|
if (!SendAsyncNP_Initialize(settings)) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
TimeStamp callNpInitEnd = TimeStamp::Now();
|
|
||||||
mTimeBlocked += (callNpInitEnd - callNpInitStart);
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1896,8 +1877,6 @@ PluginModuleChromeParent::NP_Initialize(NPNetscapeFuncs* bFuncs, NPError* error)
|
||||||
Close();
|
Close();
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
}
|
}
|
||||||
TimeStamp callNpInitEnd = TimeStamp::Now();
|
|
||||||
mTimeBlocked += (callNpInitEnd - callNpInitStart);
|
|
||||||
RecvNP_InitializeResult(*error);
|
RecvNP_InitializeResult(*error);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
@ -2194,14 +2173,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
|
||||||
PluginModuleParent::AccumulateModuleInitBlockedTime()
|
|
||||||
{
|
|
||||||
// XXX: mTimeBlocked can probably go if not used for anything besides
|
|
||||||
// telemetry.
|
|
||||||
mTimeBlocked = TimeDuration();
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
PluginModuleParent::NPP_NewInternal(NPMIMEType pluginType, NPP instance,
|
PluginModuleParent::NPP_NewInternal(NPMIMEType pluginType, NPP instance,
|
||||||
uint16_t mode,
|
uint16_t mode,
|
||||||
|
|
@ -2213,13 +2184,6 @@ PluginModuleParent::NPP_NewInternal(NPMIMEType pluginType, NPP instance,
|
||||||
if (mPluginName.IsEmpty()) {
|
if (mPluginName.IsEmpty()) {
|
||||||
GetPluginDetails();
|
GetPluginDetails();
|
||||||
InitQuirksModes(nsDependentCString(pluginType));
|
InitQuirksModes(nsDependentCString(pluginType));
|
||||||
/** mTimeBlocked measures the time that the main thread has been blocked
|
|
||||||
* on plugin module initialization. As implemented, this is the sum of
|
|
||||||
* plugin-container launch + toolhelp32 snapshot + NP_Initialize.
|
|
||||||
* We don't accumulate its value until here because the plugin info
|
|
||||||
* for its histogram key is not available until *after* NP_Initialize.
|
|
||||||
*/
|
|
||||||
AccumulateModuleInitBlockedTime();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCaseInsensitiveUTF8StringArrayComparator comparator;
|
nsCaseInsensitiveUTF8StringArrayComparator comparator;
|
||||||
|
|
|
||||||
|
|
@ -115,8 +115,6 @@ public:
|
||||||
return mPluginName + mPluginVersion;
|
return mPluginName + mPluginVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccumulateModuleInitBlockedTime();
|
|
||||||
|
|
||||||
virtual nsresult GetRunID(uint32_t* aRunID) override;
|
virtual nsresult GetRunID(uint32_t* aRunID) override;
|
||||||
virtual void SetHasLocalInstance() override {
|
virtual void SetHasLocalInstance() override {
|
||||||
mHadLocalInstance = true;
|
mHadLocalInstance = true;
|
||||||
|
|
@ -315,7 +313,6 @@ protected:
|
||||||
nsString mBrowserDumpID;
|
nsString mBrowserDumpID;
|
||||||
nsString mHangID;
|
nsString mHangID;
|
||||||
RefPtr<nsIObserver> mProfilerObserver;
|
RefPtr<nsIObserver> mProfilerObserver;
|
||||||
TimeDuration mTimeBlocked;
|
|
||||||
nsCString mPluginName;
|
nsCString mPluginName;
|
||||||
nsCString mPluginVersion;
|
nsCString mPluginVersion;
|
||||||
int32_t mSandboxLevel;
|
int32_t mSandboxLevel;
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@
|
||||||
#include "nsISiteSecurityService.h"
|
#include "nsISiteSecurityService.h"
|
||||||
|
|
||||||
#include "mozilla/Logging.h"
|
#include "mozilla/Logging.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/dom/ContentChild.h"
|
#include "mozilla/dom/ContentChild.h"
|
||||||
#include "mozilla/ipc/URIUtils.h"
|
#include "mozilla/ipc/URIUtils.h"
|
||||||
|
|
||||||
|
|
@ -814,17 +813,13 @@ nsMixedContentBlocker::ShouldLoad(bool aHadInsecureImageRedirect,
|
||||||
//
|
//
|
||||||
// We do not count requests aHadInsecureImageRedirect=true, since these are
|
// We do not count requests aHadInsecureImageRedirect=true, since these are
|
||||||
// just an artifact of the image caching system.
|
// just an artifact of the image caching system.
|
||||||
bool active = (classification == eMixedScript);
|
|
||||||
if (!aHadInsecureImageRedirect) {
|
if (!aHadInsecureImageRedirect) {
|
||||||
if (XRE_IsParentProcess()) {
|
if (!XRE_IsParentProcess()) {
|
||||||
AccumulateMixedContentHSTS(innerContentLocation, active);
|
|
||||||
} else {
|
|
||||||
// Ask the parent process to do the same call
|
// Ask the parent process to do the same call
|
||||||
mozilla::dom::ContentChild* cc = mozilla::dom::ContentChild::GetSingleton();
|
mozilla::dom::ContentChild* cc = mozilla::dom::ContentChild::GetSingleton();
|
||||||
if (cc) {
|
if (cc) {
|
||||||
mozilla::ipc::URIParams uri;
|
mozilla::ipc::URIParams uri;
|
||||||
SerializeURI(innerContentLocation, uri);
|
SerializeURI(innerContentLocation, uri);
|
||||||
cc->SendAccumulateMixedContentHSTS(uri, active);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -977,11 +972,3 @@ enum MixedContentHSTSState {
|
||||||
MCB_HSTS_ACTIVE_NO_HSTS = 2,
|
MCB_HSTS_ACTIVE_NO_HSTS = 2,
|
||||||
MCB_HSTS_ACTIVE_WITH_HSTS = 3
|
MCB_HSTS_ACTIVE_WITH_HSTS = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
// Record information on when HSTS would have made mixed content not mixed
|
|
||||||
// content (regardless of whether it was actually blocked)
|
|
||||||
void
|
|
||||||
nsMixedContentBlocker::AccumulateMixedContentHSTS(nsIURI* aURI, bool aActive)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
@ -61,9 +61,6 @@ public:
|
||||||
nsISupports* aExtra,
|
nsISupports* aExtra,
|
||||||
nsIPrincipal* aRequestPrincipal,
|
nsIPrincipal* aRequestPrincipal,
|
||||||
int16_t* aDecision);
|
int16_t* aDecision);
|
||||||
static void AccumulateMixedContentHSTS(nsIURI* aURI,
|
|
||||||
bool aActive);
|
|
||||||
|
|
||||||
|
|
||||||
static bool sBlockMixedScript;
|
static bool sBlockMixedScript;
|
||||||
static bool sBlockMixedDisplay;
|
static bool sBlockMixedDisplay;
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,6 @@ DOMStorageCache::DOMStorageCache(const nsACString* aOriginNoSuffix)
|
||||||
, mInitialized(false)
|
, mInitialized(false)
|
||||||
, mPersistent(false)
|
, mPersistent(false)
|
||||||
, mSessionOnlyDataSetActive(false)
|
, mSessionOnlyDataSetActive(false)
|
||||||
, mPreloadTelemetryRecorded(false)
|
|
||||||
{
|
{
|
||||||
MOZ_COUNT_CTOR(DOMStorageCache);
|
MOZ_COUNT_CTOR(DOMStorageCache);
|
||||||
}
|
}
|
||||||
|
|
@ -178,7 +177,7 @@ DOMStorageCache::DataSet(const DOMStorage* aStorage)
|
||||||
// Session only data set is demanded but not filled with
|
// Session only data set is demanded but not filled with
|
||||||
// current data set, copy to session only set now.
|
// current data set, copy to session only set now.
|
||||||
|
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_SESSIONONLY_PRELOAD_BLOCKING_MS);
|
WaitForPreload();
|
||||||
|
|
||||||
Data& defaultSet = mData[kDefaultSet];
|
Data& defaultSet = mData[kDefaultSet];
|
||||||
Data& sessionSet = mData[kSessionSet];
|
Data& sessionSet = mData[kSessionSet];
|
||||||
|
|
@ -298,46 +297,18 @@ DOMStorageCache::KeepAlive()
|
||||||
mKeepAliveTimer.swap(timer);
|
mKeepAliveTimer.swap(timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
// The AutoTimer provided by telemetry headers is only using static,
|
|
||||||
// i.e. compile time known ID, but here we know the ID only at run time.
|
|
||||||
// Hence a new class.
|
|
||||||
class TelemetryAutoTimer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit TelemetryAutoTimer(Telemetry::ID aId)
|
|
||||||
: id(aId), start(TimeStamp::Now()) {}
|
|
||||||
~TelemetryAutoTimer()
|
|
||||||
{ /* STUB */ }
|
|
||||||
private:
|
|
||||||
Telemetry::ID id;
|
|
||||||
const TimeStamp start;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DOMStorageCache::WaitForPreload(Telemetry::ID aTelemetryID)
|
DOMStorageCache::WaitForPreload()
|
||||||
{
|
{
|
||||||
if (!mPersistent) {
|
if (!mPersistent) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool loaded = mLoaded;
|
bool loaded = mLoaded;
|
||||||
|
|
||||||
// Telemetry of rates of pending preloads
|
|
||||||
if (!mPreloadTelemetryRecorded) {
|
|
||||||
mPreloadTelemetryRecorded = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (loaded) {
|
if (loaded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Measure which operation blocks and for how long
|
|
||||||
TelemetryAutoTimer timer(aTelemetryID);
|
|
||||||
|
|
||||||
// If preload already started (i.e. we got some first data, but not all)
|
// If preload already started (i.e. we got some first data, but not all)
|
||||||
// SyncPreload will just wait for it to finish rather then synchronously
|
// SyncPreload will just wait for it to finish rather then synchronously
|
||||||
// read from the database. It seems to me more optimal.
|
// read from the database. It seems to me more optimal.
|
||||||
|
|
@ -354,7 +325,7 @@ nsresult
|
||||||
DOMStorageCache::GetLength(const DOMStorage* aStorage, uint32_t* aRetval)
|
DOMStorageCache::GetLength(const DOMStorage* aStorage, uint32_t* aRetval)
|
||||||
{
|
{
|
||||||
if (Persist(aStorage)) {
|
if (Persist(aStorage)) {
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETLENGTH_BLOCKING_MS);
|
WaitForPreload();
|
||||||
if (NS_FAILED(mLoadResult)) {
|
if (NS_FAILED(mLoadResult)) {
|
||||||
return mLoadResult;
|
return mLoadResult;
|
||||||
}
|
}
|
||||||
|
|
@ -372,7 +343,7 @@ DOMStorageCache::GetKey(const DOMStorage* aStorage, uint32_t aIndex, nsAString&
|
||||||
// maybe we need to have a lazily populated key array here or
|
// maybe we need to have a lazily populated key array here or
|
||||||
// something?
|
// something?
|
||||||
if (Persist(aStorage)) {
|
if (Persist(aStorage)) {
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETKEY_BLOCKING_MS);
|
WaitForPreload();
|
||||||
if (NS_FAILED(mLoadResult)) {
|
if (NS_FAILED(mLoadResult)) {
|
||||||
return mLoadResult;
|
return mLoadResult;
|
||||||
}
|
}
|
||||||
|
|
@ -394,7 +365,7 @@ void
|
||||||
DOMStorageCache::GetKeys(const DOMStorage* aStorage, nsTArray<nsString>& aKeys)
|
DOMStorageCache::GetKeys(const DOMStorage* aStorage, nsTArray<nsString>& aKeys)
|
||||||
{
|
{
|
||||||
if (Persist(aStorage)) {
|
if (Persist(aStorage)) {
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETALLKEYS_BLOCKING_MS);
|
WaitForPreload();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NS_FAILED(mLoadResult)) {
|
if (NS_FAILED(mLoadResult)) {
|
||||||
|
|
@ -411,7 +382,7 @@ DOMStorageCache::GetItem(const DOMStorage* aStorage, const nsAString& aKey,
|
||||||
nsAString& aRetval)
|
nsAString& aRetval)
|
||||||
{
|
{
|
||||||
if (Persist(aStorage)) {
|
if (Persist(aStorage)) {
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_GETVALUE_BLOCKING_MS);
|
WaitForPreload();
|
||||||
if (NS_FAILED(mLoadResult)) {
|
if (NS_FAILED(mLoadResult)) {
|
||||||
return mLoadResult;
|
return mLoadResult;
|
||||||
}
|
}
|
||||||
|
|
@ -436,7 +407,7 @@ DOMStorageCache::SetItem(const DOMStorage* aStorage, const nsAString& aKey,
|
||||||
int64_t delta = 0;
|
int64_t delta = 0;
|
||||||
|
|
||||||
if (Persist(aStorage)) {
|
if (Persist(aStorage)) {
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_SETVALUE_BLOCKING_MS);
|
WaitForPreload();
|
||||||
if (NS_FAILED(mLoadResult)) {
|
if (NS_FAILED(mLoadResult)) {
|
||||||
return mLoadResult;
|
return mLoadResult;
|
||||||
}
|
}
|
||||||
|
|
@ -485,7 +456,7 @@ DOMStorageCache::RemoveItem(const DOMStorage* aStorage, const nsAString& aKey,
|
||||||
nsString& aOld)
|
nsString& aOld)
|
||||||
{
|
{
|
||||||
if (Persist(aStorage)) {
|
if (Persist(aStorage)) {
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_REMOVEKEY_BLOCKING_MS);
|
WaitForPreload();
|
||||||
if (NS_FAILED(mLoadResult)) {
|
if (NS_FAILED(mLoadResult)) {
|
||||||
return mLoadResult;
|
return mLoadResult;
|
||||||
}
|
}
|
||||||
|
|
@ -524,9 +495,8 @@ DOMStorageCache::Clear(const DOMStorage* aStorage)
|
||||||
// We need to preload all data (know the size) before we can proceeed
|
// We need to preload all data (know the size) before we can proceeed
|
||||||
// to correctly decrease cached usage number.
|
// to correctly decrease cached usage number.
|
||||||
// XXX as in case of unload, this is not technically needed now, but
|
// XXX as in case of unload, this is not technically needed now, but
|
||||||
// after super-scope quota introduction we have to do this. Get telemetry
|
// after super-scope quota introduction we have to do this.
|
||||||
// right now.
|
WaitForPreload();
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_CLEAR_BLOCKING_MS);
|
|
||||||
if (NS_FAILED(mLoadResult)) {
|
if (NS_FAILED(mLoadResult)) {
|
||||||
// When we failed to load data from the database, force delete of the
|
// When we failed to load data from the database, force delete of the
|
||||||
// scope data and make use of the storage possible again.
|
// scope data and make use of the storage possible again.
|
||||||
|
|
@ -596,9 +566,8 @@ DOMStorageCache::UnloadItems(uint32_t aUnloadFlags)
|
||||||
// Must wait for preload to pass correct usage to ProcessUsageDelta
|
// Must wait for preload to pass correct usage to ProcessUsageDelta
|
||||||
// XXX this is not technically needed right now since there is just
|
// XXX this is not technically needed right now since there is just
|
||||||
// per-origin isolated quota handling, but when we introduce super-
|
// per-origin isolated quota handling, but when we introduce super-
|
||||||
// -scope quotas, we have to do this. Better to start getting
|
// -scope quotas, we have to do this.
|
||||||
// telemetry right now.
|
WaitForPreload();
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_UNLOAD_BLOCKING_MS);
|
|
||||||
|
|
||||||
mData[kDefaultSet].mKeys.Clear();
|
mData[kDefaultSet].mKeys.Clear();
|
||||||
ProcessUsageDelta(kDefaultSet, -mData[kDefaultSet].mOriginQuotaUsage);
|
ProcessUsageDelta(kDefaultSet, -mData[kDefaultSet].mOriginQuotaUsage);
|
||||||
|
|
@ -617,7 +586,7 @@ DOMStorageCache::UnloadItems(uint32_t aUnloadFlags)
|
||||||
|
|
||||||
#ifdef DOM_STORAGE_TESTS
|
#ifdef DOM_STORAGE_TESTS
|
||||||
if (aUnloadFlags & kTestReload) {
|
if (aUnloadFlags & kTestReload) {
|
||||||
WaitForPreload(Telemetry::LOCALDOMSTORAGE_UNLOAD_BLOCKING_MS);
|
WaitForPreload();
|
||||||
|
|
||||||
mData[kDefaultSet].mKeys.Clear();
|
mData[kDefaultSet].mKeys.Clear();
|
||||||
mLoaded = false; // This is only used in testing code
|
mLoaded = false; // This is only used in testing code
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@
|
||||||
#include "nsDataHashtable.h"
|
#include "nsDataHashtable.h"
|
||||||
#include "nsHashKeys.h"
|
#include "nsHashKeys.h"
|
||||||
#include "mozilla/Monitor.h"
|
#include "mozilla/Monitor.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/Atomics.h"
|
#include "mozilla/Atomics.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
|
|
@ -168,7 +167,7 @@ private:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Synchronously blocks until the cache is fully loaded from the database
|
// Synchronously blocks until the cache is fully loaded from the database
|
||||||
void WaitForPreload(mozilla::Telemetry::ID aTelemetryID);
|
void WaitForPreload();
|
||||||
|
|
||||||
// Helper to get one of the 3 data sets (regular, private, session)
|
// Helper to get one of the 3 data sets (regular, private, session)
|
||||||
Data& DataSet(const DOMStorage* aStorage);
|
Data& DataSet(const DOMStorage* aStorage);
|
||||||
|
|
@ -241,9 +240,6 @@ private:
|
||||||
// Drops back to false when session-only data are cleared from chrome.
|
// Drops back to false when session-only data are cleared from chrome.
|
||||||
bool mSessionOnlyDataSetActive : 1;
|
bool mSessionOnlyDataSetActive : 1;
|
||||||
|
|
||||||
// Whether we have already captured state of the cache preload on our first access.
|
|
||||||
bool mPreloadTelemetryRecorded : 1;
|
|
||||||
|
|
||||||
// DOMStorageDBThread on the parent or single process,
|
// DOMStorageDBThread on the parent or single process,
|
||||||
// DOMStorageDBChild on the child process.
|
// DOMStorageDBChild on the child process.
|
||||||
static DOMStorageDBBridge* sDatabase;
|
static DOMStorageDBBridge* sDatabase;
|
||||||
|
|
|
||||||
|
|
@ -1530,7 +1530,6 @@ RuntimeService::RegisterWorker(WorkerPrivate* aWorkerPrivate)
|
||||||
|
|
||||||
const bool isServiceWorker = aWorkerPrivate->IsServiceWorker();
|
const bool isServiceWorker = aWorkerPrivate->IsServiceWorker();
|
||||||
const bool isSharedWorker = aWorkerPrivate->IsSharedWorker();
|
const bool isSharedWorker = aWorkerPrivate->IsSharedWorker();
|
||||||
const bool isDedicatedWorker = aWorkerPrivate->IsDedicatedWorker();
|
|
||||||
if (isServiceWorker) {
|
if (isServiceWorker) {
|
||||||
AssertIsOnMainThread();
|
AssertIsOnMainThread();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@
|
||||||
#include "mozilla/net/NeckoMessageUtils.h"
|
#include "mozilla/net/NeckoMessageUtils.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "nsReadLine.h"
|
#include "nsReadLine.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "nsIConsoleService.h"
|
#include "nsIConsoleService.h"
|
||||||
#include "nsINavHistoryService.h"
|
#include "nsINavHistoryService.h"
|
||||||
#include "nsToolkitCompsCID.h"
|
#include "nsToolkitCompsCID.h"
|
||||||
|
|
@ -1167,21 +1166,7 @@ nsPermissionManager::InitDB(bool aRemoveFile)
|
||||||
mDBConn->TableExists(NS_LITERAL_CSTRING("moz_perms"), &permsTableExists);
|
mDBConn->TableExists(NS_LITERAL_CSTRING("moz_perms"), &permsTableExists);
|
||||||
if (permsTableExists) {
|
if (permsTableExists) {
|
||||||
// The user already had a moz_perms table, and we are performing a
|
// The user already had a moz_perms table, and we are performing a
|
||||||
// re-migration. We count the rows in the old table for telemetry,
|
// re-migration.
|
||||||
// and then back up their old database as moz_perms_v6
|
|
||||||
|
|
||||||
nsCOMPtr<mozIStorageStatement> countStmt;
|
|
||||||
rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING("SELECT COUNT(*) FROM moz_perms"),
|
|
||||||
getter_AddRefs(countStmt));
|
|
||||||
bool hasResult = false;
|
|
||||||
if (NS_SUCCEEDED(rv) &&
|
|
||||||
NS_SUCCEEDED(countStmt->ExecuteStep(&hasResult)) &&
|
|
||||||
hasResult) {
|
|
||||||
// Telemetry STUB (count rows and report)
|
|
||||||
} else {
|
|
||||||
NS_WARNING("Could not count the rows in moz_perms");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Back up the old moz_perms database as moz_perms_v6 before we
|
// Back up the old moz_perms database as moz_perms_v6 before we
|
||||||
// move the new table into its position
|
// move the new table into its position
|
||||||
rv = mDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
|
rv = mDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
|
||||||
|
|
|
||||||
|
|
@ -125,20 +125,6 @@ GPUChild::RecvNotifyUiObservers(const nsCString& aTopic)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
GPUChild::RecvAccumulateChildHistogram(InfallibleTArray<Accumulation>&& aAccumulations)
|
|
||||||
{
|
|
||||||
/* Telemetry STUB */
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
GPUChild::RecvAccumulateChildKeyedHistogram(InfallibleTArray<KeyedAccumulation>&& aAccumulations)
|
|
||||||
{
|
|
||||||
/* Telemetry STUB */
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
GPUChild::RecvNotifyDeviceReset()
|
GPUChild::RecvNotifyDeviceReset()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,6 @@ public:
|
||||||
// PGPUChild overrides.
|
// PGPUChild overrides.
|
||||||
bool RecvInitComplete(const GPUDeviceData& aData) override;
|
bool RecvInitComplete(const GPUDeviceData& aData) override;
|
||||||
bool RecvReportCheckerboard(const uint32_t& aSeverity, const nsCString& aLog) override;
|
bool RecvReportCheckerboard(const uint32_t& aSeverity, const nsCString& aLog) override;
|
||||||
bool RecvAccumulateChildHistogram(InfallibleTArray<Accumulation>&& aAccumulations) override;
|
|
||||||
bool RecvAccumulateChildKeyedHistogram(InfallibleTArray<KeyedAccumulation>&& aAccumulations) override;
|
|
||||||
void ActorDestroy(ActorDestroyReason aWhy) override;
|
void ActorDestroy(ActorDestroyReason aWhy) override;
|
||||||
bool RecvGraphicsError(const nsCString& aError) override;
|
bool RecvGraphicsError(const nsCString& aError) override;
|
||||||
bool RecvNotifyUiObservers(const nsCString& aTopic) override;
|
bool RecvNotifyUiObservers(const nsCString& aTopic) override;
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,6 @@ using base::ProcessId from "base/process.h";
|
||||||
using mozilla::TimeDuration from "mozilla/TimeStamp.h";
|
using mozilla::TimeDuration from "mozilla/TimeStamp.h";
|
||||||
using mozilla::CSSToLayoutDeviceScale from "Units.h";
|
using mozilla::CSSToLayoutDeviceScale from "Units.h";
|
||||||
using mozilla::gfx::IntSize from "mozilla/gfx/2D.h";
|
using mozilla::gfx::IntSize from "mozilla/gfx/2D.h";
|
||||||
using mozilla::Telemetry::Accumulation from "mozilla/TelemetryComms.h";
|
|
||||||
using mozilla::Telemetry::KeyedAccumulation from "mozilla/TelemetryComms.h";
|
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
|
|
@ -90,10 +88,6 @@ child:
|
||||||
// observer service.
|
// observer service.
|
||||||
async NotifyUiObservers(nsCString aTopic);
|
async NotifyUiObservers(nsCString aTopic);
|
||||||
|
|
||||||
// Messages for reporting telemetry to the UI process.
|
|
||||||
async AccumulateChildHistogram(Accumulation[] accumulations);
|
|
||||||
async AccumulateChildKeyedHistogram(KeyedAccumulation[] accumulations);
|
|
||||||
|
|
||||||
async NotifyDeviceReset();
|
async NotifyDeviceReset();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@
|
||||||
#include "mozilla/ReentrantMonitor.h" // for ReentrantMonitorAutoEnter, etc
|
#include "mozilla/ReentrantMonitor.h" // for ReentrantMonitorAutoEnter, etc
|
||||||
#include "mozilla/RefPtr.h" // for RefPtr
|
#include "mozilla/RefPtr.h" // for RefPtr
|
||||||
#include "mozilla/StaticPtr.h" // for StaticAutoPtr
|
#include "mozilla/StaticPtr.h" // for StaticAutoPtr
|
||||||
#include "mozilla/Telemetry.h" // for Telemetry
|
|
||||||
#include "mozilla/TimeStamp.h" // for TimeDuration, TimeStamp
|
#include "mozilla/TimeStamp.h" // for TimeDuration, TimeStamp
|
||||||
#include "mozilla/dom/CheckerboardReportService.h" // for CheckerboardEventStorage
|
#include "mozilla/dom/CheckerboardReportService.h" // for CheckerboardEventStorage
|
||||||
// note: CheckerboardReportService.h actually lives in gfx/layers/apz/util/
|
// note: CheckerboardReportService.h actually lives in gfx/layers/apz/util/
|
||||||
|
|
@ -1686,25 +1685,6 @@ void AsyncPanZoomController::DoDelayedRequestContentRepaint()
|
||||||
mPinchPaintTimerSet = false;
|
mPinchPaintTimerSet = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ScrollInputMethod
|
|
||||||
ScrollInputMethodForWheelDeltaType(ScrollWheelInput::ScrollDeltaType aDeltaType)
|
|
||||||
{
|
|
||||||
switch (aDeltaType) {
|
|
||||||
case ScrollWheelInput::SCROLLDELTA_LINE: {
|
|
||||||
return ScrollInputMethod::ApzWheelLine;
|
|
||||||
}
|
|
||||||
case ScrollWheelInput::SCROLLDELTA_PAGE: {
|
|
||||||
return ScrollInputMethod::ApzWheelPage;
|
|
||||||
}
|
|
||||||
case ScrollWheelInput::SCROLLDELTA_PIXEL: {
|
|
||||||
return ScrollInputMethod::ApzWheelPixel;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
MOZ_ASSERT_UNREACHABLE("unexpected scroll delta type");
|
|
||||||
return ScrollInputMethod::ApzWheelLine;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nsEventStatus AsyncPanZoomController::OnScrollWheel(const ScrollWheelInput& aEvent)
|
nsEventStatus AsyncPanZoomController::OnScrollWheel(const ScrollWheelInput& aEvent)
|
||||||
{
|
{
|
||||||
ParentLayerPoint delta = GetScrollWheelDelta(aEvent);
|
ParentLayerPoint delta = GetScrollWheelDelta(aEvent);
|
||||||
|
|
@ -3229,11 +3209,10 @@ AsyncPanZoomController::ReportCheckerboard(const TimeStamp& aSampleTime)
|
||||||
mLastCheckerboardReport = aSampleTime;
|
mLastCheckerboardReport = aSampleTime;
|
||||||
|
|
||||||
bool recordTrace = gfxPrefs::APZRecordCheckerboarding();
|
bool recordTrace = gfxPrefs::APZRecordCheckerboarding();
|
||||||
bool forTelemetry = Telemetry::CanRecordExtended();
|
|
||||||
uint32_t magnitude = GetCheckerboardMagnitude();
|
uint32_t magnitude = GetCheckerboardMagnitude();
|
||||||
|
|
||||||
MutexAutoLock lock(mCheckerboardEventLock);
|
MutexAutoLock lock(mCheckerboardEventLock);
|
||||||
if (!mCheckerboardEvent && (recordTrace || forTelemetry)) {
|
if (!mCheckerboardEvent && recordTrace) {
|
||||||
mCheckerboardEvent = MakeUnique<CheckerboardEvent>(recordTrace);
|
mCheckerboardEvent = MakeUnique<CheckerboardEvent>(recordTrace);
|
||||||
}
|
}
|
||||||
mPotentialCheckerboardTracker.InTransform(IsTransformingState(mState));
|
mPotentialCheckerboardTracker.InTransform(IsTransformingState(mState));
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,6 @@
|
||||||
|
|
||||||
#include "PotentialCheckerboardDurationTracker.h"
|
#include "PotentialCheckerboardDurationTracker.h"
|
||||||
|
|
||||||
#include "mozilla/Telemetry.h" // for Telemetry
|
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace layers {
|
namespace layers {
|
||||||
|
|
||||||
|
|
@ -20,10 +18,6 @@ PotentialCheckerboardDurationTracker::PotentialCheckerboardDurationTracker()
|
||||||
void
|
void
|
||||||
PotentialCheckerboardDurationTracker::CheckerboardSeen()
|
PotentialCheckerboardDurationTracker::CheckerboardSeen()
|
||||||
{
|
{
|
||||||
// This might get called while mInCheckerboard is already true
|
|
||||||
if (!Tracking()) {
|
|
||||||
mCurrentPeriodStart = TimeStamp::Now();
|
|
||||||
}
|
|
||||||
mInCheckerboard = true;
|
mInCheckerboard = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -32,9 +26,6 @@ PotentialCheckerboardDurationTracker::CheckerboardDone()
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(Tracking());
|
MOZ_ASSERT(Tracking());
|
||||||
mInCheckerboard = false;
|
mInCheckerboard = false;
|
||||||
if (!Tracking()) {
|
|
||||||
/* Telemetry STUB */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -50,19 +41,10 @@ PotentialCheckerboardDurationTracker::InTransform(bool aInTransform)
|
||||||
// must be true (or we would have early-exited this function already).
|
// must be true (or we would have early-exited this function already).
|
||||||
// Therefore, we are starting a potential checkerboard period.
|
// Therefore, we are starting a potential checkerboard period.
|
||||||
mInTransform = aInTransform;
|
mInTransform = aInTransform;
|
||||||
mCurrentPeriodStart = TimeStamp::Now();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mInTransform = aInTransform;
|
mInTransform = aInTransform;
|
||||||
|
|
||||||
if (!Tracking()) {
|
|
||||||
// Tracking() must have been true at the start of this function, or we
|
|
||||||
// would have taken the other !Tracking branch above. If it's false now,
|
|
||||||
// it means we just stopped tracking, so we are ending a potential
|
|
||||||
// checkerboard period.
|
|
||||||
/* Telemetry STUB */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -50,8 +50,6 @@ private:
|
||||||
private:
|
private:
|
||||||
bool mInCheckerboard;
|
bool mInCheckerboard;
|
||||||
bool mInTransform;
|
bool mInTransform;
|
||||||
|
|
||||||
TimeStamp mCurrentPeriodStart;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace layers
|
} // namespace layers
|
||||||
|
|
|
||||||
|
|
@ -289,8 +289,6 @@ ClientLayerManager::EndTransactionInternal(DrawPaintedLayerCallback aCallback,
|
||||||
void* aCallbackData,
|
void* aCallbackData,
|
||||||
EndTransactionFlags)
|
EndTransactionFlags)
|
||||||
{
|
{
|
||||||
PaintTelemetry::AutoRecord record(PaintTelemetry::Metric::Rasterization);
|
|
||||||
|
|
||||||
PROFILER_LABEL("ClientLayerManager", "EndTransactionInternal",
|
PROFILER_LABEL("ClientLayerManager", "EndTransactionInternal",
|
||||||
js::ProfileEntry::Category::GRAPHICS);
|
js::ProfileEntry::Category::GRAPHICS);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,6 @@
|
||||||
#include "mozilla/layout/RenderFrameParent.h"
|
#include "mozilla/layout/RenderFrameParent.h"
|
||||||
#include "mozilla/media/MediaSystemResourceService.h" // for MediaSystemResourceService
|
#include "mozilla/media/MediaSystemResourceService.h" // for MediaSystemResourceService
|
||||||
#include "mozilla/mozalloc.h" // for operator new, etc
|
#include "mozilla/mozalloc.h" // for operator new, etc
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#ifdef MOZ_WIDGET_GTK
|
#ifdef MOZ_WIDGET_GTK
|
||||||
#include "basic/X11BasicCompositor.h" // for X11BasicCompositor
|
#include "basic/X11BasicCompositor.h" // for X11BasicCompositor
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -72,7 +71,6 @@
|
||||||
#include "mozilla/Hal.h"
|
#include "mozilla/Hal.h"
|
||||||
#include "mozilla/HalTypes.h"
|
#include "mozilla/HalTypes.h"
|
||||||
#include "mozilla/StaticPtr.h"
|
#include "mozilla/StaticPtr.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/VsyncDispatcher.h"
|
#include "mozilla/VsyncDispatcher.h"
|
||||||
#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
|
#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
|
||||||
#include "VsyncSource.h"
|
#include "VsyncSource.h"
|
||||||
|
|
|
||||||
|
|
@ -411,10 +411,6 @@ D3D11LayersCrashGuard::Initialize()
|
||||||
}
|
}
|
||||||
|
|
||||||
DriverCrashGuard::Initialize();
|
DriverCrashGuard::Initialize();
|
||||||
|
|
||||||
// If no telemetry states have been recorded, this will set the state to okay.
|
|
||||||
// Otherwise, it will have no effect.
|
|
||||||
RecordTelemetry(TelemetryState::Okay);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
@ -447,30 +443,21 @@ D3D11LayersCrashGuard::UpdateEnvironment()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
RecordTelemetry(TelemetryState::EnvironmentChanged);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
D3D11LayersCrashGuard::LogCrashRecovery()
|
D3D11LayersCrashGuard::LogCrashRecovery()
|
||||||
{
|
{
|
||||||
RecordTelemetry(TelemetryState::RecoveredFromCrash);
|
|
||||||
gfxCriticalNote << "D3D11 layers just crashed; D3D11 will be disabled.";
|
gfxCriticalNote << "D3D11 layers just crashed; D3D11 will be disabled.";
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
D3D11LayersCrashGuard::LogFeatureDisabled()
|
D3D11LayersCrashGuard::LogFeatureDisabled()
|
||||||
{
|
{
|
||||||
RecordTelemetry(TelemetryState::FeatureDisabled);
|
|
||||||
gfxCriticalNote << "D3D11 layers disabled due to a prior crash.";
|
gfxCriticalNote << "D3D11 layers disabled due to a prior crash.";
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
D3D11LayersCrashGuard::RecordTelemetry(TelemetryState aState)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
D3D9VideoCrashGuard::D3D9VideoCrashGuard(dom::ContentParent* aContentParent)
|
D3D9VideoCrashGuard::D3D9VideoCrashGuard(dom::ContentParent* aContentParent)
|
||||||
: DriverCrashGuard(CrashGuardType::D3D9Video, aContentParent)
|
: DriverCrashGuard(CrashGuardType::D3D9Video, aContentParent)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -66,15 +66,6 @@ public:
|
||||||
bool Crashed();
|
bool Crashed();
|
||||||
void NotifyCrashed();
|
void NotifyCrashed();
|
||||||
|
|
||||||
// These are the values reported to Telemetry (GRAPHICS_DRIVER_STARTUP_TEST).
|
|
||||||
// Values should not change; add new values to the end.
|
|
||||||
enum class TelemetryState {
|
|
||||||
Okay = 0,
|
|
||||||
EnvironmentChanged = 1,
|
|
||||||
RecoveredFromCrash = 2,
|
|
||||||
FeatureDisabled = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class Mode {
|
enum class Mode {
|
||||||
// Normal operation.
|
// Normal operation.
|
||||||
Normal,
|
Normal,
|
||||||
|
|
@ -136,9 +127,6 @@ class D3D11LayersCrashGuard final : public DriverCrashGuard
|
||||||
bool UpdateEnvironment() override;
|
bool UpdateEnvironment() override;
|
||||||
void LogCrashRecovery() override;
|
void LogCrashRecovery() override;
|
||||||
void LogFeatureDisabled() override;
|
void LogFeatureDisabled() override;
|
||||||
|
|
||||||
private:
|
|
||||||
void RecordTelemetry(TelemetryState aState);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class D3D9VideoCrashGuard final : public DriverCrashGuard
|
class D3D9VideoCrashGuard final : public DriverCrashGuard
|
||||||
|
|
|
||||||
|
|
@ -455,13 +455,11 @@ DeviceManagerDx::CreateContentDevice()
|
||||||
: D3D_DRIVER_TYPE_UNKNOWN;
|
: D3D_DRIVER_TYPE_UNKNOWN;
|
||||||
if (!CreateDevice(adapter, type, flags, hr, device)) {
|
if (!CreateDevice(adapter, type, flags, hr, device)) {
|
||||||
gfxCriticalNote << "Recovered from crash while creating a D3D11 content device";
|
gfxCriticalNote << "Recovered from crash while creating a D3D11 content device";
|
||||||
gfxWindowsPlatform::RecordContentDeviceFailure(TelemetryDeviceCode::Content);
|
|
||||||
return FeatureStatus::CrashedInHandler;
|
return FeatureStatus::CrashedInHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(hr) || !device) {
|
if (FAILED(hr) || !device) {
|
||||||
gfxCriticalNote << "Failed to create a D3D11 content device: " << hexa(hr);
|
gfxCriticalNote << "Failed to create a D3D11 content device: " << hexa(hr);
|
||||||
gfxWindowsPlatform::RecordContentDeviceFailure(TelemetryDeviceCode::Content);
|
|
||||||
return FeatureStatus::Failed;
|
return FeatureStatus::Failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@
|
||||||
#include "mozilla/MemoryReporting.h"
|
#include "mozilla/MemoryReporting.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Services.h"
|
#include "mozilla/Services.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "gfxMathTable.h"
|
#include "gfxMathTable.h"
|
||||||
#include "gfxSVGGlyphs.h"
|
#include "gfxSVGGlyphs.h"
|
||||||
#include "gfx2DGlue.h"
|
#include "gfx2DGlue.h"
|
||||||
|
|
@ -2573,8 +2572,6 @@ gfxFont::GetShapedWord(DrawTarget *aDrawTarget,
|
||||||
}
|
}
|
||||||
gfxShapedWord* sw = entry->mShapedWord.get();
|
gfxShapedWord* sw = entry->mShapedWord.get();
|
||||||
|
|
||||||
bool isContent = !mStyle.systemFont;
|
|
||||||
|
|
||||||
if (sw) {
|
if (sw) {
|
||||||
sw->ResetAge();
|
sw->ResetAge();
|
||||||
#ifndef RELEASE_OR_BETA
|
#ifndef RELEASE_OR_BETA
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
#include "mozilla/gfx/GPUProcessManager.h"
|
#include "mozilla/gfx/GPUProcessManager.h"
|
||||||
#include "mozilla/gfx/GraphicsMessages.h"
|
#include "mozilla/gfx/GraphicsMessages.h"
|
||||||
#include "mozilla/ClearOnShutdown.h"
|
#include "mozilla/ClearOnShutdown.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/TimeStamp.h"
|
#include "mozilla/TimeStamp.h"
|
||||||
#include "mozilla/Unused.h"
|
#include "mozilla/Unused.h"
|
||||||
|
|
||||||
|
|
@ -349,25 +348,6 @@ void CrashStatsLogForwarder::Log(const std::string& aString)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CrashTelemetryEvent : public Runnable
|
|
||||||
{
|
|
||||||
virtual ~CrashTelemetryEvent() {}
|
|
||||||
|
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
|
||||||
|
|
||||||
explicit CrashTelemetryEvent(uint32_t aReason) : mReason(aReason) {}
|
|
||||||
|
|
||||||
NS_IMETHOD Run() override {
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
uint32_t mReason;
|
|
||||||
};
|
|
||||||
|
|
||||||
NS_IMPL_ISUPPORTS_INHERITED0(CrashTelemetryEvent, Runnable);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CrashStatsLogForwarder::CrashAction(LogReason aReason)
|
CrashStatsLogForwarder::CrashAction(LogReason aReason)
|
||||||
{
|
{
|
||||||
|
|
@ -2435,13 +2415,6 @@ gfxPlatform::NotifyCompositorCreated(LayersBackend aBackend)
|
||||||
|
|
||||||
// Set the backend before we notify so it's available immediately.
|
// Set the backend before we notify so it's available immediately.
|
||||||
mCompositorBackend = aBackend;
|
mCompositorBackend = aBackend;
|
||||||
|
|
||||||
// Notify that we created a compositor, so telemetry can update.
|
|
||||||
NS_DispatchToMainThread(NS_NewRunnableFunction([] {
|
|
||||||
if (nsCOMPtr<nsIObserverService> obsvc = services::GetObserverService()) {
|
|
||||||
obsvc->NotifyObservers(nullptr, "compositor:created", nullptr);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@
|
||||||
#include "mozilla/Likely.h"
|
#include "mozilla/Likely.h"
|
||||||
#include "mozilla/MemoryReporting.h"
|
#include "mozilla/MemoryReporting.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/TimeStamp.h"
|
#include "mozilla/TimeStamp.h"
|
||||||
#include "mozilla/gfx/2D.h"
|
#include "mozilla/gfx/2D.h"
|
||||||
|
|
||||||
|
|
@ -322,7 +321,6 @@ gfxPlatformFontList::InitOtherFamilyNames()
|
||||||
mOtherFamilyNamesInitialized = true;
|
mOtherFamilyNamesInitialized = true;
|
||||||
}
|
}
|
||||||
TimeStamp end = TimeStamp::Now();
|
TimeStamp end = TimeStamp::Now();
|
||||||
|
|
||||||
if (LOG_FONTINIT_ENABLED()) {
|
if (LOG_FONTINIT_ENABLED()) {
|
||||||
TimeDuration elapsed = end - start;
|
TimeDuration elapsed = end - start;
|
||||||
LOG_FONTINIT(("(fontinit) InitOtherFamilyNames took %8.2f ms %s",
|
LOG_FONTINIT(("(fontinit) InitOtherFamilyNames took %8.2f ms %s",
|
||||||
|
|
@ -470,7 +468,7 @@ gfxPlatformFontList::GetFontList(nsIAtom *aLangGroup,
|
||||||
{
|
{
|
||||||
for (auto iter = mFontFamilies.Iter(); !iter.Done(); iter.Next()) {
|
for (auto iter = mFontFamilies.Iter(); !iter.Done(); iter.Next()) {
|
||||||
RefPtr<gfxFontFamily>& family = iter.Data();
|
RefPtr<gfxFontFamily>& family = iter.Data();
|
||||||
// use the first variation for now. This data should be the same
|
// use the first variation for now. This data should be the same
|
||||||
// for all the variations and should probably be moved up to
|
// for all the variations and should probably be moved up to
|
||||||
// the Family
|
// the Family
|
||||||
gfxFontStyle style;
|
gfxFontStyle style;
|
||||||
|
|
@ -578,12 +576,6 @@ gfxPlatformFontList::SystemFindFontForChar(uint32_t aCh, uint32_t aNextCh,
|
||||||
} else if (aCh == 0xFFFD && fontEntry && fallbackFamily) {
|
} else if (aCh == 0xFFFD && fontEntry && fallbackFamily) {
|
||||||
mReplacementCharFallbackFamily = fallbackFamily;
|
mReplacementCharFallbackFamily = fallbackFamily;
|
||||||
}
|
}
|
||||||
|
|
||||||
// track system fallback time
|
|
||||||
static bool first = true;
|
|
||||||
int32_t intElapsed = int32_t(first ? elapsed.ToMilliseconds() :
|
|
||||||
elapsed.ToMicroseconds());
|
|
||||||
first = false;
|
|
||||||
|
|
||||||
return fontEntry;
|
return fontEntry;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
#include "nsIGfxInfo.h"
|
#include "nsIGfxInfo.h"
|
||||||
#include "nsServiceManagerUtils.h"
|
#include "nsServiceManagerUtils.h"
|
||||||
#include "nsTArray.h"
|
#include "nsTArray.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "GeckoProfiler.h"
|
#include "GeckoProfiler.h"
|
||||||
|
|
||||||
#include "nsIWindowsRegKey.h"
|
#include "nsIWindowsRegKey.h"
|
||||||
|
|
@ -1480,12 +1479,6 @@ gfxWindowsPlatform::InitializeD3D11Config()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ void
|
|
||||||
gfxWindowsPlatform::RecordContentDeviceFailure(TelemetryDeviceCode aDevice)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gfxWindowsPlatform::InitializeDevices()
|
gfxWindowsPlatform::InitializeDevices()
|
||||||
{
|
{
|
||||||
|
|
@ -1523,18 +1516,9 @@ gfxWindowsPlatform::InitializeDevices()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool shouldUseD2D = gfxConfig::IsEnabled(Feature::DIRECT2D);
|
|
||||||
|
|
||||||
// First, initialize D3D11. If this succeeds we attempt to use Direct2D.
|
// First, initialize D3D11. If this succeeds we attempt to use Direct2D.
|
||||||
InitializeD3D11();
|
InitializeD3D11();
|
||||||
InitializeD2D();
|
InitializeD2D();
|
||||||
|
|
||||||
if (!gfxConfig::IsEnabled(Feature::DIRECT2D) &&
|
|
||||||
XRE_IsContentProcess() &&
|
|
||||||
shouldUseD2D)
|
|
||||||
{
|
|
||||||
RecordContentDeviceFailure(TelemetryDeviceCode::D2D1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -230,8 +230,6 @@ public:
|
||||||
}
|
}
|
||||||
bool SupportsPluginDirectDXGIDrawing();
|
bool SupportsPluginDirectDXGIDrawing();
|
||||||
|
|
||||||
static void RecordContentDeviceFailure(mozilla::gfx::TelemetryDeviceCode aDevice);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool AccelerateLayersByDefault() override {
|
bool AccelerateLayersByDefault() override {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -220,8 +220,6 @@ public:
|
||||||
virtual void SetHasError() = 0;
|
virtual void SetHasError() = 0;
|
||||||
|
|
||||||
virtual ImageURL* GetURI() = 0;
|
virtual ImageURL* GetURI() = 0;
|
||||||
|
|
||||||
virtual void ReportUseCounters() { }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ImageResource : public Image
|
class ImageResource : public Image
|
||||||
|
|
|
||||||
|
|
@ -1337,15 +1337,6 @@ VectorImage::PropagateUseCounters(nsIDocument* aParentDocument)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
VectorImage::ReportUseCounters()
|
|
||||||
{
|
|
||||||
nsIDocument* doc = mSVGDocumentWrapper->GetDocument();
|
|
||||||
if (doc) {
|
|
||||||
static_cast<nsDocument*>(doc)->ReportUseCounters();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nsIntSize
|
nsIntSize
|
||||||
VectorImage::OptimalImageSizeForDest(const gfxSize& aDest,
|
VectorImage::OptimalImageSizeForDest(const gfxSize& aDest,
|
||||||
uint32_t aWhichFrame,
|
uint32_t aWhichFrame,
|
||||||
|
|
|
||||||
|
|
@ -68,8 +68,6 @@ public:
|
||||||
void OnSVGDocumentLoaded();
|
void OnSVGDocumentLoaded();
|
||||||
void OnSVGDocumentError();
|
void OnSVGDocumentError();
|
||||||
|
|
||||||
virtual void ReportUseCounters() override;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit VectorImage(ImageURL* aURI = nullptr);
|
explicit VectorImage(ImageURL* aURI = nullptr);
|
||||||
virtual ~VectorImage();
|
virtual ~VectorImage();
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
#include "mozilla/Move.h"
|
#include "mozilla/Move.h"
|
||||||
#include "mozilla/SizePrintfMacros.h"
|
#include "mozilla/SizePrintfMacros.h"
|
||||||
#include "mozilla/Sprintf.h"
|
#include "mozilla/Sprintf.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/Logging.h"
|
#include "mozilla/Logging.h"
|
||||||
#include "nsAutoPtr.h"
|
#include "nsAutoPtr.h"
|
||||||
#include "nsDebug.h"
|
#include "nsDebug.h"
|
||||||
|
|
@ -116,8 +115,6 @@ static MessageChannel* gParentProcessBlocker;
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace ipc {
|
namespace ipc {
|
||||||
|
|
||||||
static const uint32_t kMinTelemetryMessageSize = 8192;
|
|
||||||
|
|
||||||
const int32_t MessageChannel::kNoTimeout = INT32_MIN;
|
const int32_t MessageChannel::kNoTimeout = INT32_MIN;
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
@ -1150,9 +1147,6 @@ MessageChannel::Send(Message* aMsg, Message* aReply)
|
||||||
|
|
||||||
IPC_LOG("Send seqno=%d, xid=%d", seqno, transaction);
|
IPC_LOG("Send seqno=%d, xid=%d", seqno, transaction);
|
||||||
|
|
||||||
// msg will be destroyed soon, but name() is not owned by msg.
|
|
||||||
const char* msgName = msg->name();
|
|
||||||
|
|
||||||
mLink->SendMessage(msg.forget());
|
mLink->SendMessage(msg.forget());
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
|
||||||
|
|
@ -6605,10 +6605,6 @@ SetStopwatchIsMonitoringJank(JSContext*, bool);
|
||||||
extern JS_PUBLIC_API(bool)
|
extern JS_PUBLIC_API(bool)
|
||||||
GetStopwatchIsMonitoringJank(JSContext*);
|
GetStopwatchIsMonitoringJank(JSContext*);
|
||||||
|
|
||||||
// Extract the CPU rescheduling data.
|
|
||||||
extern JS_PUBLIC_API(void)
|
|
||||||
GetPerfMonitoringTestCpuRescheduling(JSContext*, uint64_t* stayed, uint64_t* moved);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a number of microseconds to the time spent waiting on CPOWs
|
* Add a number of microseconds to the time spent waiting on CPOWs
|
||||||
|
|
|
||||||
|
|
@ -543,11 +543,6 @@ js::SetPreserveWrapperCallback(JSContext* cx, PreserveWrapperCallback callback)
|
||||||
cx->preserveWrapperCallback = callback;
|
cx->preserveWrapperCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* The below code is for temporary telemetry use. It can be removed when
|
|
||||||
* sufficient data has been harvested.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace js {
|
namespace js {
|
||||||
// Defined in vm/GlobalObject.cpp.
|
// Defined in vm/GlobalObject.cpp.
|
||||||
extern size_t sSetProtoCalled;
|
extern size_t sSetProtoCalled;
|
||||||
|
|
@ -643,12 +638,6 @@ js::StringToLinearStringSlow(JSContext* cx, JSString* str)
|
||||||
return str->ensureLinear(cx);
|
return str->ensureLinear(cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_FRIEND_API(void)
|
|
||||||
JS_SetAccumulateTelemetryCallback(JSContext* cx, JSAccumulateTelemetryDataCallback callback)
|
|
||||||
{
|
|
||||||
cx->setTelemetryCallback(cx, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
JS_FRIEND_API(JSObject*)
|
JS_FRIEND_API(JSObject*)
|
||||||
JS_CloneObject(JSContext* cx, HandleObject obj, HandleObject protoArg)
|
JS_CloneObject(JSContext* cx, HandleObject obj, HandleObject protoArg)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -142,9 +142,6 @@ enum {
|
||||||
typedef void
|
typedef void
|
||||||
(*JSAccumulateTelemetryDataCallback)(int id, uint32_t sample, const char* key);
|
(*JSAccumulateTelemetryDataCallback)(int id, uint32_t sample, const char* key);
|
||||||
|
|
||||||
extern JS_FRIEND_API(void)
|
|
||||||
JS_SetAccumulateTelemetryCallback(JSContext* cx, JSAccumulateTelemetryDataCallback callback);
|
|
||||||
|
|
||||||
extern JS_FRIEND_API(bool)
|
extern JS_FRIEND_API(bool)
|
||||||
JS_GetIsSecureContext(JSCompartment* compartment);
|
JS_GetIsSecureContext(JSCompartment* compartment);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -637,13 +637,6 @@ GetStopwatchIsMonitoringCPOW(JSContext* cx)
|
||||||
return cx->performanceMonitoring.isMonitoringCPOW();
|
return cx->performanceMonitoring.isMonitoringCPOW();
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(void)
|
|
||||||
GetPerfMonitoringTestCpuRescheduling(JSContext* cx, uint64_t* stayed, uint64_t* moved)
|
|
||||||
{
|
|
||||||
*stayed = cx->performanceMonitoring.testCpuRescheduling.stayed;
|
|
||||||
*moved = cx->performanceMonitoring.testCpuRescheduling.moved;
|
|
||||||
}
|
|
||||||
|
|
||||||
JS_PUBLIC_API(void)
|
JS_PUBLIC_API(void)
|
||||||
AddCPOWPerformanceDelta(JSContext* cx, uint64_t delta)
|
AddCPOWPerformanceDelta(JSContext* cx, uint64_t delta)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,6 @@ class AsyncFreeSnowWhite : public Runnable
|
||||||
public:
|
public:
|
||||||
NS_IMETHOD Run() override
|
NS_IMETHOD Run() override
|
||||||
{
|
{
|
||||||
TimeStamp start = TimeStamp::Now();
|
|
||||||
bool hadSnowWhiteObjects = nsCycleCollector_doDeferredDeletion();
|
bool hadSnowWhiteObjects = nsCycleCollector_doDeferredDeletion();
|
||||||
if (hadSnowWhiteObjects && !mContinuation) {
|
if (hadSnowWhiteObjects && !mContinuation) {
|
||||||
mContinuation = true;
|
mContinuation = true;
|
||||||
|
|
@ -1235,8 +1234,6 @@ XPCJSContext::InterruptCallback(JSContext* cx)
|
||||||
if (self->mSlowScriptCheckpoint.IsNull()) {
|
if (self->mSlowScriptCheckpoint.IsNull()) {
|
||||||
self->mSlowScriptCheckpoint = TimeStamp::NowLoRes();
|
self->mSlowScriptCheckpoint = TimeStamp::NowLoRes();
|
||||||
self->mSlowScriptSecondHalf = false;
|
self->mSlowScriptSecondHalf = false;
|
||||||
self->mSlowScriptActualWait = mozilla::TimeDuration();
|
|
||||||
self->mTimeoutAccumulated = false;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1258,8 +1255,6 @@ XPCJSContext::InterruptCallback(JSContext* cx)
|
||||||
if (limit == 0 || duration.ToSeconds() < limit / 2.0)
|
if (limit == 0 || duration.ToSeconds() < limit / 2.0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
self->mSlowScriptActualWait += duration;
|
|
||||||
|
|
||||||
// In order to guard against time changes or laptops going to sleep, we
|
// In order to guard against time changes or laptops going to sleep, we
|
||||||
// don't trigger the slow script warning until (limit/2) seconds have
|
// don't trigger the slow script warning until (limit/2) seconds have
|
||||||
// elapsed twice.
|
// elapsed twice.
|
||||||
|
|
@ -1311,12 +1306,6 @@ XPCJSContext::InterruptCallback(JSContext* cx)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Accumulate slow script invokation delay.
|
|
||||||
if (!chrome && !self->mTimeoutAccumulated) {
|
|
||||||
uint32_t delay = uint32_t(self->mSlowScriptActualWait.ToMilliseconds() - (limit * 1000.0));
|
|
||||||
self->mTimeoutAccumulated = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show the prompt to the user, and kill if requested.
|
// Show the prompt to the user, and kill if requested.
|
||||||
nsGlobalWindow::SlowScriptResponse response = win->ShowSlowScriptDialog();
|
nsGlobalWindow::SlowScriptResponse response = win->ShowSlowScriptDialog();
|
||||||
if (response == nsGlobalWindow::KillSlowScript) {
|
if (response == nsGlobalWindow::KillSlowScript) {
|
||||||
|
|
@ -2948,12 +2937,6 @@ JSSizeOfTab(JSObject* objArg, size_t* jsObjectsSize, size_t* jsStringsSize,
|
||||||
|
|
||||||
} // namespace xpc
|
} // namespace xpc
|
||||||
|
|
||||||
static void
|
|
||||||
AccumulateTelemetryCallback(int id, uint32_t sample, const char* key)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
CompartmentNameCallback(JSContext* cx, JSCompartment* comp,
|
CompartmentNameCallback(JSContext* cx, JSCompartment* comp,
|
||||||
char* buf, size_t bufsize)
|
char* buf, size_t bufsize)
|
||||||
|
|
@ -3113,7 +3096,6 @@ XPCJSContext::XPCJSContext()
|
||||||
mWatchdogManager(new WatchdogManager(this)),
|
mWatchdogManager(new WatchdogManager(this)),
|
||||||
mAsyncSnowWhiteFreer(new AsyncFreeSnowWhite()),
|
mAsyncSnowWhiteFreer(new AsyncFreeSnowWhite()),
|
||||||
mSlowScriptSecondHalf(false),
|
mSlowScriptSecondHalf(false),
|
||||||
mTimeoutAccumulated(false),
|
|
||||||
mPendingResult(NS_OK)
|
mPendingResult(NS_OK)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -3279,7 +3261,6 @@ XPCJSContext::Initialize()
|
||||||
JS_AddWeakPointerCompartmentCallback(cx, WeakPointerCompartmentCallback, this);
|
JS_AddWeakPointerCompartmentCallback(cx, WeakPointerCompartmentCallback, this);
|
||||||
JS_SetWrapObjectCallbacks(cx, &WrapObjectCallbacks);
|
JS_SetWrapObjectCallbacks(cx, &WrapObjectCallbacks);
|
||||||
js::SetPreserveWrapperCallback(cx, PreserveWrapper);
|
js::SetPreserveWrapperCallback(cx, PreserveWrapper);
|
||||||
JS_SetAccumulateTelemetryCallback(cx, AccumulateTelemetryCallback);
|
|
||||||
js::SetActivityCallback(cx, ActivityCallback, this);
|
js::SetActivityCallback(cx, ActivityCallback, this);
|
||||||
JS_AddInterruptCallback(cx, InterruptCallback);
|
JS_AddInterruptCallback(cx, InterruptCallback);
|
||||||
js::SetWindowProxyClass(cx, &OuterWindowProxyClass);
|
js::SetWindowProxyClass(cx, &OuterWindowProxyClass);
|
||||||
|
|
@ -3444,8 +3425,6 @@ XPCJSContext::BeforeProcessTask(bool aMightBlock)
|
||||||
// Start the slow script timer.
|
// Start the slow script timer.
|
||||||
mSlowScriptCheckpoint = mozilla::TimeStamp::NowLoRes();
|
mSlowScriptCheckpoint = mozilla::TimeStamp::NowLoRes();
|
||||||
mSlowScriptSecondHalf = false;
|
mSlowScriptSecondHalf = false;
|
||||||
mSlowScriptActualWait = mozilla::TimeDuration();
|
|
||||||
mTimeoutAccumulated = false;
|
|
||||||
|
|
||||||
// As we may be entering a nested event loop, we need to
|
// As we may be entering a nested event loop, we need to
|
||||||
// cancel any ongoing performance measurement.
|
// cancel any ongoing performance measurement.
|
||||||
|
|
|
||||||
|
|
@ -634,9 +634,6 @@ private:
|
||||||
// (whichever comes later). We use it to determine whether the interrupt
|
// (whichever comes later). We use it to determine whether the interrupt
|
||||||
// callback needs to do anything.
|
// callback needs to do anything.
|
||||||
mozilla::TimeStamp mSlowScriptCheckpoint;
|
mozilla::TimeStamp mSlowScriptCheckpoint;
|
||||||
// Accumulates total time we actually waited for telemetry
|
|
||||||
mozilla::TimeDuration mSlowScriptActualWait;
|
|
||||||
bool mTimeoutAccumulated;
|
|
||||||
|
|
||||||
// mPendingResult is used to implement Components.returnCode. Only really
|
// mPendingResult is used to implement Components.returnCode. Only really
|
||||||
// meaningful while calling through XPCWrappedJS.
|
// meaningful while calling through XPCWrappedJS.
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,6 @@
|
||||||
#include "mozilla/OperatorNewExtensions.h"
|
#include "mozilla/OperatorNewExtensions.h"
|
||||||
#include "mozilla/PendingAnimationTracker.h"
|
#include "mozilla/PendingAnimationTracker.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/UniquePtr.h"
|
#include "mozilla/UniquePtr.h"
|
||||||
#include "mozilla/Unused.h"
|
#include "mozilla/Unused.h"
|
||||||
#include "mozilla/gfx/gfxVars.h"
|
#include "mozilla/gfx/gfxVars.h"
|
||||||
|
|
@ -1857,7 +1856,6 @@ already_AddRefed<LayerManager> nsDisplayList::PaintRoot(nsDisplayListBuilder* aB
|
||||||
|
|
||||||
RefPtr<ContainerLayer> root;
|
RefPtr<ContainerLayer> root;
|
||||||
{
|
{
|
||||||
PaintTelemetry::AutoRecord record(PaintTelemetry::Metric::Layerization);
|
|
||||||
root = layerBuilder->
|
root = layerBuilder->
|
||||||
BuildContainerLayerFor(aBuilder, layerManager, frame, nullptr, this,
|
BuildContainerLayerFor(aBuilder, layerManager, frame, nullptr, this,
|
||||||
containerParameters, nullptr);
|
containerParameters, nullptr);
|
||||||
|
|
@ -7453,100 +7451,3 @@ nsDisplayFilter::PrintEffects(nsACString& aTo)
|
||||||
aTo += ")";
|
aTo += ")";
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
uint32_t PaintTelemetry::sPaintLevel = 0;
|
|
||||||
uint32_t PaintTelemetry::sMetricLevel = 0;
|
|
||||||
EnumeratedArray<PaintTelemetry::Metric,
|
|
||||||
PaintTelemetry::Metric::COUNT,
|
|
||||||
double> PaintTelemetry::sMetrics;
|
|
||||||
|
|
||||||
PaintTelemetry::AutoRecordPaint::AutoRecordPaint()
|
|
||||||
{
|
|
||||||
// Don't record nested paints.
|
|
||||||
if (sPaintLevel++ > 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset metrics for a new paint.
|
|
||||||
for (auto& metric : sMetrics) {
|
|
||||||
metric = 0.0;
|
|
||||||
}
|
|
||||||
mStart = TimeStamp::Now();
|
|
||||||
}
|
|
||||||
|
|
||||||
PaintTelemetry::AutoRecordPaint::~AutoRecordPaint()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(sPaintLevel != 0);
|
|
||||||
if (--sPaintLevel > 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we're in multi-process mode, don't include paint times for the parent
|
|
||||||
// process.
|
|
||||||
if (gfxVars::BrowserTabsRemoteAutostart() && XRE_IsParentProcess()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
double totalMs = (TimeStamp::Now() - mStart).ToMilliseconds();
|
|
||||||
|
|
||||||
// If the total time was >= 16ms, then it's likely we missed a frame due to
|
|
||||||
// painting. In this case we'll gather some detailed metrics below.
|
|
||||||
if (totalMs <= 16.0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto record = [=](const char* aKey, double aDurationMs) -> void {
|
|
||||||
MOZ_ASSERT(aDurationMs <= totalMs);
|
|
||||||
|
|
||||||
uint32_t amount = static_cast<int32_t>((aDurationMs / totalMs) * 100.0);
|
|
||||||
};
|
|
||||||
|
|
||||||
double dlMs = sMetrics[Metric::DisplayList];
|
|
||||||
double flbMs = sMetrics[Metric::Layerization];
|
|
||||||
double rMs = sMetrics[Metric::Rasterization];
|
|
||||||
|
|
||||||
// Record all permutations since aggregation makes it difficult to
|
|
||||||
// correlate. For example we can't derive "flb+r" from "dl" because we
|
|
||||||
// don't know the total time associated with a bucket entry. So we just
|
|
||||||
// play it safe and include everything. We can however derive "other" time
|
|
||||||
// from the final permutation.
|
|
||||||
record("dl", dlMs);
|
|
||||||
record("flb", flbMs);
|
|
||||||
record("r", rMs);
|
|
||||||
record("dl,flb", dlMs + flbMs);
|
|
||||||
record("dl,r", dlMs + rMs);
|
|
||||||
record("flb,r", flbMs + rMs);
|
|
||||||
record("dl,flb,r", dlMs + flbMs + rMs);
|
|
||||||
}
|
|
||||||
|
|
||||||
PaintTelemetry::AutoRecord::AutoRecord(Metric aMetric)
|
|
||||||
: mMetric(aMetric)
|
|
||||||
{
|
|
||||||
// Don't double-record anything nested.
|
|
||||||
if (sMetricLevel++ > 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't record inside nested paints, or outside of paints.
|
|
||||||
if (sPaintLevel != 1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mStart = TimeStamp::Now();
|
|
||||||
}
|
|
||||||
|
|
||||||
PaintTelemetry::AutoRecord::~AutoRecord()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(sMetricLevel != 0);
|
|
||||||
|
|
||||||
sMetricLevel--;
|
|
||||||
if (mStart.IsNull()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
sMetrics[mMetric] += (TimeStamp::Now() - mStart).ToMilliseconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace mozilla
|
|
||||||
|
|
|
||||||
|
|
@ -4508,43 +4508,4 @@ public:
|
||||||
mutable mozilla::Maybe<bool> mIsFrameSelected;
|
mutable mozilla::Maybe<bool> mIsFrameSelected;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
class PaintTelemetry
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum class Metric {
|
|
||||||
DisplayList,
|
|
||||||
Layerization,
|
|
||||||
Rasterization,
|
|
||||||
COUNT,
|
|
||||||
};
|
|
||||||
|
|
||||||
class AutoRecord
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit AutoRecord(Metric aMetric);
|
|
||||||
~AutoRecord();
|
|
||||||
private:
|
|
||||||
Metric mMetric;
|
|
||||||
mozilla::TimeStamp mStart;
|
|
||||||
};
|
|
||||||
|
|
||||||
class AutoRecordPaint
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AutoRecordPaint();
|
|
||||||
~AutoRecordPaint();
|
|
||||||
private:
|
|
||||||
mozilla::TimeStamp mStart;
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
static uint32_t sPaintLevel;
|
|
||||||
static uint32_t sMetricLevel;
|
|
||||||
static mozilla::EnumeratedArray<Metric, Metric::COUNT, double> sMetrics;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace mozilla
|
|
||||||
|
|
||||||
#endif /*NSDISPLAYLIST_H_*/
|
#endif /*NSDISPLAYLIST_H_*/
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,6 @@
|
||||||
#include "FrameLayerBuilder.h"
|
#include "FrameLayerBuilder.h"
|
||||||
#include "mozilla/layers/APZCTreeManager.h"
|
#include "mozilla/layers/APZCTreeManager.h"
|
||||||
#include "mozilla/layers/CompositorBridgeChild.h"
|
#include "mozilla/layers/CompositorBridgeChild.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/EventDispatcher.h"
|
#include "mozilla/EventDispatcher.h"
|
||||||
#include "mozilla/EventStateManager.h"
|
#include "mozilla/EventStateManager.h"
|
||||||
#include "mozilla/RuleNodeCacheConditions.h"
|
#include "mozilla/RuleNodeCacheConditions.h"
|
||||||
|
|
@ -3534,8 +3533,6 @@ nsLayoutUtils::PaintFrame(nsRenderingContext* aRenderingContext, nsIFrame* aFram
|
||||||
PROFILER_LABEL("nsLayoutUtils", "PaintFrame::BuildDisplayList",
|
PROFILER_LABEL("nsLayoutUtils", "PaintFrame::BuildDisplayList",
|
||||||
js::ProfileEntry::Category::GRAPHICS);
|
js::ProfileEntry::Category::GRAPHICS);
|
||||||
|
|
||||||
|
|
||||||
PaintTelemetry::AutoRecord record(PaintTelemetry::Metric::DisplayList);
|
|
||||||
aFrame->BuildDisplayListForStackingContext(&builder, dirtyRect, &list);
|
aFrame->BuildDisplayListForStackingContext(&builder, dirtyRect, &list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,6 @@
|
||||||
#include "mozilla/css/ImageLoader.h"
|
#include "mozilla/css/ImageLoader.h"
|
||||||
#include "mozilla/dom/DocumentTimeline.h"
|
#include "mozilla/dom/DocumentTimeline.h"
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "nsCanvasFrame.h"
|
#include "nsCanvasFrame.h"
|
||||||
#include "nsIImageLoadingContent.h"
|
#include "nsIImageLoadingContent.h"
|
||||||
#include "nsImageFrame.h"
|
#include "nsImageFrame.h"
|
||||||
|
|
@ -9394,9 +9393,6 @@ PresShell::DoVerifyReflow()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// used with Telemetry metrics
|
|
||||||
#define NS_LONG_REFLOW_TIME_MS 5000
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PresShell::ProcessReflowCommands(bool aInterruptible)
|
PresShell::ProcessReflowCommands(bool aInterruptible)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,6 @@
|
||||||
#include "nsDocShell.h"
|
#include "nsDocShell.h"
|
||||||
#include "nsISimpleEnumerator.h"
|
#include "nsISimpleEnumerator.h"
|
||||||
#include "nsJSEnvironment.h"
|
#include "nsJSEnvironment.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "gfxPrefs.h"
|
#include "gfxPrefs.h"
|
||||||
#include "BackgroundChild.h"
|
#include "BackgroundChild.h"
|
||||||
#include "mozilla/ipc/PBackgroundChild.h"
|
#include "mozilla/ipc/PBackgroundChild.h"
|
||||||
|
|
@ -524,46 +523,10 @@ private:
|
||||||
private:
|
private:
|
||||||
~RefreshDriverVsyncObserver() = default;
|
~RefreshDriverVsyncObserver() = default;
|
||||||
|
|
||||||
void RecordTelemetryProbes(TimeStamp aVsyncTimestamp)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
#ifndef ANDROID /* bug 1142079 */
|
|
||||||
if (XRE_IsParentProcess()) {
|
|
||||||
TimeDuration vsyncLatency = TimeStamp::Now() - aVsyncTimestamp;
|
|
||||||
uint32_t sample = (uint32_t)vsyncLatency.ToMilliseconds();
|
|
||||||
RecordJank(sample);
|
|
||||||
} else if (mVsyncRate != TimeDuration::Forever()) {
|
|
||||||
TimeDuration contentDelay = (TimeStamp::Now() - mLastChildTick) - mVsyncRate;
|
|
||||||
if (contentDelay.ToMilliseconds() < 0 ){
|
|
||||||
// Vsyncs are noisy and some can come at a rate quicker than
|
|
||||||
// the reported hardware rate. In those cases, consider that we have 0 delay.
|
|
||||||
contentDelay = TimeDuration::FromMilliseconds(0);
|
|
||||||
}
|
|
||||||
uint32_t sample = (uint32_t)contentDelay.ToMilliseconds();
|
|
||||||
RecordJank(sample);
|
|
||||||
} else {
|
|
||||||
// Request the vsync rate from the parent process. Might be a few vsyncs
|
|
||||||
// until the parent responds.
|
|
||||||
mVsyncRate = mVsyncRefreshDriverTimer->mVsyncChild->GetVsyncRate();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void RecordJank(uint32_t aJankMS)
|
|
||||||
{
|
|
||||||
uint32_t duration = 1 /* ms */;
|
|
||||||
for (size_t i = 0;
|
|
||||||
i < mozilla::ArrayLength(sJankLevels) && duration < aJankMS;
|
|
||||||
++i, duration *= 2) {
|
|
||||||
sJankLevels[i]++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TickRefreshDriver(TimeStamp aVsyncTimestamp)
|
void TickRefreshDriver(TimeStamp aVsyncTimestamp)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
|
||||||
RecordTelemetryProbes(aVsyncTimestamp);
|
|
||||||
if (XRE_IsParentProcess()) {
|
if (XRE_IsParentProcess()) {
|
||||||
MonitorAutoLock lock(mRefreshTickLock);
|
MonitorAutoLock lock(mRefreshTickLock);
|
||||||
aVsyncTimestamp = mRecentVsync;
|
aVsyncTimestamp = mRecentVsync;
|
||||||
|
|
@ -2006,7 +1969,6 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, TimeStamp aNowTime)
|
||||||
mViewManagerFlushIsPending = false;
|
mViewManagerFlushIsPending = false;
|
||||||
RefPtr<nsViewManager> vm = mPresContext->GetPresShell()->GetViewManager();
|
RefPtr<nsViewManager> vm = mPresContext->GetPresShell()->GetViewManager();
|
||||||
{
|
{
|
||||||
PaintTelemetry::AutoRecordPaint record;
|
|
||||||
vm->ProcessPendingUpdates();
|
vm->ProcessPendingUpdates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,4 @@
|
||||||
#define SERVICEWORKERMANAGER_CID \
|
#define SERVICEWORKERMANAGER_CID \
|
||||||
{ 0xc74bde32, 0xbcc7, 0x4840, { 0x84, 0x30, 0xc7, 0x33, 0x35, 0x1b, 0x21, 0x2a } }
|
{ 0xc74bde32, 0xbcc7, 0x4840, { 0x84, 0x30, 0xc7, 0x33, 0x35, 0x1b, 0x21, 0x2a } }
|
||||||
|
|
||||||
#define NOTIFICATIONTELEMETRYSERVICE_CID \
|
|
||||||
{ 0x5995b782, 0x6a0e, 0x4066, { 0xaa, 0xc5, 0x27, 0x6f, 0x0a, 0x9a, 0xd8, 0xcf } }
|
|
||||||
|
|
||||||
#endif /* nsLayoutCID_h__ */
|
#endif /* nsLayoutCID_h__ */
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,6 @@ using mozilla::dom::UDPSocketChild;
|
||||||
using mozilla::dom::time::TimeService;
|
using mozilla::dom::time::TimeService;
|
||||||
using mozilla::net::StreamingProtocolControllerService;
|
using mozilla::net::StreamingProtocolControllerService;
|
||||||
using mozilla::gmp::GeckoMediaPluginService;
|
using mozilla::gmp::GeckoMediaPluginService;
|
||||||
using mozilla::dom::NotificationTelemetryService;
|
|
||||||
|
|
||||||
#define NS_EDITORCOMMANDTABLE_CID \
|
#define NS_EDITORCOMMANDTABLE_CID \
|
||||||
{ 0x4f5e62b8, 0xd659, 0x4156, \
|
{ 0x4f5e62b8, 0xd659, 0x4156, \
|
||||||
|
|
@ -292,7 +291,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(TextInputProcessor)
|
||||||
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIPresentationService,
|
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIPresentationService,
|
||||||
NS_CreatePresentationService)
|
NS_CreatePresentationService)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(PresentationTCPSessionTransport)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(PresentationTCPSessionTransport)
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(NotificationTelemetryService, Init)
|
|
||||||
NS_GENERIC_FACTORY_CONSTRUCTOR(PushNotifier)
|
NS_GENERIC_FACTORY_CONSTRUCTOR(PushNotifier)
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
@ -657,7 +655,6 @@ NS_DEFINE_NAMED_CID(NS_TEXTEDITOR_CID);
|
||||||
NS_DEFINE_NAMED_CID(DOMREQUEST_SERVICE_CID);
|
NS_DEFINE_NAMED_CID(DOMREQUEST_SERVICE_CID);
|
||||||
NS_DEFINE_NAMED_CID(QUOTAMANAGER_SERVICE_CID);
|
NS_DEFINE_NAMED_CID(QUOTAMANAGER_SERVICE_CID);
|
||||||
NS_DEFINE_NAMED_CID(SERVICEWORKERMANAGER_CID);
|
NS_DEFINE_NAMED_CID(SERVICEWORKERMANAGER_CID);
|
||||||
NS_DEFINE_NAMED_CID(NOTIFICATIONTELEMETRYSERVICE_CID);
|
|
||||||
NS_DEFINE_NAMED_CID(PUSHNOTIFIER_CID);
|
NS_DEFINE_NAMED_CID(PUSHNOTIFIER_CID);
|
||||||
|
|
||||||
NS_DEFINE_NAMED_CID(WORKERDEBUGGERMANAGER_CID);
|
NS_DEFINE_NAMED_CID(WORKERDEBUGGERMANAGER_CID);
|
||||||
|
|
@ -925,7 +922,6 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = {
|
||||||
{ &kDOMREQUEST_SERVICE_CID, false, nullptr, DOMRequestServiceConstructor },
|
{ &kDOMREQUEST_SERVICE_CID, false, nullptr, DOMRequestServiceConstructor },
|
||||||
{ &kQUOTAMANAGER_SERVICE_CID, false, nullptr, QuotaManagerServiceConstructor },
|
{ &kQUOTAMANAGER_SERVICE_CID, false, nullptr, QuotaManagerServiceConstructor },
|
||||||
{ &kSERVICEWORKERMANAGER_CID, false, nullptr, ServiceWorkerManagerConstructor },
|
{ &kSERVICEWORKERMANAGER_CID, false, nullptr, ServiceWorkerManagerConstructor },
|
||||||
{ &kNOTIFICATIONTELEMETRYSERVICE_CID, false, nullptr, NotificationTelemetryServiceConstructor },
|
|
||||||
{ &kPUSHNOTIFIER_CID, false, nullptr, PushNotifierConstructor },
|
{ &kPUSHNOTIFIER_CID, false, nullptr, PushNotifierConstructor },
|
||||||
{ &kWORKERDEBUGGERMANAGER_CID, true, nullptr, WorkerDebuggerManagerConstructor },
|
{ &kWORKERDEBUGGERMANAGER_CID, true, nullptr, WorkerDebuggerManagerConstructor },
|
||||||
{ &kNS_AUDIOCHANNELAGENT_CID, true, nullptr, AudioChannelAgentConstructor },
|
{ &kNS_AUDIOCHANNELAGENT_CID, true, nullptr, AudioChannelAgentConstructor },
|
||||||
|
|
@ -1057,7 +1053,6 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = {
|
||||||
{ DOMREQUEST_SERVICE_CONTRACTID, &kDOMREQUEST_SERVICE_CID },
|
{ DOMREQUEST_SERVICE_CONTRACTID, &kDOMREQUEST_SERVICE_CID },
|
||||||
{ QUOTAMANAGER_SERVICE_CONTRACTID, &kQUOTAMANAGER_SERVICE_CID },
|
{ QUOTAMANAGER_SERVICE_CONTRACTID, &kQUOTAMANAGER_SERVICE_CID },
|
||||||
{ SERVICEWORKERMANAGER_CONTRACTID, &kSERVICEWORKERMANAGER_CID },
|
{ SERVICEWORKERMANAGER_CONTRACTID, &kSERVICEWORKERMANAGER_CID },
|
||||||
{ NOTIFICATIONTELEMETRYSERVICE_CONTRACTID, &kNOTIFICATIONTELEMETRYSERVICE_CID },
|
|
||||||
{ PUSHNOTIFIER_CONTRACTID, &kPUSHNOTIFIER_CID },
|
{ PUSHNOTIFIER_CONTRACTID, &kPUSHNOTIFIER_CID },
|
||||||
{ WORKERDEBUGGERMANAGER_CONTRACTID, &kWORKERDEBUGGERMANAGER_CID },
|
{ WORKERDEBUGGERMANAGER_CONTRACTID, &kWORKERDEBUGGERMANAGER_CID },
|
||||||
{ NS_AUDIOCHANNELAGENT_CONTRACTID, &kNS_AUDIOCHANNELAGENT_CID },
|
{ NS_AUDIOCHANNELAGENT_CONTRACTID, &kNS_AUDIOCHANNELAGENT_CID },
|
||||||
|
|
@ -1132,7 +1127,6 @@ static const mozilla::Module::CategoryEntry kLayoutCategories[] = {
|
||||||
CONTENTDLF_CATEGORIES
|
CONTENTDLF_CATEGORIES
|
||||||
{ "profile-after-change", "PresentationDeviceManager", PRESENTATION_DEVICE_MANAGER_CONTRACTID },
|
{ "profile-after-change", "PresentationDeviceManager", PRESENTATION_DEVICE_MANAGER_CONTRACTID },
|
||||||
{ "profile-after-change", "PresentationService", PRESENTATION_SERVICE_CONTRACTID },
|
{ "profile-after-change", "PresentationService", PRESENTATION_SERVICE_CONTRACTID },
|
||||||
{ "profile-after-change", "Notification Telemetry Service", NOTIFICATIONTELEMETRYSERVICE_CONTRACTID },
|
|
||||||
{ nullptr }
|
{ nullptr }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -519,9 +519,6 @@ ImageLoader::FlushUseCounters()
|
||||||
|
|
||||||
nsCOMPtr<imgIContainer> container;
|
nsCOMPtr<imgIContainer> container;
|
||||||
request->GetImage(getter_AddRefs(container));
|
request->GetImage(getter_AddRefs(container));
|
||||||
if (container) {
|
|
||||||
static_cast<image::Image*>(container.get())->ReportUseCounters();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,6 @@
|
||||||
#include "nsDOMDataChannel.h"
|
#include "nsDOMDataChannel.h"
|
||||||
#include "mozilla/dom/Performance.h"
|
#include "mozilla/dom/Performance.h"
|
||||||
#include "mozilla/TimeStamp.h"
|
#include "mozilla/TimeStamp.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
#include "mozilla/PublicSSL.h"
|
#include "mozilla/PublicSSL.h"
|
||||||
#include "nsXULAppAPI.h"
|
#include "nsXULAppAPI.h"
|
||||||
|
|
@ -2167,9 +2166,6 @@ PeerConnectionImpl::SetRemoteDescription(int32_t action, const char* aSDP)
|
||||||
RemoveOldRemoteTracks(pco);
|
RemoveOldRemoteTracks(pco);
|
||||||
|
|
||||||
pco->OnSetRemoteDescriptionSuccess(jrv);
|
pco->OnSetRemoteDescriptionSuccess(jrv);
|
||||||
#if !defined(MOZILLA_EXTERNAL_LINKAGE)
|
|
||||||
startCallTelem();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateSignalingState(sdpType == mozilla::kJsepSdpRollback);
|
UpdateSignalingState(sdpType == mozilla::kJsepSdpRollback);
|
||||||
|
|
@ -2992,12 +2988,6 @@ PeerConnectionImpl::PluginCrash(uint32_t aPluginID,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
PeerConnectionImpl::RecordEndOfCallTelemetry() const
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
PeerConnectionImpl::CloseInt()
|
PeerConnectionImpl::CloseInt()
|
||||||
{
|
{
|
||||||
|
|
@ -3014,7 +3004,6 @@ PeerConnectionImpl::CloseInt()
|
||||||
if (!mPrivateWindow) {
|
if (!mPrivateWindow) {
|
||||||
RecordLongtermICEStatistics();
|
RecordLongtermICEStatistics();
|
||||||
}
|
}
|
||||||
RecordEndOfCallTelemetry();
|
|
||||||
CSFLogInfo(logTag, "%s: Closing PeerConnectionImpl %s; "
|
CSFLogInfo(logTag, "%s: Closing PeerConnectionImpl %s; "
|
||||||
"ending call", __FUNCTION__, mHandle.c_str());
|
"ending call", __FUNCTION__, mHandle.c_str());
|
||||||
if (mJsepSession) {
|
if (mJsepSession) {
|
||||||
|
|
@ -3110,9 +3099,6 @@ PeerConnectionImpl::SetSignalingState_m(PCImplSignalingState aSignalingState,
|
||||||
fireNegotiationNeeded = true;
|
fireNegotiationNeeded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Telemetry: record info on the current state of streams/renegotiations/etc
|
|
||||||
// Note: this code gets run on rollbacks as well!
|
|
||||||
|
|
||||||
// Update the max channels used with each direction for each type
|
// Update the max channels used with each direction for each type
|
||||||
uint16_t receiving[SdpMediaSection::kMediaTypes];
|
uint16_t receiving[SdpMediaSection::kMediaTypes];
|
||||||
uint16_t sending[SdpMediaSection::kMediaTypes];
|
uint16_t sending[SdpMediaSection::kMediaTypes];
|
||||||
|
|
@ -3967,14 +3953,6 @@ PeerConnectionImpl::IceStreamReady(NrIceMediaStream *aStream)
|
||||||
CSFLogDebug(logTag, "%s: %s", __FUNCTION__, aStream->name().c_str());
|
CSFLogDebug(logTag, "%s: %s", __FUNCTION__, aStream->name().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(MOZILLA_EXTERNAL_LINKAGE)
|
|
||||||
//Telemetry for when calls start
|
|
||||||
void
|
|
||||||
PeerConnectionImpl::startCallTelem() {
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
PeerConnectionImpl::GetLocalStreams(nsTArray<RefPtr<DOMMediaStream > >& result)
|
PeerConnectionImpl::GetLocalStreams(nsTArray<RefPtr<DOMMediaStream > >& result)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -594,8 +594,6 @@ public:
|
||||||
bool PluginCrash(uint32_t aPluginID,
|
bool PluginCrash(uint32_t aPluginID,
|
||||||
const nsAString& aPluginName);
|
const nsAString& aPluginName);
|
||||||
|
|
||||||
void RecordEndOfCallTelemetry() const;
|
|
||||||
|
|
||||||
nsresult InitializeDataChannel();
|
nsresult InitializeDataChannel();
|
||||||
|
|
||||||
NS_IMETHODIMP_TO_ERRORRESULT_RETREF(nsDOMDataChannel,
|
NS_IMETHODIMP_TO_ERRORRESULT_RETREF(nsDOMDataChannel,
|
||||||
|
|
@ -647,9 +645,6 @@ public:
|
||||||
bool HasMedia() const;
|
bool HasMedia() const;
|
||||||
|
|
||||||
#if !defined(MOZILLA_EXTERNAL_LINKAGE)
|
#if !defined(MOZILLA_EXTERNAL_LINKAGE)
|
||||||
// initialize telemetry for when calls start
|
|
||||||
void startCallTelem();
|
|
||||||
|
|
||||||
nsresult BuildStatsQuery_m(
|
nsresult BuildStatsQuery_m(
|
||||||
mozilla::dom::MediaStreamTrack *aSelector,
|
mozilla::dom::MediaStreamTrack *aSelector,
|
||||||
RTCStatsQuery *query);
|
RTCStatsQuery *query);
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@
|
||||||
#include "ScopedNSSTypes.h"
|
#include "ScopedNSSTypes.h"
|
||||||
#include "mozilla/Casting.h"
|
#include "mozilla/Casting.h"
|
||||||
#include "mozilla/Logging.h"
|
#include "mozilla/Logging.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "nsCOMArray.h"
|
#include "nsCOMArray.h"
|
||||||
#include "nsIAsyncInputStream.h"
|
#include "nsIAsyncInputStream.h"
|
||||||
#include "nsIFile.h"
|
#include "nsIFile.h"
|
||||||
|
|
@ -85,7 +84,6 @@ private:
|
||||||
//// BackgroundFileSaver
|
//// BackgroundFileSaver
|
||||||
|
|
||||||
uint32_t BackgroundFileSaver::sThreadCount = 0;
|
uint32_t BackgroundFileSaver::sThreadCount = 0;
|
||||||
uint32_t BackgroundFileSaver::sTelemetryMaxThreadCount = 0;
|
|
||||||
|
|
||||||
BackgroundFileSaver::BackgroundFileSaver()
|
BackgroundFileSaver::BackgroundFileSaver()
|
||||||
: mControlThread(nullptr)
|
: mControlThread(nullptr)
|
||||||
|
|
@ -156,9 +154,6 @@ BackgroundFileSaver::Init()
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
sThreadCount++;
|
sThreadCount++;
|
||||||
if (sThreadCount > sTelemetryMaxThreadCount) {
|
|
||||||
sTelemetryMaxThreadCount = sThreadCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
@ -793,14 +788,6 @@ BackgroundFileSaver::NotifySaveComplete()
|
||||||
|
|
||||||
sThreadCount--;
|
sThreadCount--;
|
||||||
|
|
||||||
// When there are no more active downloads, we consider the download session
|
|
||||||
// finished. We record the maximum number of concurrent downloads reached
|
|
||||||
// during the session in a telemetry histogram, and we reset the maximum
|
|
||||||
// thread counter for the next download session
|
|
||||||
if (sThreadCount == 0) {
|
|
||||||
sTelemetryMaxThreadCount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,15 +61,6 @@ public:
|
||||||
*/
|
*/
|
||||||
static uint32_t sThreadCount;
|
static uint32_t sThreadCount;
|
||||||
|
|
||||||
/**
|
|
||||||
* Maximum number of worker threads reached during the current download session,
|
|
||||||
* used for telemetry.
|
|
||||||
*
|
|
||||||
* When there are no more worker threads running, we consider the download
|
|
||||||
* session finished, and this counter is reset.
|
|
||||||
*/
|
|
||||||
static uint32_t sTelemetryMaxThreadCount;
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~BackgroundFileSaver();
|
virtual ~BackgroundFileSaver();
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,6 @@
|
||||||
#include "mozilla/LoadInfo.h"
|
#include "mozilla/LoadInfo.h"
|
||||||
#include "mozilla/net/NeckoCommon.h"
|
#include "mozilla/net/NeckoCommon.h"
|
||||||
#include "mozilla/Services.h"
|
#include "mozilla/Services.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "mozilla/net/DNS.h"
|
#include "mozilla/net/DNS.h"
|
||||||
#include "mozilla/ipc/URIUtils.h"
|
#include "mozilla/ipc/URIUtils.h"
|
||||||
#include "mozilla/net/NeckoChild.h"
|
#include "mozilla/net/NeckoChild.h"
|
||||||
|
|
@ -166,8 +165,6 @@ static const char kProfileDoChange[] = "profile-do-change";
|
||||||
uint32_t nsIOService::gDefaultSegmentSize = 4096;
|
uint32_t nsIOService::gDefaultSegmentSize = 4096;
|
||||||
uint32_t nsIOService::gDefaultSegmentCount = 24;
|
uint32_t nsIOService::gDefaultSegmentCount = 24;
|
||||||
|
|
||||||
bool nsIOService::sTelemetryEnabled = false;
|
|
||||||
|
|
||||||
bool nsIOService::sBlockToplevelDataUriNavigations = false;
|
bool nsIOService::sBlockToplevelDataUriNavigations = false;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
@ -185,9 +182,6 @@ nsIOService::nsIOService()
|
||||||
, mNetworkLinkServiceInitialized(false)
|
, mNetworkLinkServiceInitialized(false)
|
||||||
, mChannelEventSinks(NS_CHANNEL_EVENT_SINK_CATEGORY)
|
, mChannelEventSinks(NS_CHANNEL_EVENT_SINK_CATEGORY)
|
||||||
, mNetworkNotifyChanged(true)
|
, mNetworkNotifyChanged(true)
|
||||||
, mLastOfflineStateChange(PR_IntervalNow())
|
|
||||||
, mLastConnectivityChange(PR_IntervalNow())
|
|
||||||
, mLastNetworkLinkChange(PR_IntervalNow())
|
|
||||||
, mNetTearingDownStarted(0)
|
, mNetTearingDownStarted(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -247,7 +241,6 @@ nsIOService::Init()
|
||||||
else
|
else
|
||||||
NS_WARNING("failed to get observer service");
|
NS_WARNING("failed to get observer service");
|
||||||
|
|
||||||
Preferences::AddBoolVarCache(&sTelemetryEnabled, "toolkit.telemetry.enabled", false);
|
|
||||||
Preferences::AddBoolVarCache(&sBlockToplevelDataUriNavigations,
|
Preferences::AddBoolVarCache(&sBlockToplevelDataUriNavigations,
|
||||||
"security.data_uri.block_toplevel_data_uri_navigations", false);
|
"security.data_uri.block_toplevel_data_uri_navigations", false);
|
||||||
Preferences::AddBoolVarCache(&mOfflineMirrorsConnectivity, OFFLINE_MIRRORS_CONNECTIVITY, true);
|
Preferences::AddBoolVarCache(&mOfflineMirrorsConnectivity, OFFLINE_MIRRORS_CONNECTIVITY, true);
|
||||||
|
|
@ -1068,7 +1061,6 @@ nsIOService::SetOffline(bool offline)
|
||||||
if (mSocketTransportService)
|
if (mSocketTransportService)
|
||||||
mSocketTransportService->SetOffline(true);
|
mSocketTransportService->SetOffline(true);
|
||||||
|
|
||||||
mLastOfflineStateChange = PR_IntervalNow();
|
|
||||||
if (observerService)
|
if (observerService)
|
||||||
observerService->NotifyObservers(subject,
|
observerService->NotifyObservers(subject,
|
||||||
NS_IOSERVICE_OFFLINE_STATUS_TOPIC,
|
NS_IOSERVICE_OFFLINE_STATUS_TOPIC,
|
||||||
|
|
@ -1088,7 +1080,6 @@ nsIOService::SetOffline(bool offline)
|
||||||
if (mProxyService)
|
if (mProxyService)
|
||||||
mProxyService->ReloadPAC();
|
mProxyService->ReloadPAC();
|
||||||
|
|
||||||
mLastOfflineStateChange = PR_IntervalNow();
|
|
||||||
// don't care if notification fails
|
// don't care if notification fails
|
||||||
// Only send the ONLINE notification if there is connectivity
|
// Only send the ONLINE notification if there is connectivity
|
||||||
if (observerService && mConnectivity) {
|
if (observerService && mConnectivity) {
|
||||||
|
|
@ -1147,10 +1138,6 @@ nsIOService::SetConnectivityInternal(bool aConnectivity)
|
||||||
}
|
}
|
||||||
mConnectivity = aConnectivity;
|
mConnectivity = aConnectivity;
|
||||||
|
|
||||||
// This is used for PR_Connect PR_Close telemetry so it is important that
|
|
||||||
// we have statistic about network change event even if we are offline.
|
|
||||||
mLastConnectivityChange = PR_IntervalNow();
|
|
||||||
|
|
||||||
if (mCaptivePortalService) {
|
if (mCaptivePortalService) {
|
||||||
if (aConnectivity && !xpc::AreNonLocalConnectionsDisabled()) {
|
if (aConnectivity && !xpc::AreNonLocalConnectionsDisabled()) {
|
||||||
// This will also trigger a captive portal check for the new network
|
// This will also trigger a captive portal check for the new network
|
||||||
|
|
@ -1621,7 +1608,6 @@ nsIOService::OnNetworkLinkEvent(const char *data)
|
||||||
|
|
||||||
bool isUp = true;
|
bool isUp = true;
|
||||||
if (!strcmp(data, NS_NETWORK_LINK_DATA_CHANGED)) {
|
if (!strcmp(data, NS_NETWORK_LINK_DATA_CHANGED)) {
|
||||||
mLastNetworkLinkChange = PR_IntervalNow();
|
|
||||||
// CHANGED means UP/DOWN didn't change
|
// CHANGED means UP/DOWN didn't change
|
||||||
// but the status of the captive portal may have changed.
|
// but the status of the captive portal may have changed.
|
||||||
RecheckCaptivePortal();
|
RecheckCaptivePortal();
|
||||||
|
|
|
||||||
|
|
@ -79,9 +79,6 @@ public:
|
||||||
nsAsyncRedirectVerifyHelper *helper);
|
nsAsyncRedirectVerifyHelper *helper);
|
||||||
|
|
||||||
bool IsOffline() { return mOffline; }
|
bool IsOffline() { return mOffline; }
|
||||||
PRIntervalTime LastOfflineStateChange() { return mLastOfflineStateChange; }
|
|
||||||
PRIntervalTime LastConnectivityChange() { return mLastConnectivityChange; }
|
|
||||||
PRIntervalTime LastNetworkLinkChange() { return mLastNetworkLinkChange; }
|
|
||||||
bool IsNetTearingDown() { return mShutdown || mOfflineForProfileChange ||
|
bool IsNetTearingDown() { return mShutdown || mOfflineForProfileChange ||
|
||||||
mHttpHandlerAlreadyShutingDown; }
|
mHttpHandlerAlreadyShutingDown; }
|
||||||
PRIntervalTime NetTearingDownStarted() { return mNetTearingDownStarted; }
|
PRIntervalTime NetTearingDownStarted() { return mNetTearingDownStarted; }
|
||||||
|
|
@ -176,18 +173,8 @@ private:
|
||||||
|
|
||||||
bool mNetworkNotifyChanged;
|
bool mNetworkNotifyChanged;
|
||||||
|
|
||||||
static bool sTelemetryEnabled;
|
|
||||||
|
|
||||||
static bool sBlockToplevelDataUriNavigations;
|
static bool sBlockToplevelDataUriNavigations;
|
||||||
|
|
||||||
// These timestamps are needed for collecting telemetry on PR_Connect,
|
|
||||||
// PR_ConnectContinue and PR_Close blocking time. If we spend very long
|
|
||||||
// time in any of these functions we want to know if and what network
|
|
||||||
// change has happened shortly before.
|
|
||||||
mozilla::Atomic<PRIntervalTime> mLastOfflineStateChange;
|
|
||||||
mozilla::Atomic<PRIntervalTime> mLastConnectivityChange;
|
|
||||||
mozilla::Atomic<PRIntervalTime> mLastNetworkLinkChange;
|
|
||||||
|
|
||||||
// Time a network tearing down started.
|
// Time a network tearing down started.
|
||||||
mozilla::Atomic<PRIntervalTime> mNetTearingDownStarted;
|
mozilla::Atomic<PRIntervalTime> mNetTearingDownStarted;
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -108,9 +108,6 @@ nsLoadGroup::nsLoadGroup(nsISupports* outer)
|
||||||
, mStatus(NS_OK)
|
, mStatus(NS_OK)
|
||||||
, mPriority(PRIORITY_NORMAL)
|
, mPriority(PRIORITY_NORMAL)
|
||||||
, mIsCanceling(false)
|
, mIsCanceling(false)
|
||||||
, mDefaultLoadIsTimed(false)
|
|
||||||
, mTimedRequests(0)
|
|
||||||
, mCachedRequests(0)
|
|
||||||
, mTimedNonCachedRequestsUntilOnEndPageLoad(0)
|
, mTimedNonCachedRequestsUntilOnEndPageLoad(0)
|
||||||
{
|
{
|
||||||
NS_INIT_AGGREGATED(outer);
|
NS_INIT_AGGREGATED(outer);
|
||||||
|
|
@ -431,13 +428,6 @@ nsLoadGroup::SetDefaultLoadRequest(nsIRequest *aRequest)
|
||||||
// in particular, nsIChannel::LOAD_DOCUMENT_URI...
|
// in particular, nsIChannel::LOAD_DOCUMENT_URI...
|
||||||
//
|
//
|
||||||
mLoadFlags &= nsIRequest::LOAD_REQUESTMASK;
|
mLoadFlags &= nsIRequest::LOAD_REQUESTMASK;
|
||||||
|
|
||||||
nsCOMPtr<nsITimedChannel> timedChannel = do_QueryInterface(aRequest);
|
|
||||||
mDefaultLoadIsTimed = timedChannel != nullptr;
|
|
||||||
if (mDefaultLoadIsTimed) {
|
|
||||||
timedChannel->GetChannelCreation(&mDefaultRequestCreationTime);
|
|
||||||
timedChannel->SetTimingEnabled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Else, do not change the group's load flags (see bug 95981)
|
// Else, do not change the group's load flags (see bug 95981)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
@ -492,10 +482,6 @@ nsLoadGroup::AddRequest(nsIRequest *request, nsISupports* ctxt)
|
||||||
if (mPriority != 0)
|
if (mPriority != 0)
|
||||||
RescheduleRequest(request, mPriority);
|
RescheduleRequest(request, mPriority);
|
||||||
|
|
||||||
nsCOMPtr<nsITimedChannel> timedChannel = do_QueryInterface(request);
|
|
||||||
if (timedChannel)
|
|
||||||
timedChannel->SetTimingEnabled(true);
|
|
||||||
|
|
||||||
if (!(flags & nsIRequest::LOAD_BACKGROUND)) {
|
if (!(flags & nsIRequest::LOAD_BACKGROUND)) {
|
||||||
// Update the count of foreground URIs..
|
// Update the count of foreground URIs..
|
||||||
mForegroundCount += 1;
|
mForegroundCount += 1;
|
||||||
|
|
@ -573,10 +559,6 @@ nsLoadGroup::RemoveRequest(nsIRequest *request, nsISupports* ctxt,
|
||||||
|
|
||||||
mRequests.RemoveEntry(entry);
|
mRequests.RemoveEntry(entry);
|
||||||
|
|
||||||
if (mRequests.EntryCount() == 0) {
|
|
||||||
TelemetryReport();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Undo any group priority delta...
|
// Undo any group priority delta...
|
||||||
if (mPriority != 0)
|
if (mPriority != 0)
|
||||||
RescheduleRequest(request, -mPriority);
|
RescheduleRequest(request, -mPriority);
|
||||||
|
|
@ -777,82 +759,6 @@ nsLoadGroup::SetDefaultLoadFlags(uint32_t aFlags)
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void
|
|
||||||
nsLoadGroup::TelemetryReport()
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
mTimedRequests = 0;
|
|
||||||
mCachedRequests = 0;
|
|
||||||
mDefaultLoadIsTimed = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nsLoadGroup::TelemetryReportChannel(nsITimedChannel *aTimedChannel,
|
|
||||||
bool aDefaultRequest)
|
|
||||||
{
|
|
||||||
nsresult rv;
|
|
||||||
bool timingEnabled;
|
|
||||||
rv = aTimedChannel->GetTimingEnabled(&timingEnabled);
|
|
||||||
if (NS_FAILED(rv) || !timingEnabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp asyncOpen;
|
|
||||||
rv = aTimedChannel->GetAsyncOpen(&asyncOpen);
|
|
||||||
// We do not check !asyncOpen.IsNull() bellow, prevent ASSERTIONs this way
|
|
||||||
if (NS_FAILED(rv) || asyncOpen.IsNull())
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp cacheReadStart;
|
|
||||||
rv = aTimedChannel->GetCacheReadStart(&cacheReadStart);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp cacheReadEnd;
|
|
||||||
rv = aTimedChannel->GetCacheReadEnd(&cacheReadEnd);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp domainLookupStart;
|
|
||||||
rv = aTimedChannel->GetDomainLookupStart(&domainLookupStart);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp domainLookupEnd;
|
|
||||||
rv = aTimedChannel->GetDomainLookupEnd(&domainLookupEnd);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp connectStart;
|
|
||||||
rv = aTimedChannel->GetConnectStart(&connectStart);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp secureConnectionStart;
|
|
||||||
rv = aTimedChannel->GetSecureConnectionStart(&secureConnectionStart);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp connectEnd;
|
|
||||||
rv = aTimedChannel->GetConnectEnd(&connectEnd);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp requestStart;
|
|
||||||
rv = aTimedChannel->GetRequestStart(&requestStart);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp responseStart;
|
|
||||||
rv = aTimedChannel->GetResponseStart(&responseStart);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp responseEnd;
|
|
||||||
rv = aTimedChannel->GetResponseEnd(&responseEnd);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult nsLoadGroup::MergeLoadFlags(nsIRequest *aRequest,
|
nsresult nsLoadGroup::MergeLoadFlags(nsIRequest *aRequest,
|
||||||
nsLoadFlags& outFlags)
|
nsLoadFlags& outFlags)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -62,11 +62,6 @@ protected:
|
||||||
nsresult MergeLoadFlags(nsIRequest *aRequest, nsLoadFlags& flags);
|
nsresult MergeLoadFlags(nsIRequest *aRequest, nsLoadFlags& flags);
|
||||||
nsresult MergeDefaultLoadFlags(nsIRequest *aRequest, nsLoadFlags& flags);
|
nsresult MergeDefaultLoadFlags(nsIRequest *aRequest, nsLoadFlags& flags);
|
||||||
|
|
||||||
private:
|
|
||||||
void TelemetryReport();
|
|
||||||
void TelemetryReportChannel(nsITimedChannel *timedChannel,
|
|
||||||
bool defaultRequest);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint32_t mForegroundCount;
|
uint32_t mForegroundCount;
|
||||||
uint32_t mLoadFlags;
|
uint32_t mLoadFlags;
|
||||||
|
|
@ -87,12 +82,6 @@ protected:
|
||||||
int32_t mPriority;
|
int32_t mPriority;
|
||||||
bool mIsCanceling;
|
bool mIsCanceling;
|
||||||
|
|
||||||
/* Telemetry */
|
|
||||||
mozilla::TimeStamp mDefaultRequestCreationTime;
|
|
||||||
bool mDefaultLoadIsTimed;
|
|
||||||
uint32_t mTimedRequests;
|
|
||||||
uint32_t mCachedRequests;
|
|
||||||
|
|
||||||
/* For nsPILoadGroupInternal */
|
/* For nsPILoadGroupInternal */
|
||||||
uint32_t mTimedNonCachedRequestsUntilOnEndPageLoad;
|
uint32_t mTimedNonCachedRequestsUntilOnEndPageLoad;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
#include "nsSocketTransport2.h"
|
#include "nsSocketTransport2.h"
|
||||||
|
|
||||||
#include "mozilla/Attributes.h"
|
#include "mozilla/Attributes.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "nsIOService.h"
|
#include "nsIOService.h"
|
||||||
#include "nsStreamUtils.h"
|
#include "nsStreamUtils.h"
|
||||||
#include "nsNetSegmentUtils.h"
|
#include "nsNetSegmentUtils.h"
|
||||||
|
|
@ -1227,8 +1226,7 @@ nsSocketTransport::BuildSocket(PRFileDesc *&fd, bool &proxyTransparent, bool &us
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
SOCKET_LOG((" error pushing io layer [%u:%s rv=%x]\n", i, mTypes[i], rv));
|
SOCKET_LOG((" error pushing io layer [%u:%s rv=%x]\n", i, mTypes[i], rv));
|
||||||
if (fd) {
|
if (fd) {
|
||||||
CloseSocket(fd,
|
CloseSocket(fd);
|
||||||
mSocketTransportService->IsTelemetryEnabledAndNotSleepPhase());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1396,8 +1394,7 @@ nsSocketTransport::InitiateSocket()
|
||||||
// inform socket transport about this newly created socket...
|
// inform socket transport about this newly created socket...
|
||||||
rv = mSocketTransportService->AttachSocket(fd, this);
|
rv = mSocketTransportService->AttachSocket(fd, this);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
CloseSocket(fd,
|
CloseSocket(fd);
|
||||||
mSocketTransportService->IsTelemetryEnabledAndNotSleepPhase());
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
mAttached = true;
|
mAttached = true;
|
||||||
|
|
@ -1454,26 +1451,8 @@ nsSocketTransport::InitiateSocket()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// We use PRIntervalTime here because we need
|
|
||||||
// nsIOService::LastOfflineStateChange time and
|
|
||||||
// nsIOService::LastConectivityChange time to be atomic.
|
|
||||||
PRIntervalTime connectStarted = 0;
|
|
||||||
if (gSocketTransportService->IsTelemetryEnabledAndNotSleepPhase()) {
|
|
||||||
connectStarted = PR_IntervalNow();
|
|
||||||
}
|
|
||||||
|
|
||||||
status = PR_Connect(fd, &prAddr, NS_SOCKET_CONNECT_TIMEOUT);
|
status = PR_Connect(fd, &prAddr, NS_SOCKET_CONNECT_TIMEOUT);
|
||||||
|
|
||||||
if (gSocketTransportService->IsTelemetryEnabledAndNotSleepPhase() &&
|
|
||||||
connectStarted) {
|
|
||||||
SendPRBlockingTelemetry(connectStarted,
|
|
||||||
Telemetry::PRCONNECT_BLOCKING_TIME_NORMAL,
|
|
||||||
Telemetry::PRCONNECT_BLOCKING_TIME_SHUTDOWN,
|
|
||||||
Telemetry::PRCONNECT_BLOCKING_TIME_CONNECTIVITY_CHANGE,
|
|
||||||
Telemetry::PRCONNECT_BLOCKING_TIME_LINK_CHANGE,
|
|
||||||
Telemetry::PRCONNECT_BLOCKING_TIME_OFFLINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status == PR_SUCCESS) {
|
if (status == PR_SUCCESS) {
|
||||||
//
|
//
|
||||||
// we are connected!
|
// we are connected!
|
||||||
|
|
@ -1532,16 +1511,6 @@ nsSocketTransport::InitiateSocket()
|
||||||
// The connection was refused...
|
// The connection was refused...
|
||||||
//
|
//
|
||||||
else {
|
else {
|
||||||
if (gSocketTransportService->IsTelemetryEnabledAndNotSleepPhase() &&
|
|
||||||
connectStarted) {
|
|
||||||
SendPRBlockingTelemetry(connectStarted,
|
|
||||||
Telemetry::PRCONNECT_FAIL_BLOCKING_TIME_NORMAL,
|
|
||||||
Telemetry::PRCONNECT_FAIL_BLOCKING_TIME_SHUTDOWN,
|
|
||||||
Telemetry::PRCONNECT_FAIL_BLOCKING_TIME_CONNECTIVITY_CHANGE,
|
|
||||||
Telemetry::PRCONNECT_FAIL_BLOCKING_TIME_LINK_CHANGE,
|
|
||||||
Telemetry::PRCONNECT_FAIL_BLOCKING_TIME_OFFLINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = ErrorAccordingToNSPR(code);
|
rv = ErrorAccordingToNSPR(code);
|
||||||
if ((rv == NS_ERROR_CONNECTION_REFUSED) && !mProxyHost.IsEmpty())
|
if ((rv == NS_ERROR_CONNECTION_REFUSED) && !mProxyHost.IsEmpty())
|
||||||
rv = NS_ERROR_PROXY_CONNECTION_REFUSED;
|
rv = NS_ERROR_PROXY_CONNECTION_REFUSED;
|
||||||
|
|
@ -1779,8 +1748,7 @@ public:
|
||||||
|
|
||||||
NS_IMETHOD Run() override
|
NS_IMETHOD Run() override
|
||||||
{
|
{
|
||||||
nsSocketTransport::CloseSocket(mFD,
|
nsSocketTransport::CloseSocket(mFD);
|
||||||
gSocketTransportService->IsTelemetryEnabledAndNotSleepPhase());
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
|
|
@ -1817,8 +1785,7 @@ nsSocketTransport::ReleaseFD_Locked(PRFileDesc *fd)
|
||||||
SOCKET_LOG(("Intentional leak"));
|
SOCKET_LOG(("Intentional leak"));
|
||||||
} else if (PR_GetCurrentThread() == gSocketThread) {
|
} else if (PR_GetCurrentThread() == gSocketThread) {
|
||||||
SOCKET_LOG(("nsSocketTransport: calling PR_Close [this=%p]\n", this));
|
SOCKET_LOG(("nsSocketTransport: calling PR_Close [this=%p]\n", this));
|
||||||
CloseSocket(mFD,
|
CloseSocket(mFD);
|
||||||
mSocketTransportService->IsTelemetryEnabledAndNotSleepPhase());
|
|
||||||
} else {
|
} else {
|
||||||
// Can't PR_Close() a socket off STS thread. Thunk it to STS to die
|
// Can't PR_Close() a socket off STS thread. Thunk it to STS to die
|
||||||
STS_PRCloseOnSocketTransport(mFD);
|
STS_PRCloseOnSocketTransport(mFD);
|
||||||
|
|
@ -1976,26 +1943,7 @@ nsSocketTransport::OnSocketReady(PRFileDesc *fd, int16_t outFlags)
|
||||||
// We do not need to do PR_ConnectContinue when we are already
|
// We do not need to do PR_ConnectContinue when we are already
|
||||||
// shutting down.
|
// shutting down.
|
||||||
|
|
||||||
// We use PRIntervalTime here because we need
|
|
||||||
// nsIOService::LastOfflineStateChange time and
|
|
||||||
// nsIOService::LastConectivityChange time to be atomic.
|
|
||||||
PRIntervalTime connectStarted = 0;
|
|
||||||
if (gSocketTransportService->IsTelemetryEnabledAndNotSleepPhase()) {
|
|
||||||
connectStarted = PR_IntervalNow();
|
|
||||||
}
|
|
||||||
|
|
||||||
PRStatus status = PR_ConnectContinue(fd, outFlags);
|
PRStatus status = PR_ConnectContinue(fd, outFlags);
|
||||||
|
|
||||||
if (gSocketTransportService->IsTelemetryEnabledAndNotSleepPhase() &&
|
|
||||||
connectStarted) {
|
|
||||||
SendPRBlockingTelemetry(connectStarted,
|
|
||||||
Telemetry::PRCONNECTCONTINUE_BLOCKING_TIME_NORMAL,
|
|
||||||
Telemetry::PRCONNECTCONTINUE_BLOCKING_TIME_SHUTDOWN,
|
|
||||||
Telemetry::PRCONNECTCONTINUE_BLOCKING_TIME_CONNECTIVITY_CHANGE,
|
|
||||||
Telemetry::PRCONNECTCONTINUE_BLOCKING_TIME_LINK_CHANGE,
|
|
||||||
Telemetry::PRCONNECTCONTINUE_BLOCKING_TIME_OFFLINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status == PR_SUCCESS) {
|
if (status == PR_SUCCESS) {
|
||||||
//
|
//
|
||||||
// we are connected!
|
// we are connected!
|
||||||
|
|
@ -3160,41 +3108,13 @@ nsSocketTransport::PRFileDescAutoLock::SetKeepaliveVals(bool aEnabled,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nsSocketTransport::CloseSocket(PRFileDesc *aFd, bool aTelemetryEnabled)
|
nsSocketTransport::CloseSocket(PRFileDesc *aFd)
|
||||||
{
|
{
|
||||||
#if defined(XP_WIN)
|
#if defined(XP_WIN)
|
||||||
AttachShutdownLayer(aFd);
|
AttachShutdownLayer(aFd);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// We use PRIntervalTime here because we need
|
|
||||||
// nsIOService::LastOfflineStateChange time and
|
|
||||||
// nsIOService::LastConectivityChange time to be atomic.
|
|
||||||
PRIntervalTime closeStarted;
|
|
||||||
if (aTelemetryEnabled) {
|
|
||||||
closeStarted = PR_IntervalNow();
|
|
||||||
}
|
|
||||||
|
|
||||||
PR_Close(aFd);
|
PR_Close(aFd);
|
||||||
|
|
||||||
if (aTelemetryEnabled) {
|
|
||||||
SendPRBlockingTelemetry(closeStarted,
|
|
||||||
Telemetry::PRCLOSE_TCP_BLOCKING_TIME_NORMAL,
|
|
||||||
Telemetry::PRCLOSE_TCP_BLOCKING_TIME_SHUTDOWN,
|
|
||||||
Telemetry::PRCLOSE_TCP_BLOCKING_TIME_CONNECTIVITY_CHANGE,
|
|
||||||
Telemetry::PRCLOSE_TCP_BLOCKING_TIME_LINK_CHANGE,
|
|
||||||
Telemetry::PRCLOSE_TCP_BLOCKING_TIME_OFFLINE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nsSocketTransport::SendPRBlockingTelemetry(PRIntervalTime aStart,
|
|
||||||
Telemetry::ID aIDNormal,
|
|
||||||
Telemetry::ID aIDShutdown,
|
|
||||||
Telemetry::ID aIDConnectivityChange,
|
|
||||||
Telemetry::ID aIDLinkChange,
|
|
||||||
Telemetry::ID aIDOffline)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace net
|
} // namespace net
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
#include "nsIClassInfo.h"
|
#include "nsIClassInfo.h"
|
||||||
#include "mozilla/net/DNS.h"
|
#include "mozilla/net/DNS.h"
|
||||||
#include "nsASocketHandler.h"
|
#include "nsASocketHandler.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
|
|
||||||
#include "prerror.h"
|
#include "prerror.h"
|
||||||
#include "nsAutoPtr.h"
|
#include "nsAutoPtr.h"
|
||||||
|
|
@ -169,13 +168,7 @@ public:
|
||||||
|
|
||||||
uint64_t ByteCountReceived() override { return mInput.ByteCount(); }
|
uint64_t ByteCountReceived() override { return mInput.ByteCount(); }
|
||||||
uint64_t ByteCountSent() override { return mOutput.ByteCount(); }
|
uint64_t ByteCountSent() override { return mOutput.ByteCount(); }
|
||||||
static void CloseSocket(PRFileDesc *aFd, bool aTelemetryEnabled);
|
static void CloseSocket(PRFileDesc *aFd);
|
||||||
static void SendPRBlockingTelemetry(PRIntervalTime aStart,
|
|
||||||
Telemetry::ID aIDNormal,
|
|
||||||
Telemetry::ID aIDShutdown,
|
|
||||||
Telemetry::ID aIDConnectivityChange,
|
|
||||||
Telemetry::ID aIDLinkChange,
|
|
||||||
Telemetry::ID aIDOffline);
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual ~nsSocketTransport();
|
virtual ~nsSocketTransport();
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
#include "mozilla/PublicSSL.h"
|
#include "mozilla/PublicSSL.h"
|
||||||
#include "mozilla/ChaosMode.h"
|
#include "mozilla/ChaosMode.h"
|
||||||
#include "mozilla/PodOperations.h"
|
#include "mozilla/PodOperations.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "nsThreadUtils.h"
|
#include "nsThreadUtils.h"
|
||||||
#include "nsIFile.h"
|
#include "nsIFile.h"
|
||||||
#include "nsIWidget.h"
|
#include "nsIWidget.h"
|
||||||
|
|
@ -51,7 +50,6 @@ Atomic<PRThread*, Relaxed> gSocketThread;
|
||||||
#define SOCKET_LIMIT_MIN 50U
|
#define SOCKET_LIMIT_MIN 50U
|
||||||
#define BLIP_INTERVAL_PREF "network.activity.blipIntervalMilliseconds"
|
#define BLIP_INTERVAL_PREF "network.activity.blipIntervalMilliseconds"
|
||||||
#define MAX_TIME_BETWEEN_TWO_POLLS "network.sts.max_time_for_events_between_two_polls"
|
#define MAX_TIME_BETWEEN_TWO_POLLS "network.sts.max_time_for_events_between_two_polls"
|
||||||
#define TELEMETRY_PREF "toolkit.telemetry.enabled"
|
|
||||||
#define MAX_TIME_FOR_PR_CLOSE_DURING_SHUTDOWN "network.sts.max_time_for_pr_close_during_shutdown"
|
#define MAX_TIME_FOR_PR_CLOSE_DURING_SHUTDOWN "network.sts.max_time_for_pr_close_during_shutdown"
|
||||||
|
|
||||||
#define REPAIR_POLLABLE_EVENT_TIME 10
|
#define REPAIR_POLLABLE_EVENT_TIME 10
|
||||||
|
|
@ -83,9 +81,7 @@ nsSocketTransportService::nsSocketTransportService()
|
||||||
, mKeepaliveEnabledPref(false)
|
, mKeepaliveEnabledPref(false)
|
||||||
, mServingPendingQueue(false)
|
, mServingPendingQueue(false)
|
||||||
, mMaxTimePerPollIter(100)
|
, mMaxTimePerPollIter(100)
|
||||||
, mTelemetryEnabledPref(false)
|
|
||||||
, mMaxTimeForPrClosePref(PR_SecondsToInterval(5))
|
, mMaxTimeForPrClosePref(PR_SecondsToInterval(5))
|
||||||
, mSleepPhase(false)
|
|
||||||
, mProbedMaxCount(false)
|
, mProbedMaxCount(false)
|
||||||
#if defined(XP_WIN)
|
#if defined(XP_WIN)
|
||||||
, mPolling(false)
|
, mPolling(false)
|
||||||
|
|
@ -215,16 +211,9 @@ nsSocketTransportService::AttachSocket(PRFileDesc *fd, nsASocketHandler *handler
|
||||||
bool
|
bool
|
||||||
nsSocketTransportService::CanAttachSocket()
|
nsSocketTransportService::CanAttachSocket()
|
||||||
{
|
{
|
||||||
static bool reported900FDLimit = false;
|
|
||||||
|
|
||||||
uint32_t total = mActiveCount + mIdleCount;
|
uint32_t total = mActiveCount + mIdleCount;
|
||||||
bool rv = total < gMaxCount;
|
bool rv = total < gMaxCount;
|
||||||
|
|
||||||
if (mTelemetryEnabledPref &&
|
|
||||||
(((total >= 900) || !rv) && !reported900FDLimit)) {
|
|
||||||
reported900FDLimit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -442,13 +431,11 @@ nsSocketTransportService::PollTimeout()
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t
|
int32_t
|
||||||
nsSocketTransportService::Poll(uint32_t *interval,
|
nsSocketTransportService::Poll(uint32_t *interval)
|
||||||
TimeDuration *pollDuration)
|
|
||||||
{
|
{
|
||||||
PRPollDesc *pollList;
|
PRPollDesc *pollList;
|
||||||
uint32_t pollCount;
|
uint32_t pollCount;
|
||||||
PRIntervalTime pollTimeout;
|
PRIntervalTime pollTimeout;
|
||||||
*pollDuration = 0;
|
|
||||||
|
|
||||||
// If there are pending events for this thread then
|
// If there are pending events for this thread then
|
||||||
// DoPollIteration() should service the network without blocking.
|
// DoPollIteration() should service the network without blocking.
|
||||||
|
|
@ -474,8 +461,6 @@ nsSocketTransportService::Poll(uint32_t *interval,
|
||||||
|
|
||||||
PRIntervalTime ts = PR_IntervalNow();
|
PRIntervalTime ts = PR_IntervalNow();
|
||||||
|
|
||||||
TimeStamp pollStart;
|
|
||||||
|
|
||||||
SOCKET_LOG((" timeout = %i milliseconds\n",
|
SOCKET_LOG((" timeout = %i milliseconds\n",
|
||||||
PR_IntervalToMilliseconds(pollTimeout)));
|
PR_IntervalToMilliseconds(pollTimeout)));
|
||||||
int32_t rv = PR_Poll(pollList, pollCount, pollTimeout);
|
int32_t rv = PR_Poll(pollList, pollCount, pollTimeout);
|
||||||
|
|
@ -534,7 +519,6 @@ nsSocketTransportService::Init()
|
||||||
tmpPrefService->AddObserver(KEEPALIVE_RETRY_INTERVAL_PREF, this, false);
|
tmpPrefService->AddObserver(KEEPALIVE_RETRY_INTERVAL_PREF, this, false);
|
||||||
tmpPrefService->AddObserver(KEEPALIVE_PROBE_COUNT_PREF, this, false);
|
tmpPrefService->AddObserver(KEEPALIVE_PROBE_COUNT_PREF, this, false);
|
||||||
tmpPrefService->AddObserver(MAX_TIME_BETWEEN_TWO_POLLS, this, false);
|
tmpPrefService->AddObserver(MAX_TIME_BETWEEN_TWO_POLLS, this, false);
|
||||||
tmpPrefService->AddObserver(TELEMETRY_PREF, this, false);
|
|
||||||
tmpPrefService->AddObserver(MAX_TIME_FOR_PR_CLOSE_DURING_SHUTDOWN, this, false);
|
tmpPrefService->AddObserver(MAX_TIME_FOR_PR_CLOSE_DURING_SHUTDOWN, this, false);
|
||||||
}
|
}
|
||||||
UpdatePrefs();
|
UpdatePrefs();
|
||||||
|
|
@ -543,8 +527,6 @@ nsSocketTransportService::Init()
|
||||||
if (obsSvc) {
|
if (obsSvc) {
|
||||||
obsSvc->AddObserver(this, "profile-initial-state", false);
|
obsSvc->AddObserver(this, "profile-initial-state", false);
|
||||||
obsSvc->AddObserver(this, "last-pb-context-exited", false);
|
obsSvc->AddObserver(this, "last-pb-context-exited", false);
|
||||||
obsSvc->AddObserver(this, NS_WIDGET_SLEEP_OBSERVER_TOPIC, true);
|
|
||||||
obsSvc->AddObserver(this, NS_WIDGET_WAKE_OBSERVER_TOPIC, true);
|
|
||||||
obsSvc->AddObserver(this, "xpcom-shutdown-threads", false);
|
obsSvc->AddObserver(this, "xpcom-shutdown-threads", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -611,16 +593,9 @@ nsSocketTransportService::ShutdownThread()
|
||||||
if (obsSvc) {
|
if (obsSvc) {
|
||||||
obsSvc->RemoveObserver(this, "profile-initial-state");
|
obsSvc->RemoveObserver(this, "profile-initial-state");
|
||||||
obsSvc->RemoveObserver(this, "last-pb-context-exited");
|
obsSvc->RemoveObserver(this, "last-pb-context-exited");
|
||||||
obsSvc->RemoveObserver(this, NS_WIDGET_SLEEP_OBSERVER_TOPIC);
|
|
||||||
obsSvc->RemoveObserver(this, NS_WIDGET_WAKE_OBSERVER_TOPIC);
|
|
||||||
obsSvc->RemoveObserver(this, "xpcom-shutdown-threads");
|
obsSvc->RemoveObserver(this, "xpcom-shutdown-threads");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mAfterWakeUpTimer) {
|
|
||||||
mAfterWakeUpTimer->Cancel();
|
|
||||||
mAfterWakeUpTimer = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
NetworkActivityMonitor::Shutdown();
|
NetworkActivityMonitor::Shutdown();
|
||||||
|
|
||||||
mInitialized = false;
|
mInitialized = false;
|
||||||
|
|
@ -855,24 +830,16 @@ nsSocketTransportService::Run()
|
||||||
// make sure the pseudo random number generator is seeded on this thread
|
// make sure the pseudo random number generator is seeded on this thread
|
||||||
srand(static_cast<unsigned>(PR_Now()));
|
srand(static_cast<unsigned>(PR_Now()));
|
||||||
|
|
||||||
// Time blocked in poll().
|
|
||||||
TimeDuration singlePollDuration;
|
|
||||||
|
|
||||||
int numberOfPendingEvents;
|
int numberOfPendingEvents;
|
||||||
|
|
||||||
// If there is too many pending events queued, we will run some poll()
|
// If there is too many pending events queued, we will run some poll()
|
||||||
// between them and the following variable is cumulative time spent
|
// between them.
|
||||||
// blocking in poll().
|
|
||||||
TimeDuration pollDuration;
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
bool pendingEvents = false;
|
bool pendingEvents = false;
|
||||||
|
|
||||||
numberOfPendingEvents = 0;
|
numberOfPendingEvents = 0;
|
||||||
pollDuration = 0;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
DoPollIteration(&singlePollDuration);
|
DoPollIteration();
|
||||||
|
|
||||||
mRawThread->HasPendingEvents(&pendingEvents);
|
mRawThread->HasPendingEvents(&pendingEvents);
|
||||||
if (pendingEvents) {
|
if (pendingEvents) {
|
||||||
|
|
@ -963,7 +930,7 @@ nsSocketTransportService::Reset(bool aGuardLocals)
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsSocketTransportService::DoPollIteration(TimeDuration *pollDuration)
|
nsSocketTransportService::DoPollIteration()
|
||||||
{
|
{
|
||||||
SOCKET_LOG(("STS poll iter\n"));
|
SOCKET_LOG(("STS poll iter\n"));
|
||||||
|
|
||||||
|
|
@ -1023,13 +990,12 @@ nsSocketTransportService::DoPollIteration(TimeDuration *pollDuration)
|
||||||
// Measures seconds spent while blocked on PR_Poll
|
// Measures seconds spent while blocked on PR_Poll
|
||||||
uint32_t pollInterval = 0;
|
uint32_t pollInterval = 0;
|
||||||
int32_t n = 0;
|
int32_t n = 0;
|
||||||
*pollDuration = 0;
|
|
||||||
if (!gIOService->IsNetTearingDown()) {
|
if (!gIOService->IsNetTearingDown()) {
|
||||||
// Let's not do polling during shutdown.
|
// Let's not do polling during shutdown.
|
||||||
#if defined(XP_WIN)
|
#if defined(XP_WIN)
|
||||||
StartPolling();
|
StartPolling();
|
||||||
#endif
|
#endif
|
||||||
n = Poll(&pollInterval, pollDuration);
|
n = Poll(&pollInterval);
|
||||||
#if defined(XP_WIN)
|
#if defined(XP_WIN)
|
||||||
EndPolling();
|
EndPolling();
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1180,13 +1146,6 @@ nsSocketTransportService::UpdatePrefs()
|
||||||
mMaxTimePerPollIter = maxTimePref;
|
mMaxTimePerPollIter = maxTimePref;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool telemetryPref = false;
|
|
||||||
rv = tmpPrefService->GetBoolPref(TELEMETRY_PREF,
|
|
||||||
&telemetryPref);
|
|
||||||
if (NS_SUCCEEDED(rv)) {
|
|
||||||
mTelemetryEnabledPref = telemetryPref;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t maxTimeForPrClosePref;
|
int32_t maxTimeForPrClosePref;
|
||||||
rv = tmpPrefService->GetIntPref(MAX_TIME_FOR_PR_CLOSE_DURING_SHUTDOWN,
|
rv = tmpPrefService->GetIntPref(MAX_TIME_FOR_PR_CLOSE_DURING_SHUTDOWN,
|
||||||
&maxTimeForPrClosePref);
|
&maxTimeForPrClosePref);
|
||||||
|
|
@ -1264,10 +1223,6 @@ nsSocketTransportService::Observe(nsISupports *subject,
|
||||||
|
|
||||||
if (!strcmp(topic, NS_TIMER_CALLBACK_TOPIC)) {
|
if (!strcmp(topic, NS_TIMER_CALLBACK_TOPIC)) {
|
||||||
nsCOMPtr<nsITimer> timer = do_QueryInterface(subject);
|
nsCOMPtr<nsITimer> timer = do_QueryInterface(subject);
|
||||||
if (timer == mAfterWakeUpTimer) {
|
|
||||||
mAfterWakeUpTimer = nullptr;
|
|
||||||
mSleepPhase = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(XP_WIN)
|
#if defined(XP_WIN)
|
||||||
if (timer == mPollRepairTimer) {
|
if (timer == mPollRepairTimer) {
|
||||||
|
|
@ -1275,19 +1230,6 @@ nsSocketTransportService::Observe(nsISupports *subject,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} else if (!strcmp(topic, NS_WIDGET_SLEEP_OBSERVER_TOPIC)) {
|
|
||||||
mSleepPhase = true;
|
|
||||||
if (mAfterWakeUpTimer) {
|
|
||||||
mAfterWakeUpTimer->Cancel();
|
|
||||||
mAfterWakeUpTimer = nullptr;
|
|
||||||
}
|
|
||||||
} else if (!strcmp(topic, NS_WIDGET_WAKE_OBSERVER_TOPIC)) {
|
|
||||||
if (mSleepPhase && !mAfterWakeUpTimer) {
|
|
||||||
mAfterWakeUpTimer = do_CreateInstance("@mozilla.org/timer;1");
|
|
||||||
if (mAfterWakeUpTimer) {
|
|
||||||
mAfterWakeUpTimer->Init(this, 2000, nsITimer::TYPE_ONE_SHOT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (!strcmp(topic, "xpcom-shutdown-threads")) {
|
} else if (!strcmp(topic, "xpcom-shutdown-threads")) {
|
||||||
ShutdownThread();
|
ShutdownThread();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,8 +118,6 @@ public:
|
||||||
// Returns true if keepalives are enabled in prefs.
|
// Returns true if keepalives are enabled in prefs.
|
||||||
bool IsKeepaliveEnabled() { return mKeepaliveEnabledPref; }
|
bool IsKeepaliveEnabled() { return mKeepaliveEnabledPref; }
|
||||||
|
|
||||||
bool IsTelemetryEnabledAndNotSleepPhase() { return mTelemetryEnabledPref &&
|
|
||||||
!mSleepPhase; }
|
|
||||||
PRIntervalTime MaxTimeForPrClosePref() {return mMaxTimeForPrClosePref; }
|
PRIntervalTime MaxTimeForPrClosePref() {return mMaxTimeForPrClosePref; }
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
@ -191,7 +189,7 @@ private:
|
||||||
|
|
||||||
bool GrowActiveList();
|
bool GrowActiveList();
|
||||||
bool GrowIdleList();
|
bool GrowIdleList();
|
||||||
void InitMaxCount();
|
void InitMaxCount();
|
||||||
|
|
||||||
// Total bytes number transfered through all the sockets except active ones
|
// Total bytes number transfered through all the sockets except active ones
|
||||||
uint64_t mSentBytesCount;
|
uint64_t mSentBytesCount;
|
||||||
|
|
@ -206,15 +204,12 @@ private:
|
||||||
PRPollDesc *mPollList; /* mListSize + 1 entries */
|
PRPollDesc *mPollList; /* mListSize + 1 entries */
|
||||||
|
|
||||||
PRIntervalTime PollTimeout(); // computes ideal poll timeout
|
PRIntervalTime PollTimeout(); // computes ideal poll timeout
|
||||||
nsresult DoPollIteration(TimeDuration *pollDuration);
|
nsresult DoPollIteration();
|
||||||
// perfoms a single poll iteration
|
// perfoms a single poll iteration
|
||||||
int32_t Poll(uint32_t *interval,
|
int32_t Poll(uint32_t *interval);
|
||||||
TimeDuration *pollDuration);
|
|
||||||
// calls PR_Poll. the out param
|
// calls PR_Poll. the out param
|
||||||
// interval indicates the poll
|
// interval indicates the poll
|
||||||
// duration in seconds.
|
// duration in seconds.
|
||||||
// pollDuration is used only for
|
|
||||||
// telemetry
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// pending socket queue - see NotifyWhenCanAttachSocket
|
// pending socket queue - see NotifyWhenCanAttachSocket
|
||||||
|
|
@ -236,14 +231,8 @@ private:
|
||||||
|
|
||||||
Atomic<bool> mServingPendingQueue;
|
Atomic<bool> mServingPendingQueue;
|
||||||
Atomic<int32_t, Relaxed> mMaxTimePerPollIter;
|
Atomic<int32_t, Relaxed> mMaxTimePerPollIter;
|
||||||
Atomic<bool, Relaxed> mTelemetryEnabledPref;
|
|
||||||
Atomic<PRIntervalTime, Relaxed> mMaxTimeForPrClosePref;
|
Atomic<PRIntervalTime, Relaxed> mMaxTimeForPrClosePref;
|
||||||
|
|
||||||
// Between a computer going to sleep and waking up the PR_*** telemetry
|
|
||||||
// will be corrupted - so do not record it.
|
|
||||||
Atomic<bool, Relaxed> mSleepPhase;
|
|
||||||
nsCOMPtr<nsITimer> mAfterWakeUpTimer;
|
|
||||||
|
|
||||||
void OnKeepaliveEnabledPrefChange();
|
void OnKeepaliveEnabledPrefChange();
|
||||||
void NotifyKeepaliveEnabledPrefChange(SocketContext *sock);
|
void NotifyKeepaliveEnabledPrefChange(SocketContext *sock);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
#include "mozilla/EndianUtils.h"
|
#include "mozilla/EndianUtils.h"
|
||||||
#include "mozilla/dom/TypedArray.h"
|
#include "mozilla/dom/TypedArray.h"
|
||||||
#include "mozilla/HoldDropJSObjects.h"
|
#include "mozilla/HoldDropJSObjects.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
|
|
||||||
#include "nsSocketTransport2.h"
|
#include "nsSocketTransport2.h"
|
||||||
#include "nsUDPSocket.h"
|
#include "nsUDPSocket.h"
|
||||||
|
|
@ -275,7 +274,6 @@ void
|
||||||
nsUDPSocket::AddOutputBytes(uint64_t aBytes)
|
nsUDPSocket::AddOutputBytes(uint64_t aBytes)
|
||||||
{
|
{
|
||||||
mByteWriteCount += aBytes;
|
mByteWriteCount += aBytes;
|
||||||
SaveNetworkStats(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -465,7 +463,6 @@ nsUDPSocket::OnSocketReady(PRFileDesc *fd, int16_t outFlags)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mByteReadCount += count;
|
mByteReadCount += count;
|
||||||
SaveNetworkStats(false);
|
|
||||||
|
|
||||||
FallibleTArray<uint8_t> data;
|
FallibleTArray<uint8_t> data;
|
||||||
if (!data.AppendElements(buff, count, fallible)) {
|
if (!data.AppendElements(buff, count, fallible)) {
|
||||||
|
|
@ -512,7 +509,6 @@ nsUDPSocket::OnSocketDetached(PRFileDesc *fd)
|
||||||
NS_ASSERTION(mFD == fd, "wrong file descriptor");
|
NS_ASSERTION(mFD == fd, "wrong file descriptor");
|
||||||
CloseSocket();
|
CloseSocket();
|
||||||
}
|
}
|
||||||
SaveNetworkStats(true);
|
|
||||||
|
|
||||||
if (mListener)
|
if (mListener)
|
||||||
{
|
{
|
||||||
|
|
@ -726,7 +722,6 @@ nsUDPSocket::Close()
|
||||||
// expects this happen synchronously.
|
// expects this happen synchronously.
|
||||||
CloseSocket();
|
CloseSocket();
|
||||||
|
|
||||||
SaveNetworkStats(true);
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -754,12 +749,6 @@ nsUDPSocket::GetLocalAddr(nsINetAddr * *aResult)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
nsUDPSocket::SaveNetworkStats(bool aEnforce)
|
|
||||||
{
|
|
||||||
/*** STUB ***/
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
nsUDPSocket::CloseSocket()
|
nsUDPSocket::CloseSocket()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,6 @@ private:
|
||||||
const PRNetAddr& aIface);
|
const PRNetAddr& aIface);
|
||||||
nsresult SetMulticastInterfaceInternal(const PRNetAddr& aIface);
|
nsresult SetMulticastInterfaceInternal(const PRNetAddr& aIface);
|
||||||
|
|
||||||
void SaveNetworkStats(bool aEnforce);
|
|
||||||
|
|
||||||
void CloseSocket();
|
void CloseSocket();
|
||||||
|
|
||||||
// lock protects access to mListener;
|
// lock protects access to mListener;
|
||||||
|
|
|
||||||
|
|
@ -964,8 +964,6 @@ CacheStorageService::RegisterEntry(CacheEntry* aEntry)
|
||||||
if (mShutdown || !aEntry->CanRegister())
|
if (mShutdown || !aEntry->CanRegister())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TelemetryRecordEntryCreation(aEntry);
|
|
||||||
|
|
||||||
LOG(("CacheStorageService::RegisterEntry [entry=%p]", aEntry));
|
LOG(("CacheStorageService::RegisterEntry [entry=%p]", aEntry));
|
||||||
|
|
||||||
MemoryPool& pool = Pool(aEntry->IsUsingDisk());
|
MemoryPool& pool = Pool(aEntry->IsUsingDisk());
|
||||||
|
|
@ -983,8 +981,6 @@ CacheStorageService::UnregisterEntry(CacheEntry* aEntry)
|
||||||
if (!aEntry->IsRegistered())
|
if (!aEntry->IsRegistered())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TelemetryRecordEntryRemoval(aEntry);
|
|
||||||
|
|
||||||
LOG(("CacheStorageService::UnregisterEntry [entry=%p]", aEntry));
|
LOG(("CacheStorageService::UnregisterEntry [entry=%p]", aEntry));
|
||||||
|
|
||||||
MemoryPool& pool = Pool(aEntry->IsUsingDisk());
|
MemoryPool& pool = Pool(aEntry->IsUsingDisk());
|
||||||
|
|
@ -2018,100 +2014,6 @@ uint32_t CacheStorageService::CacheQueueSize(bool highPriority)
|
||||||
return thread->QueueSize(highPriority);
|
return thread->QueueSize(highPriority);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Telementry collection
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
bool TelemetryEntryKey(CacheEntry const* entry, nsAutoCString& key)
|
|
||||||
{
|
|
||||||
nsAutoCString entryKey;
|
|
||||||
nsresult rv = entry->HashingKey(entryKey);
|
|
||||||
if (NS_FAILED(rv))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (entry->GetStorageID().IsEmpty()) {
|
|
||||||
// Hopefully this will be const-copied, saves some memory
|
|
||||||
key = entryKey;
|
|
||||||
} else {
|
|
||||||
key.Assign(entry->GetStorageID());
|
|
||||||
key.Append(':');
|
|
||||||
key.Append(entryKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
void
|
|
||||||
CacheStorageService::TelemetryPrune(TimeStamp &now)
|
|
||||||
{
|
|
||||||
static TimeDuration const oneMinute = TimeDuration::FromSeconds(60);
|
|
||||||
static TimeStamp dontPruneUntil = now + oneMinute;
|
|
||||||
if (now < dontPruneUntil)
|
|
||||||
return;
|
|
||||||
|
|
||||||
static TimeDuration const fifteenMinutes = TimeDuration::FromSeconds(900);
|
|
||||||
for (auto iter = mPurgeTimeStamps.Iter(); !iter.Done(); iter.Next()) {
|
|
||||||
if (now - iter.Data() > fifteenMinutes) {
|
|
||||||
// We are not interested in resurrection of entries after 15 minutes
|
|
||||||
// of time. This is also the limit for the telemetry.
|
|
||||||
iter.Remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dontPruneUntil = now + oneMinute;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CacheStorageService::TelemetryRecordEntryCreation(CacheEntry const* entry)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(CacheStorageService::IsOnManagementThread());
|
|
||||||
|
|
||||||
nsAutoCString key;
|
|
||||||
if (!TelemetryEntryKey(entry, key))
|
|
||||||
return;
|
|
||||||
|
|
||||||
TimeStamp now = TimeStamp::NowLoRes();
|
|
||||||
TelemetryPrune(now);
|
|
||||||
|
|
||||||
// When an entry is craeted (registered actually) we check if there is
|
|
||||||
// a timestamp marked when this very same cache entry has been removed
|
|
||||||
// (deregistered) because of over-memory-limit purging. If there is such
|
|
||||||
// a timestamp found accumulate telemetry on how long the entry was away.
|
|
||||||
TimeStamp timeStamp;
|
|
||||||
if (!mPurgeTimeStamps.Get(key, &timeStamp))
|
|
||||||
return;
|
|
||||||
|
|
||||||
mPurgeTimeStamps.Remove(key);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
CacheStorageService::TelemetryRecordEntryRemoval(CacheEntry const* entry)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(CacheStorageService::IsOnManagementThread());
|
|
||||||
|
|
||||||
// Doomed entries must not be considered, we are only interested in purged
|
|
||||||
// entries. Note that the mIsDoomed flag is always set before deregistration
|
|
||||||
// happens.
|
|
||||||
if (entry->IsDoomed())
|
|
||||||
return;
|
|
||||||
|
|
||||||
nsAutoCString key;
|
|
||||||
if (!TelemetryEntryKey(entry, key))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// When an entry is removed (deregistered actually) we put a timestamp for this
|
|
||||||
// entry to the hashtable so that when the entry is created (registered) again
|
|
||||||
// we know how long it was away. Also accumulate number of AsyncOpen calls on
|
|
||||||
// the entry, this tells us how efficiently the pool actually works.
|
|
||||||
|
|
||||||
TimeStamp now = TimeStamp::NowLoRes();
|
|
||||||
TelemetryPrune(now);
|
|
||||||
mPurgeTimeStamps.Put(key, now);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// nsIMemoryReporter
|
// nsIMemoryReporter
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
|
|
|
||||||
|
|
@ -187,12 +187,6 @@ private:
|
||||||
*/
|
*/
|
||||||
bool IsForcedValidEntry(nsACString const &aEntryKeyWithContext);
|
bool IsForcedValidEntry(nsACString const &aEntryKeyWithContext);
|
||||||
|
|
||||||
private:
|
|
||||||
// These are helpers for telemetry monitoring of the memory pools.
|
|
||||||
void TelemetryPrune(TimeStamp &now);
|
|
||||||
void TelemetryRecordEntryCreation(CacheEntry const* entry);
|
|
||||||
void TelemetryRecordEntryRemoval(CacheEntry const* entry);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Following methods are thread safe to call.
|
// Following methods are thread safe to call.
|
||||||
friend class CacheStorage;
|
friend class CacheStorage;
|
||||||
|
|
@ -370,12 +364,6 @@ private:
|
||||||
uint32_t mWhat;
|
uint32_t mWhat;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Used just for telemetry purposes, accessed only on the management thread.
|
|
||||||
// Note: not included in the memory reporter, this is not expected to be huge
|
|
||||||
// and also would be complicated to report since reporting happens on the main
|
|
||||||
// thread but this table is manipulated on the management thread.
|
|
||||||
nsDataHashtable<nsCStringHashKey, mozilla::TimeStamp> mPurgeTimeStamps;
|
|
||||||
|
|
||||||
// nsICacheTesting
|
// nsICacheTesting
|
||||||
class IOThreadSuspender : public Runnable
|
class IOThreadSuspender : public Runnable
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,6 @@
|
||||||
#include "mozilla/storage.h"
|
#include "mozilla/storage.h"
|
||||||
#include "mozilla/AutoRestore.h"
|
#include "mozilla/AutoRestore.h"
|
||||||
#include "mozilla/FileUtils.h"
|
#include "mozilla/FileUtils.h"
|
||||||
#include "mozilla/Telemetry.h"
|
|
||||||
#include "nsIAppsService.h"
|
#include "nsIAppsService.h"
|
||||||
#include "mozIApplication.h"
|
#include "mozIApplication.h"
|
||||||
#include "mozIApplicationClearPrivateDataParams.h"
|
#include "mozIApplicationClearPrivateDataParams.h"
|
||||||
|
|
@ -120,15 +119,6 @@ static const char kPrefCookiePurgeAge[] = "network.cookie.purgeAge";
|
||||||
static const char kPrefThirdPartySession[] = "network.cookie.thirdparty.sessionOnly";
|
static const char kPrefThirdPartySession[] = "network.cookie.thirdparty.sessionOnly";
|
||||||
static const char kCookieLeaveSecurityAlone[] = "network.cookie.leave-secure-alone";
|
static const char kCookieLeaveSecurityAlone[] = "network.cookie.leave-secure-alone";
|
||||||
|
|
||||||
// For telemetry COOKIE_LEAVE_SECURE_ALONE
|
|
||||||
#define BLOCKED_SECURE_SET_FROM_HTTP 0
|
|
||||||
#define BLOCKED_DOWNGRADE_SECURE 1
|
|
||||||
#define DOWNGRADE_SECURE_FROM_SECURE 2
|
|
||||||
#define EVICTED_NEWER_INSECURE 3
|
|
||||||
#define EVICTED_OLDEST_COOKIE 4
|
|
||||||
#define EVICTED_PREFERRED_COOKIE 5
|
|
||||||
#define EVICTING_SECURE_BLOCKED 6
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bindCookieParameters(mozIStorageBindingParamsArray *aParamsArray,
|
bindCookieParameters(mozIStorageBindingParamsArray *aParamsArray,
|
||||||
const nsCookieKey &aKey,
|
const nsCookieKey &aKey,
|
||||||
|
|
@ -3592,9 +3582,6 @@ nsCookieService::AddInternal(const nsCookieKey &aKey,
|
||||||
MOZ_ASSERT(iter.entry);
|
MOZ_ASSERT(iter.entry);
|
||||||
|
|
||||||
oldCookie = iter.Cookie();
|
oldCookie = iter.Cookie();
|
||||||
if (oldestCookieTime > 0 && mLeaveSecureAlone) {
|
|
||||||
TelemetryForEvictingStaleCookie(oldCookie, oldestCookieTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove the oldest cookie from the domain
|
// remove the oldest cookie from the domain
|
||||||
RemoveCookieFromList(iter);
|
RemoveCookieFromList(iter);
|
||||||
|
|
@ -4619,13 +4606,6 @@ nsCookieService::FindStaleCookie(nsCookieEntry *aEntry,
|
||||||
return actualOldestCookieTime;
|
return actualOldestCookieTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
nsCookieService::TelemetryForEvictingStaleCookie(nsCookie *aEvicted,
|
|
||||||
int64_t oldestCookieTime)
|
|
||||||
{
|
|
||||||
/* STUB */
|
|
||||||
}
|
|
||||||
|
|
||||||
// count the number of cookies stored by a particular host. this is provided by the
|
// count the number of cookies stored by a particular host. this is provided by the
|
||||||
// nsICookieManager2 interface.
|
// nsICookieManager2 interface.
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
|
|
|
||||||
|
|
@ -314,7 +314,6 @@ class nsCookieService final : public nsICookieService
|
||||||
bool FindCookie(const nsCookieKey& aKey, const nsAFlatCString &aHost, const nsAFlatCString &aName, const nsAFlatCString &aPath, nsListIter &aIter);
|
bool FindCookie(const nsCookieKey& aKey, const nsAFlatCString &aHost, const nsAFlatCString &aName, const nsAFlatCString &aPath, nsListIter &aIter);
|
||||||
bool FindSecureCookie(const nsCookieKey& aKey, nsCookie* aCookie);
|
bool FindSecureCookie(const nsCookieKey& aKey, nsCookie* aCookie);
|
||||||
int64_t FindStaleCookie(nsCookieEntry *aEntry, int64_t aCurrentTime, nsIURI* aSource, mozilla::Maybe<bool> aIsSecure, nsListIter &aIter);
|
int64_t FindStaleCookie(nsCookieEntry *aEntry, int64_t aCurrentTime, nsIURI* aSource, mozilla::Maybe<bool> aIsSecure, nsListIter &aIter);
|
||||||
void TelemetryForEvictingStaleCookie(nsCookie* aEvicted, int64_t oldestCookieTime);
|
|
||||||
void NotifyRejected(nsIURI *aHostURI);
|
void NotifyRejected(nsIURI *aHostURI);
|
||||||
void NotifyThirdParty(nsIURI *aHostURI, bool aAccepted, nsIChannel *aChannel);
|
void NotifyThirdParty(nsIURI *aHostURI, bool aAccepted, nsIChannel *aChannel);
|
||||||
void NotifyChanged(nsISupports *aSubject, const char16_t *aData);
|
void NotifyChanged(nsISupports *aSubject, const char16_t *aData);
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue