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

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

Issue 477323006: Revert of Add GrResourceCache2. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 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
« no previous file with comments | « src/gpu/GrClipMaskManager.cpp ('k') | src/gpu/GrGpu.h » ('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 9
10 #include "GrContext.h" 10 #include "GrContext.h"
11 11
12 #include "effects/GrConfigConversionEffect.h" 12 #include "effects/GrConfigConversionEffect.h"
13 #include "effects/GrDashingEffect.h" 13 #include "effects/GrDashingEffect.h"
14 #include "effects/GrSingleTextureEffect.h" 14 #include "effects/GrSingleTextureEffect.h"
15 15
16 #include "GrAARectRenderer.h" 16 #include "GrAARectRenderer.h"
17 #include "GrBufferAllocPool.h" 17 #include "GrBufferAllocPool.h"
18 #include "GrGpu.h" 18 #include "GrGpu.h"
19 #include "GrDistanceFieldTextContext.h" 19 #include "GrDistanceFieldTextContext.h"
20 #include "GrDrawTargetCaps.h" 20 #include "GrDrawTargetCaps.h"
21 #include "GrIndexBuffer.h" 21 #include "GrIndexBuffer.h"
22 #include "GrInOrderDrawBuffer.h" 22 #include "GrInOrderDrawBuffer.h"
23 #include "GrLayerCache.h" 23 #include "GrLayerCache.h"
24 #include "GrOvalRenderer.h" 24 #include "GrOvalRenderer.h"
25 #include "GrPathRenderer.h" 25 #include "GrPathRenderer.h"
26 #include "GrPathUtils.h" 26 #include "GrPathUtils.h"
27 #include "GrResourceCache.h" 27 #include "GrResourceCache.h"
28 #include "GrResourceCache2.h"
29 #include "GrSoftwarePathRenderer.h" 28 #include "GrSoftwarePathRenderer.h"
30 #include "GrStencilBuffer.h" 29 #include "GrStencilBuffer.h"
31 #include "GrStencilAndCoverTextContext.h" 30 #include "GrStencilAndCoverTextContext.h"
32 #include "GrStrokeInfo.h" 31 #include "GrStrokeInfo.h"
33 #include "GrTextStrike.h" 32 #include "GrTextStrike.h"
34 #include "GrTraceMarker.h" 33 #include "GrTraceMarker.h"
35 #include "GrTracing.h" 34 #include "GrTracing.h"
36 #include "SkDashPathPriv.h" 35 #include "SkDashPathPriv.h"
37 #include "SkGr.h" 36 #include "SkGr.h"
38 #include "SkRTConf.h" 37 #include "SkRTConf.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 } 101 }
103 } 102 }
104 103
105 GrContext::GrContext(const Options& opts) : fOptions(opts) { 104 GrContext::GrContext(const Options& opts) : fOptions(opts) {
106 fDrawState = NULL; 105 fDrawState = NULL;
107 fGpu = NULL; 106 fGpu = NULL;
108 fClip = NULL; 107 fClip = NULL;
109 fPathRendererChain = NULL; 108 fPathRendererChain = NULL;
110 fSoftwarePathRenderer = NULL; 109 fSoftwarePathRenderer = NULL;
111 fResourceCache = NULL; 110 fResourceCache = NULL;
112 fResourceCache2 = NULL;
113 fFontCache = NULL; 111 fFontCache = NULL;
114 fDrawBuffer = NULL; 112 fDrawBuffer = NULL;
115 fDrawBufferVBAllocPool = NULL; 113 fDrawBufferVBAllocPool = NULL;
116 fDrawBufferIBAllocPool = NULL; 114 fDrawBufferIBAllocPool = NULL;
117 fFlushToReduceCacheSize = false; 115 fFlushToReduceCacheSize = false;
118 fAARectRenderer = NULL; 116 fAARectRenderer = NULL;
119 fOvalRenderer = NULL; 117 fOvalRenderer = NULL;
120 fViewMatrix.reset(); 118 fViewMatrix.reset();
121 fMaxTextureSizeOverride = 1 << 20; 119 fMaxTextureSizeOverride = 1 << 20;
122 } 120 }
123 121
124 bool GrContext::init(GrBackend backend, GrBackendContext backendContext) { 122 bool GrContext::init(GrBackend backend, GrBackendContext backendContext) {
125 SkASSERT(NULL == fGpu); 123 SkASSERT(NULL == fGpu);
126 124
127 fGpu = GrGpu::Create(backend, backendContext, this); 125 fGpu = GrGpu::Create(backend, backendContext, this);
128 if (NULL == fGpu) { 126 if (NULL == fGpu) {
129 return false; 127 return false;
130 } 128 }
131 129
132 fDrawState = SkNEW(GrDrawState); 130 fDrawState = SkNEW(GrDrawState);
133 fGpu->setDrawState(fDrawState); 131 fGpu->setDrawState(fDrawState);
134 132
135 fResourceCache = SkNEW_ARGS(GrResourceCache, (MAX_RESOURCE_CACHE_COUNT, 133 fResourceCache = SkNEW_ARGS(GrResourceCache, (MAX_RESOURCE_CACHE_COUNT,
136 MAX_RESOURCE_CACHE_BYTES)); 134 MAX_RESOURCE_CACHE_BYTES));
137 fResourceCache->setOverbudgetCallback(OverbudgetCB, this); 135 fResourceCache->setOverbudgetCallback(OverbudgetCB, this);
138 fResourceCache2 = SkNEW(GrResourceCache2);
139 136
140 fFontCache = SkNEW_ARGS(GrFontCache, (fGpu)); 137 fFontCache = SkNEW_ARGS(GrFontCache, (fGpu));
141 138
142 fLayerCache.reset(SkNEW_ARGS(GrLayerCache, (this))); 139 fLayerCache.reset(SkNEW_ARGS(GrLayerCache, (this)));
143 140
144 fLastDrawWasBuffered = kNo_BufferedDraw; 141 fLastDrawWasBuffered = kNo_BufferedDraw;
145 142
146 fAARectRenderer = SkNEW(GrAARectRenderer); 143 fAARectRenderer = SkNEW(GrAARectRenderer);
147 fOvalRenderer = SkNEW(GrOvalRenderer); 144 fOvalRenderer = SkNEW(GrOvalRenderer);
148 145
149 fDidTestPMConversions = false; 146 fDidTestPMConversions = false;
150 147
151 this->setupDrawBuffer(); 148 this->setupDrawBuffer();
152 149
153 return true; 150 return true;
154 } 151 }
155 152
156 GrContext::~GrContext() { 153 GrContext::~GrContext() {
157 if (NULL == fGpu) { 154 if (NULL == fGpu) {
158 return; 155 return;
159 } 156 }
160 157
161 this->flush(); 158 this->flush();
162 159
163 for (int i = 0; i < fCleanUpData.count(); ++i) { 160 for (int i = 0; i < fCleanUpData.count(); ++i) {
164 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo); 161 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo);
165 } 162 }
166 163
167 delete fResourceCache2; 164 // Since the gpu can hold scratch textures, give it a chance to let go
168 fResourceCache2 = NULL; 165 // of them before freeing the texture cache
166 fGpu->purgeResources();
167
169 delete fResourceCache; 168 delete fResourceCache;
170 fResourceCache = NULL; 169 fResourceCache = NULL;
171 delete fFontCache; 170 delete fFontCache;
172 delete fDrawBuffer; 171 delete fDrawBuffer;
173 delete fDrawBufferVBAllocPool; 172 delete fDrawBufferVBAllocPool;
174 delete fDrawBufferIBAllocPool; 173 delete fDrawBufferIBAllocPool;
175 174
176 fAARectRenderer->unref(); 175 fAARectRenderer->unref();
177 fOvalRenderer->unref(); 176 fOvalRenderer->unref();
178 177
179 fGpu->unref(); 178 fGpu->unref();
180 SkSafeUnref(fPathRendererChain); 179 SkSafeUnref(fPathRendererChain);
181 SkSafeUnref(fSoftwarePathRenderer); 180 SkSafeUnref(fSoftwarePathRenderer);
182 fDrawState->unref(); 181 fDrawState->unref();
183 } 182 }
184 183
185 void GrContext::abandonContext() { 184 void GrContext::abandonContext() {
186 // abandon first to so destructors 185 // abandon first to so destructors
187 // don't try to free the resources in the API. 186 // don't try to free the resources in the API.
188 fResourceCache2->abandonAll(); 187 fGpu->abandonResources();
189
190 fGpu->contextAbandonded();
191 188
192 // a path renderer may be holding onto resources that 189 // a path renderer may be holding onto resources that
193 // are now unusable 190 // are now unusable
194 SkSafeSetNull(fPathRendererChain); 191 SkSafeSetNull(fPathRendererChain);
195 SkSafeSetNull(fSoftwarePathRenderer); 192 SkSafeSetNull(fSoftwarePathRenderer);
196 193
197 delete fDrawBuffer; 194 delete fDrawBuffer;
198 fDrawBuffer = NULL; 195 fDrawBuffer = NULL;
199 196
200 delete fDrawBufferVBAllocPool; 197 delete fDrawBufferVBAllocPool;
201 fDrawBufferVBAllocPool = NULL; 198 fDrawBufferVBAllocPool = NULL;
202 199
203 delete fDrawBufferIBAllocPool; 200 delete fDrawBufferIBAllocPool;
204 fDrawBufferIBAllocPool = NULL; 201 fDrawBufferIBAllocPool = NULL;
205 202
206 fAARectRenderer->reset(); 203 fAARectRenderer->reset();
207 fOvalRenderer->reset(); 204 fOvalRenderer->reset();
208 205
209 fResourceCache->purgeAllUnlocked(); 206 fResourceCache->purgeAllUnlocked();
210 207
211 fFontCache->freeAll(); 208 fFontCache->freeAll();
212 fLayerCache->freeAll(); 209 fLayerCache->freeAll();
210 fGpu->markContextDirty();
213 } 211 }
214 212
215 void GrContext::resetContext(uint32_t state) { 213 void GrContext::resetContext(uint32_t state) {
216 fGpu->markContextDirty(state); 214 fGpu->markContextDirty(state);
217 } 215 }
218 216
219 void GrContext::freeGpuResources() { 217 void GrContext::freeGpuResources() {
220 this->flush(); 218 this->flush();
221 219
222 fGpu->purgeResources(); 220 fGpu->purgeResources();
223 if (NULL != fDrawBuffer) {
224 fDrawBuffer->purgeResources();
225 }
226 221
227 fAARectRenderer->reset(); 222 fAARectRenderer->reset();
228 fOvalRenderer->reset(); 223 fOvalRenderer->reset();
229 224
230 fResourceCache->purgeAllUnlocked(); 225 fResourceCache->purgeAllUnlocked();
231 fFontCache->freeAll(); 226 fFontCache->freeAll();
232 fLayerCache->freeAll(); 227 fLayerCache->freeAll();
233 // a path renderer may be holding onto resources 228 // a path renderer may be holding onto resources
234 SkSafeSetNull(fPathRendererChain); 229 SkSafeSetNull(fPathRendererChain);
235 SkSafeSetNull(fSoftwarePathRenderer); 230 SkSafeSetNull(fSoftwarePathRenderer);
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 this->purgeCache(); 533 this->purgeCache();
539 } else { 534 } else {
540 // When we aren't reusing textures we know this scratch texture 535 // When we aren't reusing textures we know this scratch texture
541 // will never be reused and would be just wasting time in the cache 536 // will never be reused and would be just wasting time in the cache
542 fResourceCache->makeNonExclusive(texture->getCacheEntry()); 537 fResourceCache->makeNonExclusive(texture->getCacheEntry());
543 fResourceCache->deleteResource(texture->getCacheEntry()); 538 fResourceCache->deleteResource(texture->getCacheEntry());
544 } 539 }
545 } 540 }
546 541
547 void GrContext::unlockScratchTexture(GrTexture* texture) { 542 void GrContext::unlockScratchTexture(GrTexture* texture) {
548 if (texture->wasDestroyed()) {
549 return;
550 }
551
552 ASSERT_OWNED_RESOURCE(texture); 543 ASSERT_OWNED_RESOURCE(texture);
553 SkASSERT(NULL != texture->getCacheEntry()); 544 SkASSERT(NULL != texture->getCacheEntry());
554 545
555 // If this is a scratch texture we detached it from the cache 546 // If this is a scratch texture we detached it from the cache
556 // while it was locked (to avoid two callers simultaneously getting 547 // while it was locked (to avoid two callers simultaneously getting
557 // the same texture). 548 // the same texture).
558 if (texture->getCacheEntry()->key().isScratch()) { 549 if (texture->getCacheEntry()->key().isScratch()) {
559 if (fGpu->caps()->reuseScratchTextures() || NULL != texture->asRenderTar get()) { 550 if (fGpu->caps()->reuseScratchTextures() || NULL != texture->asRenderTar get()) {
560 fResourceCache->makeNonExclusive(texture->getCacheEntry()); 551 fResourceCache->makeNonExclusive(texture->getCacheEntry());
561 this->purgeCache(); 552 this->purgeCache();
(...skipping 1378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1940 fDrawBuffer->removeGpuTraceMarker(marker); 1931 fDrawBuffer->removeGpuTraceMarker(marker);
1941 } 1932 }
1942 } 1933 }
1943 1934
1944 /////////////////////////////////////////////////////////////////////////////// 1935 ///////////////////////////////////////////////////////////////////////////////
1945 #if GR_CACHE_STATS 1936 #if GR_CACHE_STATS
1946 void GrContext::printCacheStats() const { 1937 void GrContext::printCacheStats() const {
1947 fResourceCache->printStats(); 1938 fResourceCache->printStats();
1948 } 1939 }
1949 #endif 1940 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrClipMaskManager.cpp ('k') | src/gpu/GrGpu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698