Changeset 208049 in webkit
- Timestamp:
- Oct 28, 2016, 8:39:27 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r208042 r208049 1 2016-10-28 Antti Koivisto <antti@apple.com> 2 3 Always use iOS preload behavior 4 https://bugs.webkit.org/show_bug.cgi?id=164127 5 6 Reviewed by Andreas Kling. 7 8 * http/tests/webgl/1.0.2/readPixelsBadArgs-expected.txt: 9 1 10 2016-10-28 Antoine Quint <graouts@apple.com> 2 11 -
trunk/LayoutTests/http/tests/webgl/1.0.2/readPixelsBadArgs-expected.txt
r157888 r208049 1 Blocked access to external URL http://www.opengl.org/img/opengl_logo.jpg 1 2 Blocked access to external URL http://www.opengl.org/img/opengl_logo.jpg 2 3 This test runs the WebGL Test listed below in an iframe and reports PASS or FAIL. -
trunk/Source/WebCore/ChangeLog
r208046 r208049 1 2016-10-28 Antti Koivisto <antti@apple.com> 2 3 Always use iOS preload behavior 4 https://bugs.webkit.org/show_bug.cgi?id=164127 5 6 Reviewed by Andreas Kling. 7 8 On non-iOS platforms we were delaying issuing lower priority preload (images mostly) until document has body. 9 This should be unnecessary as networking layer prioritization should ensure higher priority resources are 10 loaded earlier. Testing on iOS has showed that more aggressive behavior is a win. 11 12 This patch switches to iOS behavior on all platforms (and simplified the logic). 13 14 * html/parser/HTMLResourcePreloader.cpp: 15 (WebCore::HTMLResourcePreloader::preload): 16 * loader/LinkLoader.cpp: 17 (WebCore::LinkLoader::preloadIfNeeded): 18 * loader/cache/CachedResourceLoader.cpp: 19 (WebCore::CachedResourceLoader::performPostLoadActions): 20 (WebCore::CachedResourceLoader::preload): 21 (WebCore::CachedResourceLoader::isPreloaded): 22 (WebCore::CachedResourceLoader::checkForPendingPreloads): Deleted. 23 (WebCore::CachedResourceLoader::requestPreload): Deleted. 24 (WebCore::CachedResourceLoader::clearPendingPreloads): Deleted. 25 * loader/cache/CachedResourceLoader.h: 26 1 27 2016-10-28 Youenn Fablet <youenn@apple.com> 2 28 -
trunk/Source/WebCore/html/parser/HTMLResourcePreloader.cpp
r207053 r208049 69 69 return; 70 70 71 m_document.cachedResourceLoader().preload(preload->resourceType(), preload->resourceRequest(m_document) , CachedResourceLoader::ImplicitPreload);71 m_document.cachedResourceLoader().preload(preload->resourceType(), preload->resourceRequest(m_document)); 72 72 } 73 73 -
trunk/Source/WebCore/loader/LinkLoader.cpp
r206903 r208049 163 163 164 164 linkRequest.setAsPotentiallyCrossOrigin(crossOriginMode, document); 165 CachedResourceHandle<CachedResource> cachedLinkResource = document.cachedResourceLoader().preload(type.value(), WTFMove(linkRequest) , CachedResourceLoader::ExplicitPreload);165 CachedResourceHandle<CachedResource> cachedLinkResource = document.cachedResourceLoader().preload(type.value(), WTFMove(linkRequest)); 166 166 167 167 if (cachedLinkResource) -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r207871 r208049 1190 1190 void CachedResourceLoader::performPostLoadActions() 1191 1191 { 1192 checkForPendingPreloads();1193 1194 1192 platformStrategies()->loaderStrategy()->servePendingRequests(); 1195 1193 } … … 1212 1210 } 1213 1211 1214 CachedResourceHandle<CachedResource> CachedResourceLoader::preload(CachedResource::Type type, CachedResourceRequest&& request, PreloadType preloadType) 1215 { 1216 // We always preload resources on iOS. See <https://bugs.webkit.org/show_bug.cgi?id=91276>. 1217 // FIXME: We should consider adding a setting to toggle aggressive preloading behavior as opposed 1218 // to making this behavior specific to iOS. 1219 #if !PLATFORM(IOS) 1220 bool hasRendering = m_document->bodyOrFrameset() && m_document->renderView(); 1221 bool canBlockParser = type == CachedResource::Script || type == CachedResource::CSSStyleSheet; 1222 if (!hasRendering && !canBlockParser && preloadType == ImplicitPreload) { 1223 // Don't preload subresources that can't block the parser before we have something to draw. 1224 // This helps prevent preloads from delaying first display when bandwidth is limited. 1225 PendingPreload pendingPreload = { type, WTFMove(request) }; 1226 m_pendingPreloads.append(pendingPreload); 1227 return nullptr; 1228 } 1229 #else 1230 UNUSED_PARAM(preloadType); 1231 #endif 1232 return requestPreload(type, WTFMove(request)); 1233 } 1234 1235 void CachedResourceLoader::checkForPendingPreloads() 1236 { 1237 if (m_pendingPreloads.isEmpty()) 1238 return; 1239 auto* body = m_document->bodyOrFrameset(); 1240 if (!body || !body->renderer()) 1241 return; 1242 #if PLATFORM(IOS) 1243 // We always preload resources on iOS. See <https://bugs.webkit.org/show_bug.cgi?id=91276>. 1244 // So, we should never have any pending preloads. 1245 // FIXME: We should look to avoid compiling this code entirely when building for iOS. 1246 ASSERT_NOT_REACHED(); 1247 #endif 1248 while (!m_pendingPreloads.isEmpty()) { 1249 PendingPreload preload = m_pendingPreloads.takeFirst(); 1250 // Don't request preload if the resource already loaded normally (this will result in double load if the page is being reloaded with cached results ignored). 1251 if (!cachedResource(preload.m_request.resourceRequest().url())) 1252 requestPreload(preload.m_type, WTFMove(preload.m_request)); 1253 } 1254 m_pendingPreloads.clear(); 1255 } 1256 1257 CachedResourceHandle<CachedResource> CachedResourceLoader::requestPreload(CachedResource::Type type, CachedResourceRequest&& request) 1212 CachedResourceHandle<CachedResource> CachedResourceLoader::preload(CachedResource::Type type, CachedResourceRequest&& request) 1258 1213 { 1259 1214 if (request.charset().isEmpty() && (type == CachedResource::Script || type == CachedResource::CSSStyleSheet)) … … 1288 1243 } 1289 1244 } 1290 1291 for (auto& pendingPreload : m_pendingPreloads) {1292 if (pendingPreload.m_request.resourceRequest().url() == url)1293 return true;1294 }1295 1245 return false; 1296 1246 } … … 1311 1261 } 1312 1262 m_preloads = nullptr; 1313 }1314 1315 void CachedResourceLoader::clearPendingPreloads()1316 {1317 m_pendingPreloads.clear();1318 1263 } 1319 1264 -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.h
r207817 r208049 131 131 WEBCORE_EXPORT bool isPreloaded(const String& urlString) const; 132 132 void clearPreloads(); 133 void clearPendingPreloads(); 134 enum PreloadType { ImplicitPreload, ExplicitPreload }; 135 CachedResourceHandle<CachedResource> preload(CachedResource::Type, CachedResourceRequest&&, PreloadType); 136 void checkForPendingPreloads(); 133 CachedResourceHandle<CachedResource> preload(CachedResource::Type, CachedResourceRequest&&); 137 134 void printPreloadStats(); 138 135 … … 158 155 CachedResourceHandle<CachedResource> revalidateResource(CachedResourceRequest&&, CachedResource&); 159 156 CachedResourceHandle<CachedResource> loadResource(CachedResource::Type, CachedResourceRequest&&); 160 CachedResourceHandle<CachedResource> requestPreload(CachedResource::Type, CachedResourceRequest&&);161 157 162 158 void prepareFetch(CachedResource::Type, CachedResourceRequest&); … … 192 188 193 189 std::unique_ptr<ListHashSet<CachedResource*>> m_preloads; 194 struct PendingPreload {195 CachedResource::Type m_type;196 CachedResourceRequest m_request;197 };198 Deque<PendingPreload> m_pendingPreloads;199 190 200 191 Timer m_garbageCollectDocumentResourcesTimer;
Note:
See TracChangeset
for help on using the changeset viewer.