OLD | NEW |
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 GrResourceCache_DEFINED | 9 #ifndef GrResourceCache_DEFINED |
10 #define GrResourceCache_DEFINED | 10 #define GrResourceCache_DEFINED |
(...skipping 14 matching lines...) Expand all Loading... |
25 /** | 25 /** |
26 * Manages the lifetime of all GrGpuResource instances. | 26 * Manages the lifetime of all GrGpuResource instances. |
27 * | 27 * |
28 * Resources may have optionally have two types of keys: | 28 * Resources may have optionally have two types of keys: |
29 * 1) A scratch key. This is for resources whose allocations are cached but
not their contents. | 29 * 1) A scratch key. This is for resources whose allocations are cached but
not their contents. |
30 * Multiple resources can share the same scratch key. This is so a calle
r can have two | 30 * Multiple resources can share the same scratch key. This is so a calle
r can have two |
31 * resource instances with the same properties (e.g. multipass rendering
that ping-pongs | 31 * resource instances with the same properties (e.g. multipass rendering
that ping-pongs |
32 * between two temporary surfaces). The scratch key is set at resource c
reation time and | 32 * between two temporary surfaces). The scratch key is set at resource c
reation time and |
33 * should never change. Resources need not have a scratch key. | 33 * should never change. Resources need not have a scratch key. |
34 * 2) A unique key. This key's meaning is specific to the domain that creat
ed the key. Only one | 34 * 2) A unique key. This key's meaning is specific to the domain that creat
ed the key. Only one |
35 * resource may have a given unique key. The unique key can be set after
resource creation | 35 * resource may have a given unique key. The unique key can be set, clea
red, or changed |
36 * creation. Currently it may only be set once and cannot be cleared. Th
is restriction will | 36 * anytime after resource creation. |
37 * be removed. | 37 * |
38 * A unique key always takes precedence over a scratch key when a resource has b
oth types of keys. | 38 * A unique key always takes precedence over a scratch key when a resource has b
oth types of keys. |
39 * If a resource has neither key type then it will be deleted as soon as the las
t reference to it | 39 * If a resource has neither key type then it will be deleted as soon as the las
t reference to it |
40 * is dropped. | 40 * is dropped. |
41 */ | 41 */ |
42 class GrResourceCache { | 42 class GrResourceCache { |
43 public: | 43 public: |
44 GrResourceCache(); | 44 GrResourceCache(); |
45 ~GrResourceCache(); | 45 ~GrResourceCache(); |
46 | 46 |
47 /** Used to access functionality needed by GrGpuResource for lifetime manage
ment. */ | 47 /** Used to access functionality needed by GrGpuResource for lifetime manage
ment. */ |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 #endif | 172 #endif |
173 | 173 |
174 private: | 174 private: |
175 /////////////////////////////////////////////////////////////////////////// | 175 /////////////////////////////////////////////////////////////////////////// |
176 /// @name Methods accessible via ResourceAccess | 176 /// @name Methods accessible via ResourceAccess |
177 //// | 177 //// |
178 void insertResource(GrGpuResource*); | 178 void insertResource(GrGpuResource*); |
179 void removeResource(GrGpuResource*); | 179 void removeResource(GrGpuResource*); |
180 void notifyPurgeable(GrGpuResource*); | 180 void notifyPurgeable(GrGpuResource*); |
181 void didChangeGpuMemorySize(const GrGpuResource*, size_t oldSize); | 181 void didChangeGpuMemorySize(const GrGpuResource*, size_t oldSize); |
182 bool didSetUniqueKey(GrGpuResource*); | 182 void changeUniqueKey(GrGpuResource*, const GrUniqueKey&); |
| 183 void removeUniqueKey(GrGpuResource*); |
183 void willRemoveScratchKey(const GrGpuResource*); | 184 void willRemoveScratchKey(const GrGpuResource*); |
184 void willRemoveUniqueKey(const GrGpuResource*); | |
185 void didChangeBudgetStatus(GrGpuResource*); | 185 void didChangeBudgetStatus(GrGpuResource*); |
186 void refAndMakeResourceMRU(GrGpuResource*); | 186 void refAndMakeResourceMRU(GrGpuResource*); |
187 /// @} | 187 /// @} |
188 | 188 |
189 void internalPurgeAsNeeded(); | 189 void internalPurgeAsNeeded(); |
190 void processInvalidUniqueKeys(const SkTArray<GrUniqueKeyInvalidatedMessage>&
); | 190 void processInvalidUniqueKeys(const SkTArray<GrUniqueKeyInvalidatedMessage>&
); |
191 void addToNonpurgeableArray(GrGpuResource*); | 191 void addToNonpurgeableArray(GrGpuResource*); |
192 void removeFromNonpurgeableArray(GrGpuResource*); | 192 void removeFromNonpurgeableArray(GrGpuResource*); |
193 bool overBudget() const { return fBudgetedBytes > fMaxBytes || fBudgetedCoun
t > fMaxCount; } | 193 bool overBudget() const { return fBudgetedBytes > fMaxBytes || fBudgetedCoun
t > fMaxCount; } |
194 | 194 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 void notifyPurgeable(GrGpuResource* resource) { fCache->notifyPurgeable(reso
urce); } | 290 void notifyPurgeable(GrGpuResource* resource) { fCache->notifyPurgeable(reso
urce); } |
291 | 291 |
292 /** | 292 /** |
293 * Called by GrGpuResources when their sizes change. | 293 * Called by GrGpuResources when their sizes change. |
294 */ | 294 */ |
295 void didChangeGpuMemorySize(const GrGpuResource* resource, size_t oldSize) { | 295 void didChangeGpuMemorySize(const GrGpuResource* resource, size_t oldSize) { |
296 fCache->didChangeGpuMemorySize(resource, oldSize); | 296 fCache->didChangeGpuMemorySize(resource, oldSize); |
297 } | 297 } |
298 | 298 |
299 /** | 299 /** |
300 * Called by GrGpuResources when their unique keys change. | 300 * Called by GrGpuResources to change their unique keys. |
301 * | |
302 * This currently returns a bool and fails when an existing resource has a k
ey that collides | |
303 * with the new key. In the future it will null out the unique key for the e
xisting resource. | |
304 * The failure is a temporary measure which will be fixed soon. | |
305 */ | 301 */ |
306 bool didSetUniqueKey(GrGpuResource* resource) { return fCache->didSetUniqueK
ey(resource); } | 302 void changeUniqueKey(GrGpuResource* resource, const GrUniqueKey& newKey) { |
307 | 303 fCache->changeUniqueKey(resource, newKey); |
308 /** | |
309 * Called by a GrGpuResource when it removes its unique key. | |
310 */ | |
311 void willRemoveUniqueKey(GrGpuResource* resource) { | |
312 return fCache->willRemoveUniqueKey(resource); | |
313 } | 304 } |
314 | 305 |
315 /** | 306 /** |
| 307 * Called by a GrGpuResource to remove its unique key. |
| 308 */ |
| 309 void removeUniqueKey(GrGpuResource* resource) { fCache->removeUniqueKey(reso
urce); } |
| 310 |
| 311 /** |
316 * Called by a GrGpuResource when it removes its scratch key. | 312 * Called by a GrGpuResource when it removes its scratch key. |
317 */ | 313 */ |
318 void willRemoveScratchKey(const GrGpuResource* resource) { | 314 void willRemoveScratchKey(const GrGpuResource* resource) { |
319 fCache->willRemoveScratchKey(resource); | 315 fCache->willRemoveScratchKey(resource); |
320 } | 316 } |
321 | 317 |
322 /** | 318 /** |
323 * Called by GrGpuResources when they change from budgeted to unbudgeted or
vice versa. | 319 * Called by GrGpuResources when they change from budgeted to unbudgeted or
vice versa. |
324 */ | 320 */ |
325 void didChangeBudgetStatus(GrGpuResource* resource) { fCache->didChangeBudge
tStatus(resource); } | 321 void didChangeBudgetStatus(GrGpuResource* resource) { fCache->didChangeBudge
tStatus(resource); } |
326 | 322 |
327 // No taking addresses of this type. | 323 // No taking addresses of this type. |
328 const ResourceAccess* operator&() const; | 324 const ResourceAccess* operator&() const; |
329 ResourceAccess* operator&(); | 325 ResourceAccess* operator&(); |
330 | 326 |
331 GrResourceCache* fCache; | 327 GrResourceCache* fCache; |
332 | 328 |
333 friend class GrGpuResource; // To access all the proxy inline methods. | 329 friend class GrGpuResource; // To access all the proxy inline methods. |
334 friend class GrResourceCache; // To create this type. | 330 friend class GrResourceCache; // To create this type. |
335 }; | 331 }; |
336 | 332 |
337 inline GrResourceCache::ResourceAccess GrResourceCache::resourceAccess() { | 333 inline GrResourceCache::ResourceAccess GrResourceCache::resourceAccess() { |
338 return ResourceAccess(this); | 334 return ResourceAccess(this); |
339 } | 335 } |
340 | 336 |
341 #endif | 337 #endif |
OLD | NEW |