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

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

Issue 726913002: Revert of Replace GrResourceCache with GrResourceCache2. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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/GrAADistanceFieldPathRenderer.h ('k') | src/gpu/GrGpuResource.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 2011 Google Inc. 3 * Copyright 2011 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 #include "GrContext.h" 9 #include "GrContext.h"
10 10
11 #include "effects/GrConfigConversionEffect.h" 11 #include "effects/GrConfigConversionEffect.h"
12 #include "effects/GrDashingEffect.h" 12 #include "effects/GrDashingEffect.h"
13 #include "effects/GrSingleTextureEffect.h" 13 #include "effects/GrSingleTextureEffect.h"
14 14
15 #include "GrAARectRenderer.h" 15 #include "GrAARectRenderer.h"
16 #include "GrBufferAllocPool.h" 16 #include "GrBufferAllocPool.h"
17 #include "GrGpu.h" 17 #include "GrGpu.h"
18 #include "GrGpuResource.h" 18 #include "GrGpuResource.h"
19 #include "GrGpuResourceCacheAccess.h" 19 #include "GrGpuResourceCacheAccess.h"
20 #include "GrDistanceFieldTextContext.h" 20 #include "GrDistanceFieldTextContext.h"
21 #include "GrDrawTargetCaps.h" 21 #include "GrDrawTargetCaps.h"
22 #include "GrIndexBuffer.h" 22 #include "GrIndexBuffer.h"
23 #include "GrInOrderDrawBuffer.h" 23 #include "GrInOrderDrawBuffer.h"
24 #include "GrLayerCache.h" 24 #include "GrLayerCache.h"
25 #include "GrOvalRenderer.h" 25 #include "GrOvalRenderer.h"
26 #include "GrPathRenderer.h" 26 #include "GrPathRenderer.h"
27 #include "GrPathUtils.h" 27 #include "GrPathUtils.h"
28 #include "GrResourceCache.h"
28 #include "GrResourceCache2.h" 29 #include "GrResourceCache2.h"
29 #include "GrSoftwarePathRenderer.h" 30 #include "GrSoftwarePathRenderer.h"
30 #include "GrStencilBuffer.h" 31 #include "GrStencilBuffer.h"
31 #include "GrStencilAndCoverTextContext.h" 32 #include "GrStencilAndCoverTextContext.h"
32 #include "GrStrokeInfo.h" 33 #include "GrStrokeInfo.h"
33 #include "GrSurfacePriv.h" 34 #include "GrSurfacePriv.h"
34 #include "GrTextStrike.h" 35 #include "GrTextStrike.h"
35 #include "GrTexturePriv.h" 36 #include "GrTexturePriv.h"
36 #include "GrTraceMarker.h" 37 #include "GrTraceMarker.h"
37 #include "GrTracing.h" 38 #include "GrTracing.h"
38 #include "SkDashPathPriv.h" 39 #include "SkDashPathPriv.h"
39 #include "SkConfig8888.h" 40 #include "SkConfig8888.h"
40 #include "SkGr.h" 41 #include "SkGr.h"
41 #include "SkRRect.h" 42 #include "SkRRect.h"
42 #include "SkStrokeRec.h" 43 #include "SkStrokeRec.h"
43 #include "SkTLazy.h" 44 #include "SkTLazy.h"
44 #include "SkTLS.h" 45 #include "SkTLS.h"
45 #include "SkTraceEvent.h" 46 #include "SkTraceEvent.h"
46 47
47 #ifdef SK_DEBUG 48 #ifdef SK_DEBUG
48 // change this to a 1 to see notifications when partial coverage fails 49 // change this to a 1 to see notifications when partial coverage fails
49 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0 50 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0
50 #else 51 #else
51 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0 52 #define GR_DEBUG_PARTIAL_COVERAGE_CHECK 0
52 #endif 53 #endif
53 54
55 static const size_t MAX_RESOURCE_CACHE_COUNT = GR_DEFAULT_RESOURCE_CACHE_COUNT_L IMIT;
56 static const size_t MAX_RESOURCE_CACHE_BYTES = GR_DEFAULT_RESOURCE_CACHE_MB_LIMI T * 1024 * 1024;
57
54 static const size_t DRAW_BUFFER_VBPOOL_BUFFER_SIZE = 1 << 15; 58 static const size_t DRAW_BUFFER_VBPOOL_BUFFER_SIZE = 1 << 15;
55 static const int DRAW_BUFFER_VBPOOL_PREALLOC_BUFFERS = 4; 59 static const int DRAW_BUFFER_VBPOOL_PREALLOC_BUFFERS = 4;
56 60
57 static const size_t DRAW_BUFFER_IBPOOL_BUFFER_SIZE = 1 << 11; 61 static const size_t DRAW_BUFFER_IBPOOL_BUFFER_SIZE = 1 << 11;
58 static const int DRAW_BUFFER_IBPOOL_PREALLOC_BUFFERS = 4; 62 static const int DRAW_BUFFER_IBPOOL_PREALLOC_BUFFERS = 4;
59 63
60 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this) 64 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this)
61 65
62 // Glorified typedef to avoid including GrDrawState.h in GrContext.h 66 // Glorified typedef to avoid including GrDrawState.h in GrContext.h
63 class GrContext::AutoRestoreEffects : public GrDrawState::AutoRestoreEffects {}; 67 class GrContext::AutoRestoreEffects : public GrDrawState::AutoRestoreEffects {};
(...skipping 28 matching lines...) Expand all
92 return NULL; 96 return NULL;
93 } 97 }
94 } 98 }
95 99
96 GrContext::GrContext(const Options& opts) : fOptions(opts) { 100 GrContext::GrContext(const Options& opts) : fOptions(opts) {
97 fDrawState = NULL; 101 fDrawState = NULL;
98 fGpu = NULL; 102 fGpu = NULL;
99 fClip = NULL; 103 fClip = NULL;
100 fPathRendererChain = NULL; 104 fPathRendererChain = NULL;
101 fSoftwarePathRenderer = NULL; 105 fSoftwarePathRenderer = NULL;
106 fResourceCache = NULL;
102 fResourceCache2 = NULL; 107 fResourceCache2 = NULL;
103 fFontCache = NULL; 108 fFontCache = NULL;
104 fDrawBuffer = NULL; 109 fDrawBuffer = NULL;
105 fDrawBufferVBAllocPool = NULL; 110 fDrawBufferVBAllocPool = NULL;
106 fDrawBufferIBAllocPool = NULL; 111 fDrawBufferIBAllocPool = NULL;
107 fFlushToReduceCacheSize = false; 112 fFlushToReduceCacheSize = false;
108 fAARectRenderer = NULL; 113 fAARectRenderer = NULL;
109 fOvalRenderer = NULL; 114 fOvalRenderer = NULL;
110 fViewMatrix.reset(); 115 fViewMatrix.reset();
111 fMaxTextureSizeOverride = 1 << 20; 116 fMaxTextureSizeOverride = 1 << 20;
112 } 117 }
113 118
114 bool GrContext::init(GrBackend backend, GrBackendContext backendContext) { 119 bool GrContext::init(GrBackend backend, GrBackendContext backendContext) {
115 SkASSERT(NULL == fGpu); 120 SkASSERT(NULL == fGpu);
116 121
117 fGpu = GrGpu::Create(backend, backendContext, this); 122 fGpu = GrGpu::Create(backend, backendContext, this);
118 if (NULL == fGpu) { 123 if (NULL == fGpu) {
119 return false; 124 return false;
120 } 125 }
121 this->initCommon(); 126 this->initCommon();
122 return true; 127 return true;
123 } 128 }
124 129
125 void GrContext::initCommon() { 130 void GrContext::initCommon() {
126 fDrawState = SkNEW(GrDrawState); 131 fDrawState = SkNEW(GrDrawState);
127 132
133 fResourceCache = SkNEW_ARGS(GrResourceCache, (fGpu->caps(),
134 MAX_RESOURCE_CACHE_COUNT,
135 MAX_RESOURCE_CACHE_BYTES));
136 fResourceCache->setOverbudgetCallback(OverbudgetCB, this);
128 fResourceCache2 = SkNEW(GrResourceCache2); 137 fResourceCache2 = SkNEW(GrResourceCache2);
129 fResourceCache2->setOverBudgetCallback(OverBudgetCB, this);
130 138
131 fFontCache = SkNEW_ARGS(GrFontCache, (fGpu)); 139 fFontCache = SkNEW_ARGS(GrFontCache, (fGpu));
132 140
133 fLayerCache.reset(SkNEW_ARGS(GrLayerCache, (this))); 141 fLayerCache.reset(SkNEW_ARGS(GrLayerCache, (this)));
134 142
135 fAARectRenderer = SkNEW_ARGS(GrAARectRenderer, (fGpu)); 143 fAARectRenderer = SkNEW_ARGS(GrAARectRenderer, (fGpu));
136 fOvalRenderer = SkNEW(GrOvalRenderer); 144 fOvalRenderer = SkNEW(GrOvalRenderer);
137 145
138 fDidTestPMConversions = false; 146 fDidTestPMConversions = false;
139 147
140 this->setupDrawBuffer(); 148 this->setupDrawBuffer();
141 } 149 }
142 150
143 GrContext::~GrContext() { 151 GrContext::~GrContext() {
144 if (NULL == fGpu) { 152 if (NULL == fGpu) {
145 return; 153 return;
146 } 154 }
147 155
148 this->flush(); 156 this->flush();
149 157
150 for (int i = 0; i < fCleanUpData.count(); ++i) { 158 for (int i = 0; i < fCleanUpData.count(); ++i) {
151 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo); 159 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo);
152 } 160 }
153 161
154 SkDELETE(fResourceCache2); 162 SkDELETE(fResourceCache2);
163 fResourceCache2 = NULL;
164 SkDELETE(fResourceCache);
165 fResourceCache = NULL;
155 SkDELETE(fFontCache); 166 SkDELETE(fFontCache);
156 SkDELETE(fDrawBuffer); 167 SkDELETE(fDrawBuffer);
157 SkDELETE(fDrawBufferVBAllocPool); 168 SkDELETE(fDrawBufferVBAllocPool);
158 SkDELETE(fDrawBufferIBAllocPool); 169 SkDELETE(fDrawBufferIBAllocPool);
159 170
160 fAARectRenderer->unref(); 171 fAARectRenderer->unref();
161 fOvalRenderer->unref(); 172 fOvalRenderer->unref();
162 173
163 fGpu->unref(); 174 fGpu->unref();
164 SkSafeUnref(fPathRendererChain); 175 SkSafeUnref(fPathRendererChain);
(...skipping 18 matching lines...) Expand all
183 194
184 delete fDrawBufferVBAllocPool; 195 delete fDrawBufferVBAllocPool;
185 fDrawBufferVBAllocPool = NULL; 196 fDrawBufferVBAllocPool = NULL;
186 197
187 delete fDrawBufferIBAllocPool; 198 delete fDrawBufferIBAllocPool;
188 fDrawBufferIBAllocPool = NULL; 199 fDrawBufferIBAllocPool = NULL;
189 200
190 fAARectRenderer->reset(); 201 fAARectRenderer->reset();
191 fOvalRenderer->reset(); 202 fOvalRenderer->reset();
192 203
204 fResourceCache->purgeAllUnlocked();
205
193 fFontCache->freeAll(); 206 fFontCache->freeAll();
194 fLayerCache->freeAll(); 207 fLayerCache->freeAll();
195 } 208 }
196 209
197 void GrContext::resetContext(uint32_t state) { 210 void GrContext::resetContext(uint32_t state) {
198 fGpu->markContextDirty(state); 211 fGpu->markContextDirty(state);
199 } 212 }
200 213
201 void GrContext::freeGpuResources() { 214 void GrContext::freeGpuResources() {
202 this->flush(); 215 this->flush();
203 216
204 if (fDrawBuffer) { 217 if (fDrawBuffer) {
205 fDrawBuffer->purgeResources(); 218 fDrawBuffer->purgeResources();
206 } 219 }
207 220
208 fAARectRenderer->reset(); 221 fAARectRenderer->reset();
209 fOvalRenderer->reset(); 222 fOvalRenderer->reset();
210 223
224 fResourceCache->purgeAllUnlocked();
211 fFontCache->freeAll(); 225 fFontCache->freeAll();
212 fLayerCache->freeAll(); 226 fLayerCache->freeAll();
213 // a path renderer may be holding onto resources 227 // a path renderer may be holding onto resources
214 SkSafeSetNull(fPathRendererChain); 228 SkSafeSetNull(fPathRendererChain);
215 SkSafeSetNull(fSoftwarePathRenderer); 229 SkSafeSetNull(fSoftwarePathRenderer);
216 } 230 }
217 231
218 void GrContext::getResourceCacheUsage(int* resourceCount, size_t* resourceBytes) const { 232 void GrContext::getResourceCacheUsage(int* resourceCount, size_t* resourceBytes) const {
219 if (resourceCount) { 233 if (resourceCount) {
220 *resourceCount = fResourceCache2->getResourceCount(); 234 *resourceCount = fResourceCache->getCachedResourceCount();
221 } 235 }
222 if (resourceBytes) { 236 if (resourceBytes) {
223 *resourceBytes = fResourceCache2->getResourceBytes(); 237 *resourceBytes = fResourceCache->getCachedResourceBytes();
224 } 238 }
225 } 239 }
226 240
227 GrTextContext* GrContext::createTextContext(GrRenderTarget* renderTarget, 241 GrTextContext* GrContext::createTextContext(GrRenderTarget* renderTarget,
228 const SkDeviceProperties& 242 const SkDeviceProperties&
229 leakyProperties, 243 leakyProperties,
230 bool enableDistanceFieldFonts) { 244 bool enableDistanceFieldFonts) {
231 if (fGpu->caps()->pathRenderingSupport() && renderTarget->getStencilBuffer() && 245 if (fGpu->caps()->pathRenderingSupport() && renderTarget->getStencilBuffer() &&
232 renderTarget->isMultisampled()) { 246 renderTarget->isMultisampled()) {
233 return GrStencilAndCoverTextContext::Create(this, leakyProperties); 247 return GrStencilAndCoverTextContext::Create(this, leakyProperties);
234 } 248 }
(...skipping 17 matching lines...) Expand all
252 } 266 }
253 267
254 bool GrContext::isTextureInCache(const GrSurfaceDesc& desc, 268 bool GrContext::isTextureInCache(const GrSurfaceDesc& desc,
255 const GrCacheID& cacheID, 269 const GrCacheID& cacheID,
256 const GrTextureParams* params) const { 270 const GrTextureParams* params) const {
257 GrResourceKey resourceKey = GrTexturePriv::ComputeKey(fGpu, params, desc, ca cheID); 271 GrResourceKey resourceKey = GrTexturePriv::ComputeKey(fGpu, params, desc, ca cheID);
258 return fResourceCache2->hasContentKey(resourceKey); 272 return fResourceCache2->hasContentKey(resourceKey);
259 } 273 }
260 274
261 void GrContext::addStencilBuffer(GrStencilBuffer* sb) { 275 void GrContext::addStencilBuffer(GrStencilBuffer* sb) {
262 // TODO: Make GrStencilBuffers use the scratch mechanism rather than content keys.
263 ASSERT_OWNED_RESOURCE(sb); 276 ASSERT_OWNED_RESOURCE(sb);
264 277
265 GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(sb->width(), 278 GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(sb->width(),
266 sb->height(), 279 sb->height(),
267 sb->numSamples()); 280 sb->numSamples());
268 SkAssertResult(sb->cacheAccess().setContentKey(resourceKey)); 281 fResourceCache->addResource(resourceKey, sb);
269 } 282 }
270 283
271 GrStencilBuffer* GrContext::findAndRefStencilBuffer(int width, int height, int s ampleCnt) { 284 GrStencilBuffer* GrContext::findAndRefStencilBuffer(int width, int height, int s ampleCnt) {
272 GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(width, height, sampl eCnt); 285 GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(width, height, sampl eCnt);
273 GrGpuResource* resource = this->findAndRefCachedResource(resourceKey); 286 GrGpuResource* resource = this->findAndRefCachedResource(resourceKey);
274 return static_cast<GrStencilBuffer*>(resource); 287 return static_cast<GrStencilBuffer*>(resource);
275 } 288 }
276 289
277 static void stretch_image(void* dst, 290 static void stretch_image(void* dst,
278 int dstW, 291 int dstW,
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig)); 413 SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig));
401 414
402 texture = this->createResizedTexture(desc, cacheID, 415 texture = this->createResizedTexture(desc, cacheID,
403 srcData, rowBytes, 416 srcData, rowBytes,
404 GrTexturePriv::NeedsBilerp(resource Key)); 417 GrTexturePriv::NeedsBilerp(resource Key));
405 } else { 418 } else {
406 texture = fGpu->createTexture(desc, srcData, rowBytes); 419 texture = fGpu->createTexture(desc, srcData, rowBytes);
407 } 420 }
408 421
409 if (texture) { 422 if (texture) {
410 if (texture->cacheAccess().setContentKey(resourceKey)) { 423 fResourceCache->addResource(resourceKey, texture);
411 if (cacheKey) { 424
412 *cacheKey = resourceKey; 425 if (cacheKey) {
413 } 426 *cacheKey = resourceKey;
414 } else {
415 texture->unref();
416 texture = NULL;
417 } 427 }
418 } 428 }
419 429
420 return texture; 430 return texture;
421 } 431 }
422 432
433 GrTexture* GrContext::createNewScratchTexture(const GrSurfaceDesc& desc) {
434 GrTexture* texture = fGpu->createTexture(desc, NULL, 0);
435 if (!texture) {
436 return NULL;
437 }
438 fResourceCache->addResource(texture->cacheAccess().getScratchKey(), texture) ;
439 return texture;
440 }
441
423 GrTexture* GrContext::refScratchTexture(const GrSurfaceDesc& inDesc, ScratchTexM atch match, 442 GrTexture* GrContext::refScratchTexture(const GrSurfaceDesc& inDesc, ScratchTexM atch match,
424 bool calledDuringFlush) { 443 bool calledDuringFlush) {
425 // kNoStencil has no meaning if kRT isn't set. 444 // kNoStencil has no meaning if kRT isn't set.
426 SkASSERT((inDesc.fFlags & kRenderTarget_GrSurfaceFlag) || 445 SkASSERT((inDesc.fFlags & kRenderTarget_GrSurfaceFlag) ||
427 !(inDesc.fFlags & kNoStencil_GrSurfaceFlag)); 446 !(inDesc.fFlags & kNoStencil_GrSurfaceFlag));
428 447
429 // Make sure caller has checked for renderability if kRT is set. 448 // Make sure caller has checked for renderability if kRT is set.
430 SkASSERT(!(inDesc.fFlags & kRenderTarget_GrSurfaceFlag) || 449 SkASSERT(!(inDesc.fFlags & kRenderTarget_GrSurfaceFlag) ||
431 this->isConfigRenderable(inDesc.fConfig, inDesc.fSampleCnt > 0)); 450 this->isConfigRenderable(inDesc.fConfig, inDesc.fSampleCnt > 0));
432 451
(...skipping 14 matching lines...) Expand all
447 uint32_t scratchFlags = 0; 466 uint32_t scratchFlags = 0;
448 if (calledDuringFlush) { 467 if (calledDuringFlush) {
449 scratchFlags = GrResourceCache2::kRequireNoPendingIO_ScratchFlag ; 468 scratchFlags = GrResourceCache2::kRequireNoPendingIO_ScratchFlag ;
450 } else if (!(desc->fFlags & kRenderTarget_GrSurfaceFlag)) { 469 } else if (!(desc->fFlags & kRenderTarget_GrSurfaceFlag)) {
451 // If it is not a render target then it will most likely be popu lated by 470 // If it is not a render target then it will most likely be popu lated by
452 // writePixels() which will trigger a flush if the texture has p ending IO. 471 // writePixels() which will trigger a flush if the texture has p ending IO.
453 scratchFlags = GrResourceCache2::kPreferNoPendingIO_ScratchFlag; 472 scratchFlags = GrResourceCache2::kPreferNoPendingIO_ScratchFlag;
454 } 473 }
455 GrGpuResource* resource = fResourceCache2->findAndRefScratchResource (key, scratchFlags); 474 GrGpuResource* resource = fResourceCache2->findAndRefScratchResource (key, scratchFlags);
456 if (resource) { 475 if (resource) {
476 fResourceCache->makeResourceMRU(resource);
457 return static_cast<GrSurface*>(resource)->asTexture(); 477 return static_cast<GrSurface*>(resource)->asTexture();
458 } 478 }
459 479
460 if (kExact_ScratchTexMatch == match) { 480 if (kExact_ScratchTexMatch == match) {
461 break; 481 break;
462 } 482 }
463 // We had a cache miss and we are in approx mode, relax the fit of t he flags. 483 // We had a cache miss and we are in approx mode, relax the fit of t he flags.
464 484
465 // We no longer try to reuse textures that were previously used as r ender targets in 485 // We no longer try to reuse textures that were previously used as r ender targets in
466 // situations where no RT is needed; doing otherwise can confuse the video driver and 486 // situations where no RT is needed; doing otherwise can confuse the video driver and
467 // cause significant performance problems in some cases. 487 // cause significant performance problems in some cases.
468 if (desc->fFlags & kNoStencil_GrSurfaceFlag) { 488 if (desc->fFlags & kNoStencil_GrSurfaceFlag) {
469 desc.writable()->fFlags = desc->fFlags & ~kNoStencil_GrSurfaceFl ag; 489 desc.writable()->fFlags = desc->fFlags & ~kNoStencil_GrSurfaceFl ag;
470 } else { 490 } else {
471 break; 491 break;
472 } 492 }
473 493
474 } while (true); 494 } while (true);
475 495
476 desc.writable()->fFlags = origFlags; 496 desc.writable()->fFlags = origFlags;
477 } 497 }
478 498
479 GrTexture* texture = fGpu->createTexture(*desc, NULL, 0); 499 GrTexture* texture = this->createNewScratchTexture(*desc);
480 SkASSERT(NULL == texture || 500 SkASSERT(NULL == texture ||
481 texture->cacheAccess().getScratchKey() == GrTexturePriv::ComputeScr atchKey(*desc)); 501 texture->cacheAccess().getScratchKey() == GrTexturePriv::ComputeScr atchKey(*desc));
482 return texture; 502 return texture;
483 } 503 }
484 504
485 void GrContext::OverBudgetCB(void* data) { 505 bool GrContext::OverbudgetCB(void* data) {
486 SkASSERT(data); 506 SkASSERT(data);
487 507
488 GrContext* context = reinterpret_cast<GrContext*>(data); 508 GrContext* context = reinterpret_cast<GrContext*>(data);
489 509
490 // Flush the InOrderDrawBuffer to possibly free up some textures 510 // Flush the InOrderDrawBuffer to possibly free up some textures
491 context->fFlushToReduceCacheSize = true; 511 context->fFlushToReduceCacheSize = true;
512
513 return true;
492 } 514 }
493 515
494 516
495 GrTexture* GrContext::createUncachedTexture(const GrSurfaceDesc& descIn, 517 GrTexture* GrContext::createUncachedTexture(const GrSurfaceDesc& descIn,
496 void* srcData, 518 void* srcData,
497 size_t rowBytes) { 519 size_t rowBytes) {
498 GrSurfaceDesc descCopy = descIn; 520 GrSurfaceDesc descCopy = descIn;
499 return fGpu->createTexture(descCopy, srcData, rowBytes); 521 return fGpu->createTexture(descCopy, srcData, rowBytes);
500 } 522 }
501 523
502 void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes ) const { 524 void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes ) const {
503 if (maxTextures) { 525 fResourceCache->getLimits(maxTextures, maxTextureBytes);
504 *maxTextures = fResourceCache2->getMaxResourceCount();
505 }
506 if (maxTextureBytes) {
507 *maxTextureBytes = fResourceCache2->getMaxResourceBytes();
508 }
509 } 526 }
510 527
511 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) { 528 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) {
512 fResourceCache2->setLimits(maxTextures, maxTextureBytes); 529 fResourceCache->setLimits(maxTextures, maxTextureBytes);
513 } 530 }
514 531
515 int GrContext::getMaxTextureSize() const { 532 int GrContext::getMaxTextureSize() const {
516 return SkTMin(fGpu->caps()->maxTextureSize(), fMaxTextureSizeOverride); 533 return SkTMin(fGpu->caps()->maxTextureSize(), fMaxTextureSizeOverride);
517 } 534 }
518 535
519 int GrContext::getMaxRenderTargetSize() const { 536 int GrContext::getMaxRenderTargetSize() const {
520 return fGpu->caps()->maxRenderTargetSize(); 537 return fGpu->caps()->maxRenderTargetSize();
521 } 538 }
522 539
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 void GrContext::flush(int flagsBitfield) { 1235 void GrContext::flush(int flagsBitfield) {
1219 if (NULL == fDrawBuffer) { 1236 if (NULL == fDrawBuffer) {
1220 return; 1237 return;
1221 } 1238 }
1222 1239
1223 if (kDiscard_FlushBit & flagsBitfield) { 1240 if (kDiscard_FlushBit & flagsBitfield) {
1224 fDrawBuffer->reset(); 1241 fDrawBuffer->reset();
1225 } else { 1242 } else {
1226 fDrawBuffer->flush(); 1243 fDrawBuffer->flush();
1227 } 1244 }
1245 fResourceCache->purgeAsNeeded();
1228 fFlushToReduceCacheSize = false; 1246 fFlushToReduceCacheSize = false;
1229 } 1247 }
1230 1248
1231 bool sw_convert_to_premul(GrPixelConfig srcConfig, int width, int height, size_t inRowBytes, 1249 bool sw_convert_to_premul(GrPixelConfig srcConfig, int width, int height, size_t inRowBytes,
1232 const void* inPixels, size_t outRowBytes, void* outPix els) { 1250 const void* inPixels, size_t outRowBytes, void* outPix els) {
1233 SkSrcPixelInfo srcPI; 1251 SkSrcPixelInfo srcPI;
1234 if (!GrPixelConfig2ColorType(srcConfig, &srcPI.fColorType)) { 1252 if (!GrPixelConfig2ColorType(srcConfig, &srcPI.fColorType)) {
1235 return false; 1253 return false;
1236 } 1254 }
1237 srcPI.fAlphaType = kUnpremul_SkAlphaType; 1255 srcPI.fAlphaType = kUnpremul_SkAlphaType;
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 GrConfigConversionEffect::PMConversion upmToPM = 1739 GrConfigConversionEffect::PMConversion upmToPM =
1722 static_cast<GrConfigConversionEffect::PMConversion>(fUPMToPMConversion); 1740 static_cast<GrConfigConversionEffect::PMConversion>(fUPMToPMConversion);
1723 if (GrConfigConversionEffect::kNone_PMConversion != upmToPM) { 1741 if (GrConfigConversionEffect::kNone_PMConversion != upmToPM) {
1724 return GrConfigConversionEffect::Create(texture, swapRAndB, upmToPM, mat rix); 1742 return GrConfigConversionEffect::Create(texture, swapRAndB, upmToPM, mat rix);
1725 } else { 1743 } else {
1726 return NULL; 1744 return NULL;
1727 } 1745 }
1728 } 1746 }
1729 1747
1730 void GrContext::addResourceToCache(const GrResourceKey& resourceKey, GrGpuResour ce* resource) { 1748 void GrContext::addResourceToCache(const GrResourceKey& resourceKey, GrGpuResour ce* resource) {
1731 resource->cacheAccess().setContentKey(resourceKey); 1749 fResourceCache->addResource(resourceKey, resource);
1732 } 1750 }
1733 1751
1734 GrGpuResource* GrContext::findAndRefCachedResource(const GrResourceKey& resource Key) { 1752 GrGpuResource* GrContext::findAndRefCachedResource(const GrResourceKey& resource Key) {
1735 return fResourceCache2->findAndRefContentResource(resourceKey); 1753 GrGpuResource* resource = fResourceCache2->findAndRefContentResource(resourc eKey);
1754 if (resource) {
1755 fResourceCache->makeResourceMRU(resource);
1756 }
1757 return resource;
1736 } 1758 }
1737 1759
1738 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) { 1760 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) {
1739 fGpu->addGpuTraceMarker(marker); 1761 fGpu->addGpuTraceMarker(marker);
1740 if (fDrawBuffer) { 1762 if (fDrawBuffer) {
1741 fDrawBuffer->addGpuTraceMarker(marker); 1763 fDrawBuffer->addGpuTraceMarker(marker);
1742 } 1764 }
1743 } 1765 }
1744 1766
1745 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { 1767 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) {
1746 fGpu->removeGpuTraceMarker(marker); 1768 fGpu->removeGpuTraceMarker(marker);
1747 if (fDrawBuffer) { 1769 if (fDrawBuffer) {
1748 fDrawBuffer->removeGpuTraceMarker(marker); 1770 fDrawBuffer->removeGpuTraceMarker(marker);
1749 } 1771 }
1750 } 1772 }
1751 1773
1752 /////////////////////////////////////////////////////////////////////////////// 1774 ///////////////////////////////////////////////////////////////////////////////
1753 #if GR_CACHE_STATS 1775 #if GR_CACHE_STATS
1754 void GrContext::printCacheStats() const { 1776 void GrContext::printCacheStats() const {
1755 fResourceCache2->printStats(); 1777 fResourceCache->printStats();
1756 } 1778 }
1757 #endif 1779 #endif
1758 1780
1759 #if GR_GPU_STATS 1781 #if GR_GPU_STATS
1760 const GrContext::GPUStats* GrContext::gpuStats() const { 1782 const GrContext::GPUStats* GrContext::gpuStats() const {
1761 return fGpu->gpuStats(); 1783 return fGpu->gpuStats();
1762 } 1784 }
1763 #endif 1785 #endif
1764 1786
OLDNEW
« no previous file with comments | « src/gpu/GrAADistanceFieldPathRenderer.h ('k') | src/gpu/GrGpuResource.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698