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

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

Issue 2499263002: Add UMA to estimate deroppable memory usage of encoded data size in Resources (Closed)
Patch Set: Address on reviews Created 4 years, 1 month 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
11 version 2 of the License, or (at your option) any later version. 11 version 2 of the License, or (at your option) any later version.
12 12
13 This library is distributed in the hope that it will be useful, 13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details. 16 Library General Public License for more details.
17 17
18 You should have received a copy of the GNU Library General Public License 18 You should have received a copy of the GNU Library General Public License
19 along with this library; see the file COPYING.LIB. If not, write to 19 along with this library; see the file COPYING.LIB. If not, write to
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. 21 Boston, MA 02110-1301, USA.
22 */ 22 */
23 23
24 #include "core/fetch/ImageResource.h" 24 #include "core/fetch/ImageResource.h"
25 25
26 #include "base/metrics/histogram_macros.h"
26 #include "core/fetch/ImageResourceObserver.h" 27 #include "core/fetch/ImageResourceObserver.h"
27 #include "core/fetch/MemoryCache.h" 28 #include "core/fetch/MemoryCache.h"
28 #include "core/fetch/ResourceClient.h" 29 #include "core/fetch/ResourceClient.h"
29 #include "core/fetch/ResourceFetcher.h" 30 #include "core/fetch/ResourceFetcher.h"
30 #include "core/fetch/ResourceLoader.h" 31 #include "core/fetch/ResourceLoader.h"
31 #include "core/fetch/ResourceLoadingLog.h" 32 #include "core/fetch/ResourceLoadingLog.h"
32 #include "core/svg/graphics/SVGImage.h" 33 #include "core/svg/graphics/SVGImage.h"
33 #include "platform/RuntimeEnabledFeatures.h" 34 #include "platform/RuntimeEnabledFeatures.h"
34 #include "platform/SharedBuffer.h" 35 #include "platform/SharedBuffer.h"
35 #include "platform/geometry/IntSize.h" 36 #include "platform/geometry/IntSize.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 101 }
101 102
102 ImageResource::ImageResource(const ResourceRequest& resourceRequest, 103 ImageResource::ImageResource(const ResourceRequest& resourceRequest,
103 const ResourceLoaderOptions& options, 104 const ResourceLoaderOptions& options,
104 bool isPlaceholder) 105 bool isPlaceholder)
105 : Resource(resourceRequest, Image, options), 106 : Resource(resourceRequest, Image, options),
106 m_devicePixelRatioHeaderValue(1.0), 107 m_devicePixelRatioHeaderValue(1.0),
107 m_image(nullptr), 108 m_image(nullptr),
108 m_hasDevicePixelRatioHeaderValue(false), 109 m_hasDevicePixelRatioHeaderValue(false),
109 m_isSchedulingReload(false), 110 m_isSchedulingReload(false),
110 m_isPlaceholder(isPlaceholder) { 111 m_isPlaceholder(isPlaceholder),
112 m_isRefetchableFromDiskCache(true) {
111 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(ResourceRequest) " << this; 113 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(ResourceRequest) " << this;
112 } 114 }
113 115
114 ImageResource::ImageResource(blink::Image* image, 116 ImageResource::ImageResource(blink::Image* image,
115 const ResourceLoaderOptions& options) 117 const ResourceLoaderOptions& options)
116 : Resource(ResourceRequest(""), Image, options), 118 : Resource(ResourceRequest(""), Image, options),
117 m_devicePixelRatioHeaderValue(1.0), 119 m_devicePixelRatioHeaderValue(1.0),
118 m_image(image), 120 m_image(image),
119 m_hasDevicePixelRatioHeaderValue(false), 121 m_hasDevicePixelRatioHeaderValue(false),
120 m_isSchedulingReload(false), 122 m_isSchedulingReload(false),
121 m_isPlaceholder(false) { 123 m_isPlaceholder(false),
124 m_isRefetchableFromDiskCache(true) {
122 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(Image) " << this; 125 RESOURCE_LOADING_DVLOG(1) << "new ImageResource(Image) " << this;
123 setStatus(Cached); 126 setStatus(Cached);
124 } 127 }
125 128
126 ImageResource::~ImageResource() { 129 ImageResource::~ImageResource() {
127 RESOURCE_LOADING_DVLOG(1) << "~ImageResource " << this; 130 RESOURCE_LOADING_DVLOG(1) << "~ImageResource " << this;
128 clearImage(); 131 clearImage();
129 } 132 }
130 133
131 DEFINE_TRACE(ImageResource) { 134 DEFINE_TRACE(ImageResource) {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 } 170 }
168 171
169 void ImageResource::didAddClient(ResourceClient* client) { 172 void ImageResource::didAddClient(ResourceClient* client) {
170 DCHECK((m_multipartParser && isLoading()) || !data() || m_image); 173 DCHECK((m_multipartParser && isLoading()) || !data() || m_image);
171 174
172 // Don't notify observers and clients of completion if this ImageResource is 175 // Don't notify observers and clients of completion if this ImageResource is
173 // about to be reloaded. 176 // about to be reloaded.
174 if (m_isSchedulingReload || shouldReloadBrokenPlaceholder()) 177 if (m_isSchedulingReload || shouldReloadBrokenPlaceholder())
175 return; 178 return;
176 179
180 if (client->isRefetchableFromDiskCache())
181 m_isRefetchableFromDiskCache = false;
182
177 Resource::didAddClient(client); 183 Resource::didAddClient(client);
178 } 184 }
179 185
180 void ImageResource::addObserver(ImageResourceObserver* observer) { 186 void ImageResource::addObserver(ImageResourceObserver* observer) {
181 willAddClientOrObserver(MarkAsReferenced); 187 willAddClientOrObserver(MarkAsReferenced);
182 188
183 m_observers.add(observer); 189 m_observers.add(observer);
184 190
185 if (isCacheValidator()) 191 if (isCacheValidator())
186 return; 192 return;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 void ImageResource::destroyDecodedDataForFailedRevalidation() { 251 void ImageResource::destroyDecodedDataForFailedRevalidation() {
246 clearImage(); 252 clearImage();
247 setDecodedSize(0); 253 setDecodedSize(0);
248 } 254 }
249 255
250 void ImageResource::destroyDecodedDataIfPossible() { 256 void ImageResource::destroyDecodedDataIfPossible() {
251 if (!m_image) 257 if (!m_image)
252 return; 258 return;
253 CHECK(!errorOccurred()); 259 CHECK(!errorOccurred());
254 m_image->destroyDecodedData(); 260 m_image->destroyDecodedData();
261 if (!isPreloaded() && m_isRefetchableFromDiskCache) {
262 UMA_HISTOGRAM_MEMORY_KB("Memory.Renderer.EstimatedDroppableEncodedSize",
263 encodedSize() / 1024);
264 }
255 } 265 }
256 266
257 void ImageResource::doResetAnimation() { 267 void ImageResource::doResetAnimation() {
258 if (m_image) 268 if (m_image)
259 m_image->resetAnimation(); 269 m_image->resetAnimation();
260 } 270 }
261 271
262 void ImageResource::allClientsAndObserversRemoved() { 272 void ImageResource::allClientsAndObserversRemoved() {
263 if (m_image) { 273 if (m_image) {
264 CHECK(!errorOccurred()); 274 CHECK(!errorOccurred());
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 WebServiceWorkerResponseTypeOpaque; 689 WebServiceWorkerResponseTypeOpaque;
680 } 690 }
681 if (!getImage()->currentFrameHasSingleSecurityOrigin()) 691 if (!getImage()->currentFrameHasSingleSecurityOrigin())
682 return false; 692 return false;
683 if (passesAccessControlCheck(securityOrigin)) 693 if (passesAccessControlCheck(securityOrigin))
684 return true; 694 return true;
685 return !securityOrigin->taintsCanvas(response().url()); 695 return !securityOrigin->taintsCanvas(response().url());
686 } 696 }
687 697
688 } // namespace blink 698 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698