Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1146)

Side by Side Diff: Source/core/fetch/ResourceFetcher.cpp

Issue 23734006: Add histograms to ResourceFetcher to measure memory cache hit rate. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« Source/core/fetch/Resource.h ('K') | « Source/core/fetch/Resource.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org)
4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org)
5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
7 7
8 This library is free software; you can redistribute it and/or 8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Library General Public 9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either 10 License as published by the Free Software Foundation; either
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 #include "core/loader/FrameLoaderClient.h" 52 #include "core/loader/FrameLoaderClient.h"
53 #include "core/loader/PingLoader.h" 53 #include "core/loader/PingLoader.h"
54 #include "core/loader/UniqueIdentifier.h" 54 #include "core/loader/UniqueIdentifier.h"
55 #include "core/loader/appcache/ApplicationCacheHost.h" 55 #include "core/loader/appcache/ApplicationCacheHost.h"
56 #include "core/page/ContentSecurityPolicy.h" 56 #include "core/page/ContentSecurityPolicy.h"
57 #include "core/page/DOMWindow.h" 57 #include "core/page/DOMWindow.h"
58 #include "core/page/Frame.h" 58 #include "core/page/Frame.h"
59 #include "core/page/Performance.h" 59 #include "core/page/Performance.h"
60 #include "core/page/ResourceTimingInfo.h" 60 #include "core/page/ResourceTimingInfo.h"
61 #include "core/page/Settings.h" 61 #include "core/page/Settings.h"
62 #include "core/platform/HistogramSupport.h"
62 #include "core/platform/Logging.h" 63 #include "core/platform/Logging.h"
63 #include "core/platform/chromium/TraceEvent.h" 64 #include "core/platform/chromium/TraceEvent.h"
64 #include "public/platform/Platform.h" 65 #include "public/platform/Platform.h"
65 #include "public/platform/WebURL.h" 66 #include "public/platform/WebURL.h"
66 #include "weborigin/SecurityOrigin.h" 67 #include "weborigin/SecurityOrigin.h"
67 #include "weborigin/SecurityPolicy.h" 68 #include "weborigin/SecurityPolicy.h"
68 #include "wtf/text/CString.h" 69 #include "wtf/text/CString.h"
69 #include "wtf/text/WTFString.h" 70 #include "wtf/text/WTFString.h"
70 71
71 #define PRELOAD_DEBUG 0 72 #define PRELOAD_DEBUG 0
72 73
73 namespace WebCore { 74 namespace WebCore {
75 namespace {
abarth-chromium 2013/09/13 17:38:18 We usually have a blank line above anonymous names
Philippe 2013/09/16 11:47:21 Done.
74 76
75 static Resource* createResource(Resource::Type type, const ResourceRequest& requ est, const String& charset) 77 // Used for histograms.
abarth-chromium 2013/09/13 17:38:18 No need for this comment.
Philippe 2013/09/16 11:47:21 Done.
78 enum ActionUponResourceRequest {
79 LoadResource = 0,
80 RevalidateResource = 1,
81 UseResourceFromCache = 2,
82 ActionUponResourceRequestBoundaryValue = 3,
abarth-chromium 2013/09/13 17:38:18 No need to list these numbers explicitly. What is
Philippe 2013/09/16 11:47:21 Boundary value is the terminology used in Histogra
83 };
84
85 Resource* createResource(Resource::Type type, const ResourceRequest& request, co nst String& charset)
76 { 86 {
77 switch (type) { 87 switch (type) {
78 case Resource::Image: 88 case Resource::Image:
79 return new ImageResource(request); 89 return new ImageResource(request);
80 case Resource::CSSStyleSheet: 90 case Resource::CSSStyleSheet:
81 return new CSSStyleSheetResource(request, charset); 91 return new CSSStyleSheetResource(request, charset);
82 case Resource::Script: 92 case Resource::Script:
83 return new ScriptResource(request, charset); 93 return new ScriptResource(request, charset);
84 case Resource::SVGDocument: 94 case Resource::SVGDocument:
85 return new DocumentResource(request, Resource::SVGDocument); 95 return new DocumentResource(request, Resource::SVGDocument);
86 case Resource::Font: 96 case Resource::Font:
87 return new FontResource(request); 97 return new FontResource(request);
88 case Resource::Raw: 98 case Resource::Raw:
89 case Resource::MainResource: 99 case Resource::MainResource:
90 return new RawResource(request, type); 100 return new RawResource(request, type);
91 case Resource::XSLStyleSheet: 101 case Resource::XSLStyleSheet:
92 return new XSLStyleSheetResource(request); 102 return new XSLStyleSheetResource(request);
93 case Resource::LinkPrefetch: 103 case Resource::LinkPrefetch:
94 return new Resource(request, Resource::LinkPrefetch); 104 return new Resource(request, Resource::LinkPrefetch);
95 case Resource::LinkSubresource: 105 case Resource::LinkSubresource:
96 return new Resource(request, Resource::LinkSubresource); 106 return new Resource(request, Resource::LinkSubresource);
97 case Resource::TextTrack: 107 case Resource::TextTrack:
98 return new TextTrackResource(request); 108 return new TextTrackResource(request);
99 case Resource::Shader: 109 case Resource::Shader:
100 return new ShaderResource(request); 110 return new ShaderResource(request);
101 case Resource::ImportResource: 111 case Resource::ImportResource:
102 return new RawResource(request, type); 112 return new RawResource(request, type);
103 } 113 }
abarth-chromium 2013/09/13 17:38:18 Why doesn't the compiler complain that you're miss
Philippe 2013/09/16 11:47:21 We don't provide any specific warning flags (on Li
Philippe 2013/09/16 14:09:09 Correction, the build does fail with Clang at leas
104 114
105 ASSERT_NOT_REACHED(); 115 ASSERT_NOT_REACHED();
106 return 0; 116 return 0;
107 } 117 }
108 118
109 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request) 119 ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest& reque st)
110 { 120 {
111 if (request.priority() != ResourceLoadPriorityUnresolved) 121 if (request.priority() != ResourceLoadPriorityUnresolved)
112 return request.priority(); 122 return request.priority();
113 123
114 switch (type) { 124 switch (type) {
115 case Resource::MainResource: 125 case Resource::MainResource:
116 return ResourceLoadPriorityVeryHigh; 126 return ResourceLoadPriorityVeryHigh;
117 case Resource::CSSStyleSheet: 127 case Resource::CSSStyleSheet:
118 return ResourceLoadPriorityHigh; 128 return ResourceLoadPriorityHigh;
119 case Resource::Script: 129 case Resource::Script:
(...skipping 13 matching lines...) Expand all
133 return ResourceLoadPriorityLow; 143 return ResourceLoadPriorityLow;
134 case Resource::TextTrack: 144 case Resource::TextTrack:
135 return ResourceLoadPriorityLow; 145 return ResourceLoadPriorityLow;
136 case Resource::Shader: 146 case Resource::Shader:
137 return ResourceLoadPriorityMedium; 147 return ResourceLoadPriorityMedium;
138 } 148 }
139 ASSERT_NOT_REACHED(); 149 ASSERT_NOT_REACHED();
140 return ResourceLoadPriorityUnresolved; 150 return ResourceLoadPriorityUnresolved;
141 } 151 }
142 152
143 static Resource* resourceFromDataURIRequest(const ResourceRequest& request) 153 Resource* resourceFromDataURIRequest(const ResourceRequest& request)
144 { 154 {
145 const KURL& url = request.url(); 155 const KURL& url = request.url();
146 ASSERT(url.protocolIsData()); 156 ASSERT(url.protocolIsData());
147 157
148 WebKit::WebString mimetype; 158 WebKit::WebString mimetype;
149 WebKit::WebString charset; 159 WebKit::WebString charset;
150 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(WebKit::Platform::curre nt()->parseDataURL(url, mimetype, charset)); 160 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(WebKit::Platform::curre nt()->parseDataURL(url, mimetype, charset));
151 if (!data) 161 if (!data)
152 return 0; 162 return 0;
153 ResourceResponse response(url, mimetype, data->size(), charset, String()); 163 ResourceResponse response(url, mimetype, data->size(), charset, String());
154 164
155 Resource* resource = createResource(Resource::Image, request, charset); 165 Resource* resource = createResource(Resource::Image, request, charset);
156 resource->responseReceived(response); 166 resource->responseReceived(response);
157 // FIXME: AppendData causes an unnecessary memcpy. 167 // FIXME: AppendData causes an unnecessary memcpy.
158 if (data->size()) 168 if (data->size())
159 resource->appendData(data->data(), data->size()); 169 resource->appendData(data->data(), data->size());
160 resource->finish(); 170 resource->finish();
161 return resource; 171 return resource;
162 } 172 }
163 173
174 } // namespace
175
164 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) 176 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader)
165 : m_document(0) 177 : m_document(0)
166 , m_documentLoader(documentLoader) 178 , m_documentLoader(documentLoader)
167 , m_requestCount(0) 179 , m_requestCount(0)
168 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired) 180 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired)
169 , m_autoLoadImages(true) 181 , m_autoLoadImages(true)
170 , m_imagesEnabled(true) 182 , m_imagesEnabled(true)
171 , m_allowStaleResources(false) 183 , m_allowStaleResources(false)
172 { 184 {
173 } 185 }
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 // See if we can use an existing resource from the cache. 546 // See if we can use an existing resource from the cache.
535 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); 547 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url);
536 548
537 const RevalidationPolicy policy = determineRevalidationPolicy(type, request. mutableResourceRequest(), request.forPreload(), resource.get(), request.defer()) ; 549 const RevalidationPolicy policy = determineRevalidationPolicy(type, request. mutableResourceRequest(), request.forPreload(), resource.get(), request.defer()) ;
538 switch (policy) { 550 switch (policy) {
539 case Reload: 551 case Reload:
540 memoryCache()->remove(resource.get()); 552 memoryCache()->remove(resource.get());
541 // Fall through 553 // Fall through
542 case Load: 554 case Load:
543 resource = loadResource(type, request, request.charset()); 555 resource = loadResource(type, request, request.charset());
556 HistogramSupport::histogramEnumeration(
557 "Renderer.ResourceFetcher.ActionUponResourceRequest", LoadResource,
abarth-chromium 2013/09/13 17:38:18 Renderer -> WebCore
Philippe 2013/09/16 11:47:21 Done.
558 ActionUponResourceRequestBoundaryValue);
544 break; 559 break;
545 case Revalidate: 560 case Revalidate:
546 resource = revalidateResource(request, resource.get()); 561 resource = revalidateResource(request, resource.get());
562 HistogramSupport::histogramEnumeration(
563 "Renderer.ResourceFetcher.ActionUponResourceRequest", RevalidateReso urce,
564 ActionUponResourceRequestBoundaryValue);
547 break; 565 break;
548 case Use: 566 case Use:
549 resource->updateForAccess(); 567 resource->updateForAccess();
550 notifyLoadedFromMemoryCache(resource.get()); 568 notifyLoadedFromMemoryCache(resource.get());
569 HistogramSupport::histogramEnumeration(
570 "Renderer.ResourceFetcher.ActionUponResourceRequest", UseResourceFro mCache,
571 ActionUponResourceRequestBoundaryValue);
572 HistogramSupport::histogramEnumeration(
573 "Renderer.ResourceFetcher.ResourceHasClientUponCacheHit", resource-> hasClients(), 2);
574 HistogramSupport::histogramEnumeration(
575 "Renderer.ResourceFetcher.ResourceTypeUponCacheHit", resource->type( ),
576 Resource::TypeBoundaryValue);
551 break; 577 break;
552 } 578 }
553 579
554 if (!resource) 580 if (!resource)
555 return 0; 581 return 0;
556 582
557 if (policy != Use) 583 if (policy != Use)
558 resource->setIdentifier(createUniqueIdentifier()); 584 resource->setIdentifier(createUniqueIdentifier());
559 585
560 if (!request.forPreload() || policy != Use) { 586 if (!request.forPreload() || policy != Use) {
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 } 1336 }
1311 #endif 1337 #endif
1312 1338
1313 const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions() 1339 const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions()
1314 { 1340 {
1315 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul tOriginRestrictionsForType, DocumentContext)); 1341 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul tOriginRestrictionsForType, DocumentContext));
1316 return options; 1342 return options;
1317 } 1343 }
1318 1344
1319 } 1345 }
OLDNEW
« Source/core/fetch/Resource.h ('K') | « Source/core/fetch/Resource.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698