Skip to content
  • simonjam@chromium.org's avatar
    [Navigation Timing] Use monotonicallyIncreasingTime() instead of currentTime() · dfab5cf9
    simonjam@chromium.org authored
    https://bugs.webkit.org/show_bug.cgi?id=58354
    
    Reviewed by Pavel Feldman.
    
    Source/WebCore:
    
    No new tests. Relies on existing webtiming-* tests.
    
    * CMakeLists.txt:
    * GNUmakefile.list.am:
    * WebCore.gypi:
    * WebCore.pro:
    * WebCore.vcproj/WebCore.vcproj:
    * WebCore.xcodeproj/project.pbxproj:
    * dom/Document.cpp: Use monotonic times.
    (WebCore::Document::setReadyState):
    (WebCore::Document::finishedParsing):
    * inspector/InspectorInstrumentation.cpp:
    (WebCore::InspectorInstrumentation::didFinishLoadingImpl): Convert monotonicFinishTime to wall time if needed.
    * inspector/InspectorResourceAgent.cpp:
    (WebCore::buildObjectForTiming): Convert monotonic requestTime to wall time.
    (WebCore::buildObjectForResourceResponse): Plumbing for above.
    (WebCore::buildObjectForCachedResource): Ditto.
    (WebCore::InspectorResourceAgent::willSendRequest): Ditto.
    (WebCore::InspectorResourceAgent::didReceiveResponse): Ditto.
    (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache): Ditto.
    * loader/DocumentLoadTiming.cpp: Added.
    (WebCore::DocumentLoadTiming::DocumentLoadTiming):
    (WebCore::DocumentLoadTiming::setNavigationStart): Determine reference time and root reference time.
    (WebCore::DocumentLoadTiming::addRedirect): Moved logic from MainResourceLoader.
    (WebCore::DocumentLoadTiming::convertMonotonicTimeToDocumentTime): Helper to compute wall time from monotonic time.
    * loader/DocumentLoadTiming.h: Turned into class. Made times monotonic.
    (WebCore::DocumentLoadTiming::setUnloadEventStart):
    (WebCore::DocumentLoadTiming::setUnloadEventEnd):
    (WebCore::DocumentLoadTiming::setRedirectStart):
    (WebCore::DocumentLoadTiming::setRedirectEnd):
    (WebCore::DocumentLoadTiming::setFetchStart):
    (WebCore::DocumentLoadTiming::setResponseEnd):
    (WebCore::DocumentLoadTiming::setLoadEventStart):
    (WebCore::DocumentLoadTiming::setLoadEventEnd):
    (WebCore::DocumentLoadTiming::setHasSameOriginAsPreviousDocument):
    (WebCore::DocumentLoadTiming::navigationStart):
    (WebCore::DocumentLoadTiming::unloadEventStart):
    (WebCore::DocumentLoadTiming::unloadEventEnd):
    (WebCore::DocumentLoadTiming::redirectStart):
    (WebCore::DocumentLoadTiming::redirectEnd):
    (WebCore::DocumentLoadTiming::redirectCount):
    (WebCore::DocumentLoadTiming::fetchStart):
    (WebCore::DocumentLoadTiming::responseEnd):
    (WebCore::DocumentLoadTiming::loadEventStart):
    (WebCore::DocumentLoadTiming::loadEventEnd):
    (WebCore::DocumentLoadTiming::hasCrossOriginRedirect):
    (WebCore::DocumentLoadTiming::hasSameOriginAsPreviousDocument):
    * loader/FrameLoader.cpp:
    (WebCore::FrameLoader::stopLoading):
    (WebCore::FrameLoader::commitProvisionalLoad):
    (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
    (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
    * loader/MainResourceLoader.cpp:
    (WebCore::MainResourceLoader::continueAfterNavigationPolicy):
    (WebCore::MainResourceLoader::willSendRequest): Moved logic to DocumentLoadTiming.
    (WebCore::MainResourceLoader::didReceiveData): Use monotonic time.
    (WebCore::MainResourceLoader::didFinishLoading): Ditto.
    (WebCore::MainResourceLoader::load):
    * page/DOMWindow.cpp:
    (WebCore::DOMWindow::dispatchLoadEvent):
    * page/DOMWindow.h: Removed dispatchTimedEvent. It doesn't really help in the new model.
    * page/PerformanceNavigation.cpp:
    (WebCore::PerformanceNavigation::redirectCount):
    * page/PerformanceTiming.cpp: Removed skew correction code. This should never happen now.
    (WebCore::PerformanceTiming::navigationStart):
    (WebCore::PerformanceTiming::unloadEventStart):
    (WebCore::PerformanceTiming::unloadEventEnd):
    (WebCore::PerformanceTiming::redirectStart):
    (WebCore::PerformanceTiming::redirectEnd):
    (WebCore::PerformanceTiming::fetchStart):
    (WebCore::PerformanceTiming::responseEnd):
    (WebCore::PerformanceTiming::domLoading):
    (WebCore::PerformanceTiming::domInteractive):
    (WebCore::PerformanceTiming::domContentLoadedEventStart):
    (WebCore::PerformanceTiming::domContentLoadedEventEnd):
    (WebCore::PerformanceTiming::domComplete):
    (WebCore::PerformanceTiming::loadEventStart):
    (WebCore::PerformanceTiming::loadEventEnd):
    (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute): Used for ResourceLoadTiming.
    (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds): Used for DocumentTiming and DocumentLoadTiming.
    * page/PerformanceTiming.h:
    * platform/network/ResourceLoadTiming.cpp:
    (WebCore::ResourceLoadTiming::convertResourceLoadTimeToDocumentTime):
    * platform/network/ResourceLoadTiming.h: Added helper function to convert to wall times. Added instructions for use.
    
    LayoutTests:
    
    * fast/dom/script-tests/webtiming.js: Current monotonic time is unknown until performance.now() is available. Use 0 until then.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@102961 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    dfab5cf9