Changeset 200887 in webkit
- Timestamp:
- May 13, 2016 3:34:29 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r200879 r200887 1 2016-05-13 Yoav Weiss <yoav@yoav.ws> 2 3 ResourceTiming entries for cached resources and XHR 4 https://bugs.webkit.org/show_bug.cgi?id=157669 5 6 Reviewed by Alex Christensen. 7 8 These tests make sure that cacheable resources as well as XHR based resources 9 have ResourceTiming entries. 10 11 * http/tests/performance/performance-resource-timing-cached-entries-expected.txt: Added. 12 * http/tests/performance/performance-resource-timing-cached-entries.html: Added. 13 1 14 2016-05-13 Mark Lam <mark.lam@apple.com> 2 15 -
trunk/Source/WebCore/CMakeLists.txt
r200638 r200887 1932 1932 loader/ResourceLoadStatisticsStore.cpp 1933 1933 loader/ResourceLoader.cpp 1934 loader/ResourceTimingInformation.cpp 1934 1935 loader/SinkDocument.cpp 1935 1936 loader/SubframeLoader.cpp -
trunk/Source/WebCore/ChangeLog
r200876 r200887 1 2016-05-13 Yoav Weiss <yoav@yoav.ws> 2 3 ResourceTiming entries for cached resources and XHR 4 https://bugs.webkit.org/show_bug.cgi?id=157669 5 6 Reviewed by Alex Christensen. 7 8 - Moves the ResourceTiming storage and addition logic into its own class, so that it 9 can be accessed by both CachedResourceLoader and DocumentThreadableLoader. 10 - Using the above, adds ResourceTiming collection into DocumentThreadableLoader, 11 in order to support ResourceTiming entries for XHR based requests. 12 - Adds ResourceTiming entries for resources that are reused from the memory cache. 13 14 Test: http/tests/performance/performance-resource-timing-cached-entries.html 15 16 * CMakeLists.txt: Add ResourceTimingInformation. 17 * WebCore.xcodeproj/project.pbxproj: Add ResourceTimingInformation. 18 * loader/DocumentThreadableLoader.cpp: 19 (WebCore::DocumentThreadableLoader::didFinishLoading): Add a call to addResourceTiming. 20 (WebCore::DocumentThreadableLoader::loadRequest): Store the initiator information. 21 * loader/DocumentThreadableLoader.h: 22 * loader/ResourceTimingInformation.cpp: Added. 23 (WebCore::ResourceTimingInformation::addResourceTiming): Moved addResourceTiming logic from CachedResourceLoader. 24 (WebCore::ResourceTimingInformation::storeResourceTimingInitiatorInformation): Moved addResourceTiming logic from 25 CachedResourceLoader. Removed reliance on the committingFirstRealLoad bool when storing initiator info, as I don't 26 see why it is required, and it made no sense in the context of DocumentThreadableLoader. 27 * loader/ResourceTimingInformation.h: Added. 28 * loader/cache/CachedResourceLoader.cpp: 29 (WebCore::CachedResourceLoader::requestResource): Add a ResourceTiming entry when a resource is reused from MemoryCache. 30 (WebCore::CachedResourceLoader::revalidateResource): Use ResourceTimingInformation::storeResourceTimingInitiatorInformation. 31 (WebCore::CachedResourceLoader::loadResource): Use ResourceTimingInformation::storeResourceTimingInitiatorInformation. 32 (WebCore::CachedResourceLoader::loadDone): Use ResourceTimingInformation::addResourceTiming. 33 (WebCore::CachedResourceLoader::storeResourceTimingInitiatorInformation): Deleted. 34 * loader/cache/CachedResourceLoader.h: 35 1 36 2016-05-13 Doug Russell <d_russell@apple.com> 2 37 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r200866 r200887 6008 6008 CB38FD5B1CD2325B00592A3F /* JSPerformanceResourceTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = CB38FD591CD2314500592A3F /* JSPerformanceResourceTiming.h */; }; 6009 6009 CB8CF0181A9358D4000D510B /* Microtasks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB8CF0151A934B43000D510B /* Microtasks.cpp */; }; 6010 CBC2D22F1CE5B89D00D1880B /* ResourceTimingInformation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CBC2D22D1CE5B77400D1880B /* ResourceTimingInformation.cpp */; }; 6011 CBC2D2301CE5B8A100D1880B /* ResourceTimingInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC2D22E1CE5B77D00D1880B /* ResourceTimingInformation.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6010 6012 CCC2B51415F613060048CDD6 /* DeviceClient.h in Headers */ = {isa = PBXBuildFile; fileRef = CCC2B51015F613060048CDD6 /* DeviceClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 6011 6013 CCC2B51515F613060048CDD6 /* DeviceController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CCC2B51115F613060048CDD6 /* DeviceController.cpp */; }; … … 13989 13991 CB38FD591CD2314500592A3F /* JSPerformanceResourceTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPerformanceResourceTiming.h; sourceTree = "<group>"; }; 13990 13992 CB8CF0151A934B43000D510B /* Microtasks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Microtasks.cpp; sourceTree = "<group>"; }; 13993 CBC2D22D1CE5B77400D1880B /* ResourceTimingInformation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResourceTimingInformation.cpp; sourceTree = "<group>"; }; 13994 CBC2D22E1CE5B77D00D1880B /* ResourceTimingInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceTimingInformation.h; sourceTree = "<group>"; }; 13991 13995 CCC2B51015F613060048CDD6 /* DeviceClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceClient.h; sourceTree = "<group>"; }; 13992 13996 CCC2B51115F613060048CDD6 /* DeviceController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceController.cpp; sourceTree = "<group>"; }; … … 22820 22824 7A7CC8361C87506800366243 /* ResourceLoadStatisticsStore.cpp */, 22821 22825 7A7CC8371C87506800366243 /* ResourceLoadStatisticsStore.h */, 22826 CBC2D22D1CE5B77400D1880B /* ResourceTimingInformation.cpp */, 22827 CBC2D22E1CE5B77D00D1880B /* ResourceTimingInformation.h */, 22822 22828 51327D5F11A33A2B004F9D65 /* SinkDocument.cpp */, 22823 22829 51327D5E11A33A2B004F9D65 /* SinkDocument.h */, … … 28245 28251 B2227A7D0D00BF220071B782 /* SVGPathSegLinetoVertical.h in Headers */, 28246 28252 83C1D433178D5AB500141E68 /* SVGPathSegLinetoVerticalAbs.h in Headers */, 28253 CBC2D2301CE5B8A100D1880B /* ResourceTimingInformation.h in Headers */, 28247 28254 83C1D434178D5AB500141E68 /* SVGPathSegLinetoVerticalRel.h in Headers */, 28248 28255 B2227A810D00BF220071B782 /* SVGPathSegList.h in Headers */, … … 32106 32113 D7613A501474F13F00DB8606 /* WebKitNamedFlow.cpp in Sources */, 32107 32114 7C48A6D0191C9D6500026674 /* WebKitNamespace.cpp in Sources */, 32115 CBC2D22F1CE5B89D00D1880B /* ResourceTimingInformation.cpp in Sources */, 32108 32116 A5DEBDA316FB908700836FE0 /* WebKitPlaybackTargetAvailabilityEvent.cpp in Sources */, 32109 32117 31C0FF240E4CEB6E007D6FE5 /* WebKitTransitionEvent.cpp in Sources */, -
trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp
r200320 r200887 326 326 void DocumentThreadableLoader::didFinishLoading(unsigned long identifier, double finishTime) 327 327 { 328 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 329 m_resourceTimingInfo.addResourceTiming(m_resource.get(), &m_document); 330 328 331 if (m_actualRequest) { 329 332 InspectorInstrumentation::didFinishLoading(m_document.frame(), m_document.frame()->loader().documentLoader(), identifier, finishTime); … … 391 394 ASSERT(!m_resource); 392 395 m_resource = m_document.cachedResourceLoader().requestRawResource(newRequest); 393 if (m_resource) 396 if (m_resource) { 394 397 m_resource->addClient(this); 398 399 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 400 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(m_resource, newRequest, m_document.frame()); 401 } 395 402 396 403 return; -
trunk/Source/WebCore/loader/DocumentThreadableLoader.h
r199612 r200887 34 34 #include "CachedRawResourceClient.h" 35 35 #include "CachedResourceHandle.h" 36 #include "ResourceTimingInformation.h" 36 37 #include "ThreadableLoader.h" 37 38 … … 106 107 Document& m_document; 107 108 ThreadableLoaderOptions m_options; 109 ResourceTimingInformation m_resourceTimingInfo; 108 110 bool m_sameOriginRequest; 109 111 bool m_simpleRequest; -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r200640 r200887 619 619 logMemoryCacheResourceRequest(frame(), DiagnosticLoggingKeys::inMemoryCacheKey(), DiagnosticLoggingKeys::usedKey()); 620 620 memoryCache.resourceAccessed(*resource); 621 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) { 622 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, request, frame()); 623 m_resourceTimingInfo.addResourceTiming(resource.get(), document()); 624 } 621 625 break; 622 626 } … … 671 675 memoryCache.add(*newResource); 672 676 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 673 storeResourceTimingInitiatorInformation(resource, request);677 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, request, frame()); 674 678 return newResource; 675 679 } … … 687 691 resource->setOwningCachedResourceLoader(this); 688 692 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 689 storeResourceTimingInitiatorInformation(resource, request);693 m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, request, frame()); 690 694 return resource; 691 }692 693 void CachedResourceLoader::storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>& resource, const CachedResourceRequest& request)694 {695 ASSERT(RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled());696 if (resource->type() == CachedResource::MainResource) {697 // <iframe>s should report the initial navigation requested by the parent document, but not subsequent navigations.698 if (frame()->ownerElement() && m_documentLoader->frameLoader()->stateMachine().committingFirstRealLoad()) {699 InitiatorInfo info = { frame()->ownerElement()->localName(), monotonicallyIncreasingTime() };700 m_initiatorMap.add(resource.get(), info);701 }702 } else {703 InitiatorInfo info = { request.initiatorName(), monotonicallyIncreasingTime() };704 m_initiatorMap.add(resource.get(), info);705 }706 695 } 707 696 … … 971 960 972 961 #if ENABLE(WEB_TIMING) 973 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled() 974 && resource && resource->response().isHTTP() 975 && ((!resource->errorOccurred() && !resource->wasCanceled()) || resource->response().httpStatusCode() == 304)) { 976 HashMap<CachedResource*, InitiatorInfo>::iterator initiatorIt = m_initiatorMap.find(resource); 977 if (initiatorIt != m_initiatorMap.end()) { 978 ASSERT(document()); 979 Document* initiatorDocument = document(); 980 if (resource->type() == CachedResource::MainResource) 981 initiatorDocument = document()->parentDocument(); 982 ASSERT(initiatorDocument); 983 const InitiatorInfo& info = initiatorIt->value; 984 initiatorDocument->domWindow()->performance()->addResourceTiming(info.name, initiatorDocument, resource->resourceRequest(), resource->response(), info.startTime, resource->loadFinishTime()); 985 m_initiatorMap.remove(initiatorIt); 986 } 987 } 962 if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) 963 m_resourceTimingInfo.addResourceTiming(resource, document()); 988 964 #else 989 965 UNUSED_PARAM(resource); -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.h
r200320 r200887 32 32 #include "CachedResourceRequest.h" 33 33 #include "ResourceLoadPriority.h" 34 #include "ResourceTimingInformation.h" 34 35 #include "Timer.h" 35 36 #include <wtf/Deque.h> … … 145 146 CachedResourceHandle<CachedResource> revalidateResource(const CachedResourceRequest&, CachedResource*); 146 147 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, CachedResourceRequest&); 147 void storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>&, const CachedResourceRequest&);148 148 void requestPreload(CachedResource::Type, CachedResourceRequest&, const String& charset); 149 149 … … 178 178 Timer m_garbageCollectDocumentResourcesTimer; 179 179 180 struct InitiatorInfo { 181 AtomicString name; 182 double startTime; 183 }; 184 HashMap<CachedResource*, InitiatorInfo> m_initiatorMap; 180 ResourceTimingInformation m_resourceTimingInfo; 185 181 186 182 // 29 bits left
Note: See TracChangeset
for help on using the changeset viewer.