[webkit-changes] [WebKit/WebKit] b6acbf: Add SPI to report page load time

Ryosuke Niwa noreply at github.com
Tue Aug 27 21:27:21 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b6acbfad5859fb4175817208e3bcb6728d85ac32
      https://github.com/WebKit/WebKit/commit/b6acbfad5859fb4175817208e3bcb6728d85ac32
  Author: Ryosuke Niwa <rniwa at webkit.org>
  Date:   2024-08-27 (Tue, 27 Aug 2024)

  Changed paths:
    M Source/WebKit/Shared/API/Cocoa/WebKitPrivate.h
    M Source/WebKit/SourcesCocoa.txt
    M Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
    A Source/WebKit/UIProcess/API/Cocoa/_WKPageLoadTiming.h
    A Source/WebKit/UIProcess/API/Cocoa/_WKPageLoadTiming.mm
    A Source/WebKit/UIProcess/API/Cocoa/_WKPageLoadTimingInternal.h
    M Source/WebKit/UIProcess/API/mac/WKWebViewTestingMac.mm
    M Source/WebKit/UIProcess/Cocoa/CoreTelephonyUtilities.h
    M Source/WebKit/UIProcess/Cocoa/NavigationState.h
    M Source/WebKit/UIProcess/Cocoa/NavigationState.mm
    M Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm
    M Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
    M Source/WebKit/UIProcess/ProvisionalPageProxy.h
    M Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm
    M Source/WebKit/UIProcess/RemotePageProxy.cpp
    M Source/WebKit/UIProcess/RemotePageProxy.h
    A Source/WebKit/UIProcess/WebPageLoadTiming.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.messages.in
    M Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm
    M Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h
    M Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm

  Log Message:
  -----------
  Add SPI to report page load time
https://bugs.webkit.org/show_bug.cgi?id=278554

Reviewed by Chris Dumez.

Add new selector to WKNavigationDelegate which reports the key page load time metrics
such as when the first meaningful paint has happened, main frame's document had
finished loading (i.e. parsing), and when all subresources had finished loading using
_WKPageLoadTiming.

Subresources are assumed to be finished loading when all existing subresources had
finished loading and no new load was initiated within 100ms.

We use WallTime throughout instead of MonotonicTime since MonotonicTime doesn't
convert well to NSDate.

* Source/WebKit/Shared/API/Cocoa/WebKitPrivate.h:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
* Source/WebKit/UIProcess/API/Cocoa/_WKPageLoadTiming.h: Added.
* Source/WebKit/UIProcess/API/Cocoa/_WKPageLoadTiming.mm: Added.
(nsDateFromMonotonicTime):
(-[_WKPageLoadTiming _initWithTiming:]):
(-[_WKPageLoadTiming navigationStart]):
(-[_WKPageLoadTiming firstMeaningfulPaint]):
(-[_WKPageLoadTiming documentFinishedLoading]):
(-[_WKPageLoadTiming allSubresourcesFinishedLoading]):
* Source/WebKit/UIProcess/API/Cocoa/_WKPageLoadTimingInternal.h: Added.
* Source/WebKit/UIProcess/Cocoa/CoreTelephonyUtilities.h:
* Source/WebKit/UIProcess/Cocoa/NavigationState.h:
* Source/WebKit/UIProcess/Cocoa/NavigationState.mm:
(WebKit::NavigationState::didGeneratePageLoadTiming):
* Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::didGeneratePageLoadTiming):
(WebKit::WebPageProxy::didCommitLayerTree):
* Source/WebKit/UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame):
(WebKit::ProvisionalPageProxy::startNetworkRequestsForPageLoadTiming):
(WebKit::ProvisionalPageProxy::didReceiveMessage):
* Source/WebKit/UIProcess/ProvisionalPageProxy.h:
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTreeTransaction):
* Source/WebKit/UIProcess/RemotePageProxy.cpp:
(WebKit::RemotePageProxy::didStartProvisionalLoadForFrame):
* Source/WebKit/UIProcess/RemotePageProxy.h:
* Source/WebKit/UIProcess/WebPageLoadTiming.h: Added,
(WebKit::WebPageLoadTiming::WebPageLoadTiming):
(WebKit::WebPageLoadTiming::navigationStart const):
(WebKit::WebPageLoadTiming::firstMeaningfulPaint const):
(WebKit::WebPageLoadTiming::setFirstMeaningfulPaint):
(WebKit::WebPageLoadTiming::documentFinishedLoading const):
(WebKit::WebPageLoadTiming::setDocumentFinishedLoading):
(WebKit::WebPageLoadTiming::allSubresourcesFinishedLoading const):
(WebKit::WebPageLoadTiming::updateEndOfNetworkRequests):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::startNetworkRequestsForPageLoadTiming):
(WebKit::WebPageProxy::endNetworkRequestsForPageLoadTiming):
(WebKit::WebPageProxy::generatePageLoadingTimingSoon):
(WebKit::WebPageProxy::didEndNetworkRequestsForPageLoadTimingTimerFired):
(WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
(WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
(WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
(WebKit::WebPageProxy::didLayoutForCustomContentProvider):
(WebKit::WebPageProxy::didReachLayoutMilestone):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::useNetworkLoader):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp:
(WebKit::WebLocalFrameLoaderClient::dispatchDidStartProvisionalLoad):
(WebKit::WebLocalFrameLoaderClient::dispatchDidFinishDocumentLoad):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::m_textAnimationController):
(WebKit::WebPage::addResourceRequest):
(WebKit::WebPage::removeResourceRequest):
(WebKit::WebPage::dispatchDidReachLayoutMilestone):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::sendPendingNewlyReachedPaintingMilestones):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm:
(TEST(WKNavigation, GeneratePageLoadTiming)):
* Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h:
* Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm:
(-[TestNavigationDelegate _webView:didGeneratePageLoadTiming:]):

Canonical link: https://commits.webkit.org/282826@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list