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

Side by Side Diff: src/gpu/GrResourceCache2.h

Issue 721353002: Allow GPU resources to not be counted against the cache budget. (Closed) Base URL: https://skia.googlesource.com/skia.git@wrap
Patch Set: fix constructor order Created 6 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
« no previous file with comments | « src/gpu/GrGpuResourceCacheAccess.h ('k') | src/gpu/GrResourceCache2.cpp » ('j') | 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 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #ifndef GrResourceCache2_DEFINED 9 #ifndef GrResourceCache2_DEFINED
10 #define GrResourceCache2_DEFINED 10 #define GrResourceCache2_DEFINED
11 11
12 #include "GrGpuResource.h" 12 #include "GrGpuResource.h"
13 #include "GrGpuResourceCacheAccess.h" 13 #include "GrGpuResourceCacheAccess.h"
14 #include "GrResourceKey.h" 14 #include "GrResourceKey.h"
15 #include "SkRefCnt.h" 15 #include "SkRefCnt.h"
16 #include "SkTInternalLList.h" 16 #include "SkTInternalLList.h"
17 #include "SkTMultiMap.h" 17 #include "SkTMultiMap.h"
18 18
19 /** 19 /**
20 * Manages the lifetime of all GrGpuResource instances. 20 * Manages the lifetime of all GrGpuResource instances.
21 * 21 *
22 * Resources may have optionally have two types of keys: 22 * Resources may have optionally have two types of keys:
23 * 1) A scratch key. This is for resources whose allocations are cached but not their contents. 23 * 1) A scratch key. This is for resources whose allocations are cached but not their contents.
24 * Multiple resources can share the same scratch key. This is so a calle r can have two 24 * Multiple resources can share the same scratch key. This is so a calle r can have two
25 * resource instances with the same properties (e.g. multipass rendering that ping pongs 25 * resource instances with the same properties (e.g. multipass rendering that ping-pongs
26 * between two temporary surfaces. The scratch key is set at resource cr eation time and 26 * between two temporary surfaces. The scratch key is set at resource cr eation time and
27 * should never change. Resources need not have a scratch key. 27 * should never change. Resources need not have a scratch key.
28 * 2) A content key. This key represents the contents of the resource rathe r than just its 28 * 2) A content key. This key represents the contents of the resource rathe r than just its
29 * allocation properties. They may not collide. The content key can be s et after resource 29 * allocation properties. They may not collide. The content key can be s et after resource
30 * creation. Currently it may only be set once and cannot be cleared. Th is restriction will 30 * creation. Currently it may only be set once and cannot be cleared. Th is restriction will
31 * be removed. 31 * be removed.
32 * If a resource has neither key type then it will be deleted as soon as the las t reference to it 32 * If a resource has neither key type then it will be deleted as soon as the las t reference to it
33 * is dropped. If a key has both keys the content key takes precedence. 33 * is dropped. If a key has both keys the content key takes precedence.
34 */ 34 */
35 class GrResourceCache2 { 35 class GrResourceCache2 {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 154
155 private: 155 private:
156 /////////////////////////////////////////////////////////////////////////// 156 ///////////////////////////////////////////////////////////////////////////
157 /// @name Methods accessible via ResourceAccess 157 /// @name Methods accessible via ResourceAccess
158 //// 158 ////
159 void insertResource(GrGpuResource*); 159 void insertResource(GrGpuResource*);
160 void removeResource(GrGpuResource*); 160 void removeResource(GrGpuResource*);
161 void notifyPurgable(GrGpuResource*); 161 void notifyPurgable(GrGpuResource*);
162 void didChangeGpuMemorySize(const GrGpuResource*, size_t oldSize); 162 void didChangeGpuMemorySize(const GrGpuResource*, size_t oldSize);
163 bool didSetContentKey(GrGpuResource*); 163 bool didSetContentKey(GrGpuResource*);
164 void didChangeBudgetStatus(GrGpuResource*);
164 void makeResourceMRU(GrGpuResource*); 165 void makeResourceMRU(GrGpuResource*);
165 /// @} 166 /// @}
166 167
167 void purgeAsNeeded() { 168 void purgeAsNeeded() {
168 if (fPurging || (fBudgetedCount <= fMaxCount && fBudgetedBytes < fMaxByt es)) { 169 if (fPurging || (fBudgetedCount <= fMaxCount && fBudgetedBytes < fMaxByt es)) {
169 return; 170 return;
170 } 171 }
171 this->internalPurgeAsNeeded(); 172 this->internalPurgeAsNeeded();
172 } 173 }
173 174
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 /** 270 /**
270 * Called by GrGpuResources when their content keys change. 271 * Called by GrGpuResources when their content keys change.
271 * 272 *
272 * This currently returns a bool and fails when an existing resource has a k ey that collides 273 * This currently returns a bool and fails when an existing resource has a k ey that collides
273 * with the new content key. In the future it will null out the content key for the existing 274 * with the new content key. In the future it will null out the content key for the existing
274 * resource. The failure is a temporary measure taken because duties are spl it between two 275 * resource. The failure is a temporary measure taken because duties are spl it between two
275 * cache objects currently. 276 * cache objects currently.
276 */ 277 */
277 bool didSetContentKey(GrGpuResource* resource) { return fCache->didSetConten tKey(resource); } 278 bool didSetContentKey(GrGpuResource* resource) { return fCache->didSetConten tKey(resource); }
278 279
280
281 /**
282 * Called by GrGpuResources when they change from budgeted to unbudgeted or vice versa.
283 */
284 void didChangeBudgetStatus(GrGpuResource* resource) { fCache->didChangeBudge tStatus(resource); }
285
279 // No taking addresses of this type. 286 // No taking addresses of this type.
280 const ResourceAccess* operator&() const; 287 const ResourceAccess* operator&() const;
281 ResourceAccess* operator&(); 288 ResourceAccess* operator&();
282 289
283 GrResourceCache2* fCache; 290 GrResourceCache2* fCache;
284 291
285 friend class GrGpuResource; // To access all the proxy inline methods. 292 friend class GrGpuResource; // To access all the proxy inline methods.
286 friend class GrResourceCache2; // To create this type. 293 friend class GrResourceCache2; // To create this type.
287 }; 294 };
288 295
289 inline GrResourceCache2::ResourceAccess GrResourceCache2::resourceAccess() { 296 inline GrResourceCache2::ResourceAccess GrResourceCache2::resourceAccess() {
290 return ResourceAccess(this); 297 return ResourceAccess(this);
291 } 298 }
292 299
293 #endif 300 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrGpuResourceCacheAccess.h ('k') | src/gpu/GrResourceCache2.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698