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

Side by Side Diff: src/gpu/GrResourceCache.cpp

Issue 1287193008: Add ANGLE workaround to prefer flushes over VRAM usage (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Update comment Created 5 years, 4 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 /* 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 9
10 #include "GrResourceCache.h" 10 #include "GrResourceCache.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 public: 51 public:
52 AutoValidate(GrResourceCache* cache) : fCache(cache) { cache->validate(); } 52 AutoValidate(GrResourceCache* cache) : fCache(cache) { cache->validate(); }
53 ~AutoValidate() { fCache->validate(); } 53 ~AutoValidate() { fCache->validate(); }
54 private: 54 private:
55 GrResourceCache* fCache; 55 GrResourceCache* fCache;
56 }; 56 };
57 57
58 ////////////////////////////////////////////////////////////////////////////// 58 //////////////////////////////////////////////////////////////////////////////
59 59
60 60
61 GrResourceCache::GrResourceCache() 61 GrResourceCache::GrResourceCache(const GrCaps* caps)
62 : fTimestamp(0) 62 : fTimestamp(0)
63 , fMaxCount(kDefaultMaxCount) 63 , fMaxCount(kDefaultMaxCount)
64 , fMaxBytes(kDefaultMaxSize) 64 , fMaxBytes(kDefaultMaxSize)
65 , fMaxUnusedFlushes(kDefaultMaxUnusedFlushes) 65 , fMaxUnusedFlushes(kDefaultMaxUnusedFlushes)
66 #if GR_CACHE_STATS 66 #if GR_CACHE_STATS
67 , fHighWaterCount(0) 67 , fHighWaterCount(0)
68 , fHighWaterBytes(0) 68 , fHighWaterBytes(0)
69 , fBudgetedHighWaterCount(0) 69 , fBudgetedHighWaterCount(0)
70 , fBudgetedHighWaterBytes(0) 70 , fBudgetedHighWaterBytes(0)
71 #endif 71 #endif
72 , fBytes(0) 72 , fBytes(0)
73 , fBudgetedCount(0) 73 , fBudgetedCount(0)
74 , fBudgetedBytes(0) 74 , fBudgetedBytes(0)
75 , fOverBudgetCB(NULL) 75 , fOverBudgetCB(NULL)
76 , fOverBudgetData(NULL) 76 , fOverBudgetData(NULL)
77 , fFlushTimestamps(NULL) 77 , fFlushTimestamps(NULL)
78 , fLastFlushTimestampIndex(0){ 78 , fLastFlushTimestampIndex(0)
79 , fPreferVRAMUseOverFlushes(caps->preferVRAMUseOverFlushes()) {
79 SkDEBUGCODE(fCount = 0;) 80 SkDEBUGCODE(fCount = 0;)
80 SkDEBUGCODE(fNewlyPurgeableResourceForValidation = NULL;) 81 SkDEBUGCODE(fNewlyPurgeableResourceForValidation = NULL;)
81 this->resetFlushTimestamps(); 82 this->resetFlushTimestamps();
82 } 83 }
83 84
84 GrResourceCache::~GrResourceCache() { 85 GrResourceCache::~GrResourceCache() {
85 this->releaseAll(); 86 this->releaseAll();
86 SkDELETE_ARRAY(fFlushTimestamps); 87 SkDELETE_ARRAY(fFlushTimestamps);
87 } 88 }
88 89
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 GrGpuResource* resource; 254 GrGpuResource* resource;
254 if (flags & (kPreferNoPendingIO_ScratchFlag | kRequireNoPendingIO_ScratchFla g)) { 255 if (flags & (kPreferNoPendingIO_ScratchFlag | kRequireNoPendingIO_ScratchFla g)) {
255 resource = fScratchMap.find(scratchKey, AvailableForScratchUse(true)); 256 resource = fScratchMap.find(scratchKey, AvailableForScratchUse(true));
256 if (resource) { 257 if (resource) {
257 this->refAndMakeResourceMRU(resource); 258 this->refAndMakeResourceMRU(resource);
258 this->validate(); 259 this->validate();
259 return resource; 260 return resource;
260 } else if (flags & kRequireNoPendingIO_ScratchFlag) { 261 } else if (flags & kRequireNoPendingIO_ScratchFlag) {
261 return NULL; 262 return NULL;
262 } 263 }
263 if (this->wouldFit(resourceSize)) { 264 // We would prefer to consume more available VRAM rather than flushing
265 // immediately, but on ANGLE this can lead to starving of the GPU.
266 if (fPreferVRAMUseOverFlushes && this->wouldFit(resourceSize)) {
264 // kPrefer is specified, we didn't find a resource without pending i o, 267 // kPrefer is specified, we didn't find a resource without pending i o,
265 // but there is still space in our budget for the resource. 268 // but there is still space in our budget for the resource so force
269 // the caller to allocate a new resource.
266 return NULL; 270 return NULL;
267 } 271 }
268 } 272 }
269 resource = fScratchMap.find(scratchKey, AvailableForScratchUse(false)); 273 resource = fScratchMap.find(scratchKey, AvailableForScratchUse(false));
270 if (resource) { 274 if (resource) {
271 this->refAndMakeResourceMRU(resource); 275 this->refAndMakeResourceMRU(resource);
272 this->validate(); 276 this->validate();
273 } 277 }
274 return resource; 278 return resource;
275 } 279 }
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 return true; 724 return true;
721 } 725 }
722 if (index < fNonpurgeableResources.count() && fNonpurgeableResources[index] == resource) { 726 if (index < fNonpurgeableResources.count() && fNonpurgeableResources[index] == resource) {
723 return true; 727 return true;
724 } 728 }
725 SkDEBUGFAIL("Resource index should be -1 or the resource should be in the ca che."); 729 SkDEBUGFAIL("Resource index should be -1 or the resource should be in the ca che.");
726 return false; 730 return false;
727 } 731 }
728 732
729 #endif 733 #endif
OLDNEW
« src/gpu/GrCaps.cpp ('K') | « src/gpu/GrResourceCache.h ('k') | src/gpu/gl/GrGLCaps.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698