mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1571219 - Refactor PerformanceMeasure to avoid double-reducing timestamps r=baku
Differential Revision: https://phabricator.services.mozilla.com/D50127 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
9b4c9080e0
commit
85a1130f9f
@ -170,6 +170,9 @@ void Performance::GetEntriesByName(
|
||||
return;
|
||||
}
|
||||
|
||||
// ::Measure expects that results from this function are already
|
||||
// passed through ReduceTimePrecision. mResourceEntries and mUserEntries
|
||||
// are, so the invariant holds.
|
||||
for (PerformanceEntry* entry : mResourceEntries) {
|
||||
if (entry->GetName().Equals(aName) &&
|
||||
(!aEntryType.WasPassed() ||
|
||||
@ -273,13 +276,9 @@ void Performance::Measure(const nsAString& aName,
|
||||
|
||||
DOMHighResTimeStamp startTime;
|
||||
DOMHighResTimeStamp endTime;
|
||||
DOMHighResTimeStamp startTimeUnfuzzed;
|
||||
DOMHighResTimeStamp endTimeUnfuzzed;
|
||||
|
||||
if (aStartMark.WasPassed()) {
|
||||
startTimeUnfuzzed = ResolveTimestampFromName(aStartMark.Value(), aRv);
|
||||
startTime = nsRFPService::ReduceTimePrecisionAsMSecs(
|
||||
startTimeUnfuzzed, GetRandomTimelineSeed());
|
||||
startTime = ResolveTimestampFromName(aStartMark.Value(), aRv);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return;
|
||||
}
|
||||
@ -288,19 +287,15 @@ void Performance::Measure(const nsAString& aName,
|
||||
// in relation to navigation start, this will be zero if a name is not
|
||||
// passed.
|
||||
startTime = 0;
|
||||
startTimeUnfuzzed = 0;
|
||||
}
|
||||
|
||||
if (aEndMark.WasPassed()) {
|
||||
endTimeUnfuzzed = ResolveTimestampFromName(aEndMark.Value(), aRv);
|
||||
endTime = nsRFPService::ReduceTimePrecisionAsMSecs(endTimeUnfuzzed,
|
||||
GetRandomTimelineSeed());
|
||||
endTime = ResolveTimestampFromName(aEndMark.Value(), aRv);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
endTime = Now();
|
||||
endTimeUnfuzzed = Now();
|
||||
}
|
||||
|
||||
RefPtr<PerformanceMeasure> performanceMeasure =
|
||||
@ -310,9 +305,9 @@ void Performance::Measure(const nsAString& aName,
|
||||
#ifdef MOZ_GECKO_PROFILER
|
||||
if (profiler_can_accept_markers()) {
|
||||
TimeStamp startTimeStamp =
|
||||
CreationTimeStamp() + TimeDuration::FromMilliseconds(startTimeUnfuzzed);
|
||||
CreationTimeStamp() + TimeDuration::FromMilliseconds(startTime);
|
||||
TimeStamp endTimeStamp =
|
||||
CreationTimeStamp() + TimeDuration::FromMilliseconds(endTimeUnfuzzed);
|
||||
CreationTimeStamp() + TimeDuration::FromMilliseconds(endTime);
|
||||
|
||||
// Convert to Maybe values so that Optional types do not need to be used in
|
||||
// the profiler.
|
||||
|
@ -188,20 +188,12 @@ bool PerformanceMainThread::IsPerformanceTimingAttribute(
|
||||
|
||||
DOMHighResTimeStamp PerformanceMainThread::GetPerformanceTimingFromString(
|
||||
const nsAString& aProperty) {
|
||||
// ::Measure expects the values returned from this function to be passed
|
||||
// through ReduceTimePrecision already.
|
||||
if (!IsPerformanceTimingAttribute(aProperty)) {
|
||||
return 0;
|
||||
}
|
||||
if (aProperty.EqualsLiteral("navigationStart")) {
|
||||
// DOMHighResTimeStamp is in relation to navigationStart, so this will be
|
||||
// zero.
|
||||
return GetDOMTiming()->GetNavigationStart();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("unloadEventStart")) {
|
||||
return GetDOMTiming()->GetUnloadEventStart();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("unloadEventEnd")) {
|
||||
return GetDOMTiming()->GetUnloadEventEnd();
|
||||
}
|
||||
// Values from Timing() are already reduced
|
||||
if (aProperty.EqualsLiteral("redirectStart")) {
|
||||
return Timing()->RedirectStart();
|
||||
}
|
||||
@ -235,31 +227,38 @@ DOMHighResTimeStamp PerformanceMainThread::GetPerformanceTimingFromString(
|
||||
if (aProperty.EqualsLiteral("responseEnd")) {
|
||||
return Timing()->ResponseEnd();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("domLoading")) {
|
||||
return GetDOMTiming()->GetDomLoading();
|
||||
// Values from GetDOMTiming() are not.
|
||||
DOMHighResTimeStamp retValue;
|
||||
if (aProperty.EqualsLiteral("navigationStart")) {
|
||||
// DOMHighResTimeStamp is in relation to navigationStart, so this will be
|
||||
// zero.
|
||||
retValue = GetDOMTiming()->GetNavigationStart();
|
||||
} else if (aProperty.EqualsLiteral("unloadEventStart")) {
|
||||
retValue = GetDOMTiming()->GetUnloadEventStart();
|
||||
} else if (aProperty.EqualsLiteral("unloadEventEnd")) {
|
||||
retValue = GetDOMTiming()->GetUnloadEventEnd();
|
||||
} else if (aProperty.EqualsLiteral("domLoading")) {
|
||||
retValue = GetDOMTiming()->GetDomLoading();
|
||||
} else if (aProperty.EqualsLiteral("domInteractive")) {
|
||||
retValue = GetDOMTiming()->GetDomInteractive();
|
||||
} else if (aProperty.EqualsLiteral("domContentLoadedEventStart")) {
|
||||
retValue = GetDOMTiming()->GetDomContentLoadedEventStart();
|
||||
} else if (aProperty.EqualsLiteral("domContentLoadedEventEnd")) {
|
||||
retValue = GetDOMTiming()->GetDomContentLoadedEventEnd();
|
||||
} else if (aProperty.EqualsLiteral("domComplete")) {
|
||||
retValue = GetDOMTiming()->GetDomComplete();
|
||||
} else if (aProperty.EqualsLiteral("loadEventStart")) {
|
||||
retValue = GetDOMTiming()->GetLoadEventStart();
|
||||
} else if (aProperty.EqualsLiteral("loadEventEnd")) {
|
||||
retValue = GetDOMTiming()->GetLoadEventEnd();
|
||||
} else {
|
||||
MOZ_CRASH(
|
||||
"IsPerformanceTimingAttribute and GetPerformanceTimingFromString are "
|
||||
"out "
|
||||
"of sync");
|
||||
}
|
||||
if (aProperty.EqualsLiteral("domInteractive")) {
|
||||
return GetDOMTiming()->GetDomInteractive();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("domContentLoadedEventStart")) {
|
||||
return GetDOMTiming()->GetDomContentLoadedEventStart();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("domContentLoadedEventEnd")) {
|
||||
return GetDOMTiming()->GetDomContentLoadedEventEnd();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("domComplete")) {
|
||||
return GetDOMTiming()->GetDomComplete();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("loadEventStart")) {
|
||||
return GetDOMTiming()->GetLoadEventStart();
|
||||
}
|
||||
if (aProperty.EqualsLiteral("loadEventEnd")) {
|
||||
return GetDOMTiming()->GetLoadEventEnd();
|
||||
}
|
||||
MOZ_CRASH(
|
||||
"IsPerformanceTimingAttribute and GetPerformanceTimingFromString are out "
|
||||
"of sync");
|
||||
return 0;
|
||||
return nsRFPService::ReduceTimePrecisionAsMSecs(retValue,
|
||||
GetRandomTimelineSeed());
|
||||
}
|
||||
|
||||
void PerformanceMainThread::InsertUserEntry(PerformanceEntry* aEntry) {
|
||||
|
Loading…
Reference in New Issue
Block a user