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

Side by Side Diff: third_party/WebKit/Source/core/fetch/ImageResource.cpp

Issue 2361263003: Blink: Throttle progressively loaded images. (Closed)
Patch Set: wip: update Created 4 years, 2 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
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) 2006 Samuel Weinig (sam.weinig@gmail.com) 5 Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
6 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 6 Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
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 27 matching lines...) Expand all
38 #include "public/platform/WebCachePolicy.h" 38 #include "public/platform/WebCachePolicy.h"
39 #include "wtf/CurrentTime.h" 39 #include "wtf/CurrentTime.h"
40 #include "wtf/HashCountedSet.h" 40 #include "wtf/HashCountedSet.h"
41 #include "wtf/StdLibExtras.h" 41 #include "wtf/StdLibExtras.h"
42 #include "wtf/Vector.h" 42 #include "wtf/Vector.h"
43 #include <memory> 43 #include <memory>
44 #include <v8.h> 44 #include <v8.h>
45 45
46 namespace blink { 46 namespace blink {
47 47
48 static double flushDelay = 1.;
enne (OOO) 2016/09/29 22:49:34 flushDelayInSeconds? Mumble mumble wtb base::Time
vmpstr 2016/10/04 21:18:36 Done.
49
48 ImageResource* ImageResource::fetch(FetchRequest& request, ResourceFetcher* fetc her) 50 ImageResource* ImageResource::fetch(FetchRequest& request, ResourceFetcher* fetc her)
49 { 51 {
50 if (request.resourceRequest().requestContext() == WebURLRequest::RequestCont extUnspecified) 52 if (request.resourceRequest().requestContext() == WebURLRequest::RequestCont extUnspecified)
51 request.mutableResourceRequest().setRequestContext(WebURLRequest::Reques tContextImage); 53 request.mutableResourceRequest().setRequestContext(WebURLRequest::Reques tContextImage);
52 if (fetcher->context().pageDismissalEventBeingDispatched()) { 54 if (fetcher->context().pageDismissalEventBeingDispatched()) {
53 KURL requestURL = request.resourceRequest().url(); 55 KURL requestURL = request.resourceRequest().url();
54 if (requestURL.isValid() && fetcher->context().canRequest(Resource::Imag e, request.resourceRequest(), requestURL, request.options(), request.forPreload( ), request.getOriginRestriction())) 56 if (requestURL.isValid() && fetcher->context().canRequest(Resource::Imag e, request.resourceRequest(), requestURL, request.options(), request.forPreload( ), request.getOriginRestriction()))
55 fetcher->context().sendImagePing(requestURL); 57 fetcher->context().sendImagePing(requestURL);
56 return nullptr; 58 return nullptr;
57 } 59 }
58 60
59 return toImageResource(fetcher->requestResource(request, ImageResourceFactor y())); 61 return toImageResource(fetcher->requestResource(request, ImageResourceFactor y()));
60 } 62 }
61 63
62 ImageResource::ImageResource(const ResourceRequest& resourceRequest, const Resou rceLoaderOptions& options) 64 ImageResource::ImageResource(const ResourceRequest& resourceRequest, const Resou rceLoaderOptions& options)
63 : Resource(resourceRequest, Image, options) 65 : Resource(resourceRequest, Image, options)
64 , m_devicePixelRatioHeaderValue(1.0) 66 , m_devicePixelRatioHeaderValue(1.0)
65 , m_image(nullptr) 67 , m_image(nullptr)
66 , m_hasDevicePixelRatioHeaderValue(false) 68 , m_hasDevicePixelRatioHeaderValue(false)
69 , m_lastFlushTime(0.)
67 { 70 {
68 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(ResourceRequest) " << this; 71 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(ResourceRequest) " << this;
69 } 72 }
70 73
71 ImageResource::ImageResource(blink::Image* image, const ResourceLoaderOptions& o ptions) 74 ImageResource::ImageResource(blink::Image* image, const ResourceLoaderOptions& o ptions)
72 : Resource(ResourceRequest(""), Image, options) 75 : Resource(ResourceRequest(""), Image, options)
73 , m_devicePixelRatioHeaderValue(1.0) 76 , m_devicePixelRatioHeaderValue(1.0)
74 , m_image(image) 77 , m_image(image)
75 , m_hasDevicePixelRatioHeaderValue(false) 78 , m_hasDevicePixelRatioHeaderValue(false)
79 , m_lastFlushTime(0.)
76 { 80 {
77 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(Image) " << this; 81 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(Image) " << this;
78 setStatus(Cached); 82 setStatus(Cached);
79 } 83 }
80 84
81 ImageResource::~ImageResource() 85 ImageResource::~ImageResource()
82 { 86 {
83 RESOURCE_LOADING_DVLOG(1) << "~ImageResource " << this; 87 RESOURCE_LOADING_DVLOG(1) << "~ImageResource " << this;
84 clearImage(); 88 clearImage();
85 } 89 }
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 return nullptr; 244 return nullptr;
241 } 245 }
242 246
243 void ImageResource::appendData(const char* data, size_t length) 247 void ImageResource::appendData(const char* data, size_t length)
244 { 248 {
245 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(length); 249 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(length);
246 if (m_multipartParser) { 250 if (m_multipartParser) {
247 m_multipartParser->appendData(data, length); 251 m_multipartParser->appendData(data, length);
248 } else { 252 } else {
249 Resource::appendData(data, length); 253 Resource::appendData(data, length);
250 updateImage(false); 254 double now = WTF::currentTime();
255 if (m_lastFlushTime == 0.) {
256 m_lastFlushTime = now;
257 } else if (m_lastFlushTime + flushDelay <= now) {
258 updateImage(false);
enne (OOO) 2016/09/29 22:49:34 Can you leave a big ol' comment here saying this t
vmpstr 2016/10/04 21:18:36 Actually looking closer at the code, I think even
259 m_lastFlushTime = now;
260 }
251 } 261 }
252 } 262 }
253 263
254 std::pair<blink::Image*, float> ImageResource::brokenImage(float deviceScaleFact or) 264 std::pair<blink::Image*, float> ImageResource::brokenImage(float deviceScaleFact or)
255 { 265 {
256 if (deviceScaleFactor >= 2) { 266 if (deviceScaleFactor >= 2) {
257 DEFINE_STATIC_REF(blink::Image, brokenImageHiRes, (blink::Image::loadPla tformResource("missingImage@2x"))); 267 DEFINE_STATIC_REF(blink::Image, brokenImageHiRes, (blink::Image::loadPla tformResource("missingImage@2x")));
258 return std::make_pair(brokenImageHiRes, 2); 268 return std::make_pair(brokenImageHiRes, 2);
259 } 269 }
260 270
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 if (response().wasFetchedViaServiceWorker()) 603 if (response().wasFetchedViaServiceWorker())
594 return response().serviceWorkerResponseType() != WebServiceWorkerRespons eTypeOpaque; 604 return response().serviceWorkerResponseType() != WebServiceWorkerRespons eTypeOpaque;
595 if (!getImage()->currentFrameHasSingleSecurityOrigin()) 605 if (!getImage()->currentFrameHasSingleSecurityOrigin())
596 return false; 606 return false;
597 if (passesAccessControlCheck(securityOrigin)) 607 if (passesAccessControlCheck(securityOrigin))
598 return true; 608 return true;
599 return !securityOrigin->taintsCanvas(response().url()); 609 return !securityOrigin->taintsCanvas(response().url());
600 } 610 }
601 611
602 } // namespace blink 612 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698