mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-03 06:18:38 +09:00
moebius#161: The Performance Resource Timing (make timestamps be relative to startTime)
https://github.com/MoonchildProductions/moebius/pull/161
This commit is contained in:
parent
5558924d7c
commit
e8dbb561f6
20 changed files with 520 additions and 154 deletions
|
|
@ -15,6 +15,7 @@
|
|||
#include "nsPrintfCString.h"
|
||||
#include "mozilla/dom/PerformanceNavigation.h"
|
||||
#include "mozilla/TimeStamp.h"
|
||||
#include "mozilla/Telemetry.h"
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
|
|
@ -32,24 +33,17 @@ nsDOMNavigationTiming::Clear()
|
|||
{
|
||||
mNavigationType = TYPE_RESERVED;
|
||||
mNavigationStartHighRes = 0;
|
||||
mBeforeUnloadStart = 0;
|
||||
mUnloadStart = 0;
|
||||
mUnloadEnd = 0;
|
||||
mLoadEventStart = 0;
|
||||
mLoadEventEnd = 0;
|
||||
mDOMLoading = 0;
|
||||
mDOMInteractive = 0;
|
||||
mDOMContentLoadedEventStart = 0;
|
||||
mDOMContentLoadedEventEnd = 0;
|
||||
mDOMComplete = 0;
|
||||
mBeforeUnloadStart = TimeStamp();
|
||||
mUnloadStart = TimeStamp();
|
||||
mUnloadEnd = TimeStamp();
|
||||
mLoadEventStart = TimeStamp();
|
||||
mLoadEventEnd = TimeStamp();
|
||||
mDOMLoading = TimeStamp();
|
||||
mDOMInteractive = TimeStamp();
|
||||
mDOMContentLoadedEventStart = TimeStamp();
|
||||
mDOMContentLoadedEventEnd = TimeStamp();
|
||||
mDOMComplete = TimeStamp();
|
||||
|
||||
mLoadEventStartSet = false;
|
||||
mLoadEventEndSet = false;
|
||||
mDOMLoadingSet = false;
|
||||
mDOMInteractiveSet = false;
|
||||
mDOMContentLoadedEventStartSet = false;
|
||||
mDOMContentLoadedEventEndSet = false;
|
||||
mDOMCompleteSet = false;
|
||||
mDocShellHasBeenActiveSinceNavigationStart = false;
|
||||
}
|
||||
|
||||
|
|
@ -60,20 +54,15 @@ nsDOMNavigationTiming::TimeStampToDOM(TimeStamp aStamp) const
|
|||
return 0;
|
||||
}
|
||||
|
||||
TimeDuration duration = aStamp - mNavigationStartTimeStamp;
|
||||
TimeDuration duration = aStamp - mNavigationStart;
|
||||
return GetNavigationStart() + static_cast<int64_t>(duration.ToMilliseconds());
|
||||
}
|
||||
|
||||
DOMTimeMilliSec nsDOMNavigationTiming::DurationFromStart()
|
||||
{
|
||||
return TimeStampToDOM(TimeStamp::Now());
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyNavigationStart(DocShellState aDocShellState)
|
||||
{
|
||||
mNavigationStartHighRes = (double)PR_Now() / PR_USEC_PER_MSEC;
|
||||
mNavigationStartTimeStamp = TimeStamp::Now();
|
||||
mNavigationStart = TimeStamp::Now();
|
||||
mDocShellHasBeenActiveSinceNavigationStart = (aDocShellState == DocShellState::eActive);
|
||||
}
|
||||
|
||||
|
|
@ -89,7 +78,7 @@ nsDOMNavigationTiming::NotifyFetchStart(nsIURI* aURI, Type aNavigationType)
|
|||
void
|
||||
nsDOMNavigationTiming::NotifyBeforeUnload()
|
||||
{
|
||||
mBeforeUnloadStart = DurationFromStart();
|
||||
mBeforeUnloadStart = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -102,105 +91,107 @@ nsDOMNavigationTiming::NotifyUnloadAccepted(nsIURI* aOldURI)
|
|||
void
|
||||
nsDOMNavigationTiming::NotifyUnloadEventStart()
|
||||
{
|
||||
mUnloadStart = DurationFromStart();
|
||||
mUnloadStart = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyUnloadEventEnd()
|
||||
{
|
||||
mUnloadEnd = DurationFromStart();
|
||||
mUnloadEnd = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyLoadEventStart()
|
||||
{
|
||||
if (!mLoadEventStartSet) {
|
||||
mLoadEventStart = DurationFromStart();
|
||||
mLoadEventStartSet = true;
|
||||
if (!mLoadEventStart.IsNull()) {
|
||||
return;
|
||||
}
|
||||
mLoadEventStart = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyLoadEventEnd()
|
||||
{
|
||||
if (!mLoadEventEndSet) {
|
||||
mLoadEventEnd = DurationFromStart();
|
||||
mLoadEventEndSet = true;
|
||||
if (!mLoadEventEnd.IsNull()) {
|
||||
return;
|
||||
}
|
||||
mLoadEventEnd = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::SetDOMLoadingTimeStamp(nsIURI* aURI, TimeStamp aValue)
|
||||
{
|
||||
if (!mDOMLoadingSet) {
|
||||
mLoadedURI = aURI;
|
||||
mDOMLoading = TimeStampToDOM(aValue);
|
||||
mDOMLoadingSet = true;
|
||||
if (!mDOMLoading.IsNull()) {
|
||||
return;
|
||||
}
|
||||
mLoadedURI = aURI;
|
||||
mDOMLoading = aValue;
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyDOMLoading(nsIURI* aURI)
|
||||
{
|
||||
if (!mDOMLoadingSet) {
|
||||
mLoadedURI = aURI;
|
||||
mDOMLoading = DurationFromStart();
|
||||
mDOMLoadingSet = true;
|
||||
if (!mDOMLoading.IsNull()) {
|
||||
return;
|
||||
}
|
||||
mLoadedURI = aURI;
|
||||
mDOMLoading = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyDOMInteractive(nsIURI* aURI)
|
||||
{
|
||||
if (!mDOMInteractiveSet) {
|
||||
mLoadedURI = aURI;
|
||||
mDOMInteractive = DurationFromStart();
|
||||
mDOMInteractiveSet = true;
|
||||
if (!mDOMInteractive.IsNull()) {
|
||||
return;
|
||||
}
|
||||
mLoadedURI = aURI;
|
||||
mDOMInteractive = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyDOMComplete(nsIURI* aURI)
|
||||
{
|
||||
if (!mDOMCompleteSet) {
|
||||
mLoadedURI = aURI;
|
||||
mDOMComplete = DurationFromStart();
|
||||
mDOMCompleteSet = true;
|
||||
if (!mDOMComplete.IsNull()) {
|
||||
return;
|
||||
}
|
||||
mLoadedURI = aURI;
|
||||
mDOMComplete = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyDOMContentLoadedStart(nsIURI* aURI)
|
||||
{
|
||||
if (!mDOMContentLoadedEventStartSet) {
|
||||
mLoadedURI = aURI;
|
||||
mDOMContentLoadedEventStart = DurationFromStart();
|
||||
mDOMContentLoadedEventStartSet = true;
|
||||
if (!mDOMContentLoadedEventStart.IsNull()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mLoadedURI = aURI;
|
||||
mDOMContentLoadedEventStart = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyDOMContentLoadedEnd(nsIURI* aURI)
|
||||
{
|
||||
if (!mDOMContentLoadedEventEndSet) {
|
||||
mLoadedURI = aURI;
|
||||
mDOMContentLoadedEventEnd = DurationFromStart();
|
||||
mDOMContentLoadedEventEndSet = true;
|
||||
if (!mDOMContentLoadedEventEnd.IsNull()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mLoadedURI = aURI;
|
||||
mDOMContentLoadedEventEnd = TimeStamp::Now();
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMNavigationTiming::NotifyNonBlankPaintForRootContentDocument()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(!mNavigationStartTimeStamp.IsNull());
|
||||
MOZ_ASSERT(!mNavigationStart.IsNull());
|
||||
|
||||
if (!mNonBlankPaintTimeStamp.IsNull()) {
|
||||
if (!mNonBlankPaint.IsNull()) {
|
||||
return;
|
||||
}
|
||||
|
||||
mNonBlankPaintTimeStamp = TimeStamp::Now();
|
||||
TimeDuration elapsed = mNonBlankPaintTimeStamp - mNavigationStartTimeStamp;
|
||||
mNonBlankPaint = TimeStamp::Now();
|
||||
TimeDuration elapsed = mNonBlankPaint - mNavigationStart;
|
||||
|
||||
if (profiler_is_active()) {
|
||||
nsAutoCString spec;
|
||||
|
|
@ -215,8 +206,8 @@ nsDOMNavigationTiming::NotifyNonBlankPaintForRootContentDocument()
|
|||
|
||||
if (mDocShellHasBeenActiveSinceNavigationStart) {
|
||||
Telemetry::AccumulateTimeDelta(Telemetry::TIME_TO_NON_BLANK_PAINT_MS,
|
||||
mNavigationStartTimeStamp,
|
||||
mNonBlankPaintTimeStamp);
|
||||
mNavigationStart,
|
||||
mNonBlankPaint);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -227,24 +218,24 @@ nsDOMNavigationTiming::NotifyDocShellStateChanged(DocShellState aDocShellState)
|
|||
(aDocShellState == DocShellState::eActive);
|
||||
}
|
||||
|
||||
DOMTimeMilliSec
|
||||
nsDOMNavigationTiming::GetUnloadEventStart()
|
||||
mozilla::TimeStamp
|
||||
nsDOMNavigationTiming::GetUnloadEventStartTimeStamp() const
|
||||
{
|
||||
nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager();
|
||||
nsresult rv = ssm->CheckSameOriginURI(mLoadedURI, mUnloadedURI, false);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
return mUnloadStart;
|
||||
}
|
||||
return 0;
|
||||
return mozilla::TimeStamp();
|
||||
}
|
||||
|
||||
DOMTimeMilliSec
|
||||
nsDOMNavigationTiming::GetUnloadEventEnd()
|
||||
mozilla::TimeStamp
|
||||
nsDOMNavigationTiming::GetUnloadEventEndTimeStamp() const
|
||||
{
|
||||
nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager();
|
||||
nsresult rv = ssm->CheckSameOriginURI(mLoadedURI, mUnloadedURI, false);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
return mUnloadEnd;
|
||||
}
|
||||
return 0;
|
||||
return mozilla::TimeStamp();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue