WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-103777-20121130144023.patch (text/plain), 6.93 KB, created by
James Simonsen
on 2012-11-30 14:42:51 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
James Simonsen
Created:
2012-11-30 14:42:51 PST
Size:
6.93 KB
patch
obsolete
>Subversion Revision: 136256 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 8fc6c0b4f5c0666fbd7e61278d2f05d070508e53..fe9fde891d10f8c98c7e8dd996300b7ce1b6e8e5 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,5 +1,30 @@ > 2012-11-30 James Simonsen <simonjam@chromium.org> > >+ [Resource Timing] Record and report initiator >+ https://bugs.webkit.org/show_bug.cgi?id=103777 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ This will start populating the Resource Timing buffer with entries. The initiator will be >+ recorded for each CachedResourceLoader. This should match the next update of the spec. >+ >+ Tests: http/tests/w3c/webperf/submission/resource-timing >+ >+ * css/CSSFontSelector.cpp: >+ (WebCore::CSSFontSelector::beginLoadTimerFired): >+ * loader/ResourceLoadNotifier.cpp: Always record timing information if ENABLE(RESOURCE_TIMING). >+ (WebCore::ResourceLoadNotifier::dispatchWillSendRequest): >+ * loader/SubresourceLoader.cpp: >+ (WebCore::SubresourceLoader::releaseResources): Report the actual resource that called loadDone(). >+ * loader/cache/CachedResourceLoader.cpp: >+ (WebCore::CachedResourceLoader::loadResource): Record the initiator. >+ (WebCore::CachedResourceLoader::loadDone): Record the entry in Resource Timing. >+ * loader/cache/CachedResourceLoader.h: >+ (CachedResourceLoader): >+ (InitiatorInfo): >+ >+2012-11-30 James Simonsen <simonjam@chromium.org> >+ > Report CSS as initiator instead of elements, except body > https://bugs.webkit.org/show_bug.cgi?id=103546 > >diff --git a/Source/WebCore/css/CSSFontSelector.cpp b/Source/WebCore/css/CSSFontSelector.cpp >index 64ee0a8d7732061e18996c7bc3fec1e9003a72f4..cb0dc8d14b18ff489c36a7f200503a409e972336 100644 >--- a/Source/WebCore/css/CSSFontSelector.cpp >+++ b/Source/WebCore/css/CSSFontSelector.cpp >@@ -588,7 +588,7 @@ void CSSFontSelector::beginLoadTimerFired(Timer<WebCore::CSSFontSelector>*) > cachedResourceLoader->decrementRequestCount(fontsToBeginLoading[i].get()); > } > // Ensure that if the request count reaches zero, the frame loader will know about it. >- cachedResourceLoader->loadDone(); >+ cachedResourceLoader->loadDone(0); > // New font loads may be triggered by layout after the document load is complete but before we have dispatched > // didFinishLoading for the frame. Make sure the delegate is always dispatched by checking explicitly. > if (m_document && m_document->frame()) >diff --git a/Source/WebCore/loader/ResourceLoadNotifier.cpp b/Source/WebCore/loader/ResourceLoadNotifier.cpp >index c7349a1ed6a23332df8c94299b2f29c173500047..24df489c792eb09fee07a4041670095d5842b596 100644 >--- a/Source/WebCore/loader/ResourceLoadNotifier.cpp >+++ b/Source/WebCore/loader/ResourceLoadNotifier.cpp >@@ -121,6 +121,10 @@ void ResourceLoadNotifier::dispatchWillSendRequest(DocumentLoader* loader, unsig > // Report WebTiming for all frames. > if (loader && !request.isNull() && request.url() == loader->requestURL()) > request.setReportLoadTiming(true); >+ >+#if ENABLE(RESOURCE_TIMING) >+ request.setReportLoadTiming(true); >+#endif > } > > void ResourceLoadNotifier::dispatchDidReceiveResponse(DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r, ResourceLoader* resourceLoader) >diff --git a/Source/WebCore/loader/SubresourceLoader.cpp b/Source/WebCore/loader/SubresourceLoader.cpp >index e67f1027a961a4ca622be0c49af92a983135668d..0893ae7e77495ebba39dd22adec7acbb6c5cabc6 100644 >--- a/Source/WebCore/loader/SubresourceLoader.cpp >+++ b/Source/WebCore/loader/SubresourceLoader.cpp >@@ -315,7 +315,7 @@ void SubresourceLoader::releaseResources() > ASSERT(!reachedTerminalState()); > if (m_state != Uninitialized) { > m_requestCountTracker.clear(); >- m_documentLoader->cachedResourceLoader()->loadDone(); >+ m_documentLoader->cachedResourceLoader()->loadDone(m_resource); > if (reachedTerminalState()) > return; > m_resource->stopLoading(); >diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp >index 803e1dcd1b09f1803085191d5607a09e9a79d887..4f40560a233decab206f231222f5ac58ccaf2bbe 100644 >--- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp >+++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp >@@ -67,6 +67,10 @@ > #include "CachedShader.h" > #endif > >+#if ENABLE(RESOURCE_TIMING) >+#include "Performance.h" >+#endif >+ > #define PRELOAD_DEBUG 0 > > namespace WebCore { >@@ -510,6 +514,10 @@ CachedResourceHandle<CachedResource> CachedResourceLoader::loadResource(CachedRe > > if (!memoryCache()->add(resource.get())) > resource->setOwningCachedResourceLoader(this); >+#if ENABLE(RESOURCE_TIMING) >+ InitiatorInfo info = { request.initiatorName(), monotonicallyIncreasingTime() }; >+ m_initiatorMap.add(resource.get(), info); >+#endif > return resource; > } > >@@ -691,10 +699,23 @@ void CachedResourceLoader::removeCachedResource(CachedResource* resource) const > m_documentResources.remove(resource->url()); > } > >-void CachedResourceLoader::loadDone() >+void CachedResourceLoader::loadDone(CachedResource* resource) > { > RefPtr<DocumentLoader> protectDocumentLoader(m_documentLoader); > RefPtr<Document> protectDocument(m_document); >+#if ENABLE(RESOURCE_TIMING) >+ if (resource) { >+ HashMap<CachedResource*, InitiatorInfo>::iterator initiatorIt = m_initiatorMap.find(resource); >+ if (initiatorIt != m_initiatorMap.end()) { >+ const InitiatorInfo& info = initiatorIt->value; >+ if (document()) >+ document()->domWindow()->performance()->addResourceTiming(info.name, document(), resource->resourceRequest(), resource->response(), info.startTime, resource->loadFinishTime()); >+ m_initiatorMap.remove(initiatorIt); >+ } >+ } >+#else >+ UNUSED_PARAM(resource); >+#endif > if (frame()) > frame()->loader()->loadDone(); > performPostLoadActions(); >diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.h b/Source/WebCore/loader/cache/CachedResourceLoader.h >index e3cf67fd6df8e29f53bcb09ce34cc104284ccf6d..a819f41476b50c5199634e3a106511c63aacdff2 100644 >--- a/Source/WebCore/loader/cache/CachedResourceLoader.h >+++ b/Source/WebCore/loader/cache/CachedResourceLoader.h >@@ -120,7 +120,7 @@ public: > void clearDocumentLoader() { m_documentLoader = 0; } > > void removeCachedResource(CachedResource*) const; >- void loadDone(); >+ void loadDone(CachedResource*); > void garbageCollectDocumentResources(); > > void incrementRequestCount(const CachedResource*); >@@ -176,6 +176,14 @@ private: > > Timer<CachedResourceLoader> m_garbageCollectDocumentResourcesTimer; > >+#if ENABLE(RESOURCE_TIMING) >+ struct InitiatorInfo { >+ AtomicString name; >+ double startTime; >+ }; >+ HashMap<CachedResource*, InitiatorInfo> m_initiatorMap; >+#endif >+ > // 29 bits left > bool m_autoLoadImages : 1; > bool m_imagesEnabled : 1;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 103777
:
177029
|
177038
|
177315
|
177328