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

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

Issue 104893002: Remove problematic GrContext thread local instance counting (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « include/gpu/GrContext.h ('k') | no next file » | 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"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext) { 81 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext) {
82 GrContext* context = SkNEW(GrContext); 82 GrContext* context = SkNEW(GrContext);
83 if (context->init(backend, backendContext)) { 83 if (context->init(backend, backendContext)) {
84 return context; 84 return context;
85 } else { 85 } else {
86 context->unref(); 86 context->unref();
87 return NULL; 87 return NULL;
88 } 88 }
89 } 89 }
90 90
91 namespace {
92 void* CreateThreadInstanceCount() {
93 return SkNEW_ARGS(int, (0));
94 }
95 void DeleteThreadInstanceCount(void* v) {
96 delete reinterpret_cast<int*>(v);
97 }
98 #define THREAD_INSTANCE_COUNT \
99 (*reinterpret_cast<int*>(SkTLS::Get(CreateThreadInstanceCount, DeleteThreadI nstanceCount)))
100 }
101
102 GrContext::GrContext() { 91 GrContext::GrContext() {
103 ++THREAD_INSTANCE_COUNT;
104 fDrawState = NULL; 92 fDrawState = NULL;
105 fGpu = NULL; 93 fGpu = NULL;
106 fClip = NULL; 94 fClip = NULL;
107 fPathRendererChain = NULL; 95 fPathRendererChain = NULL;
108 fSoftwarePathRenderer = NULL; 96 fSoftwarePathRenderer = NULL;
109 fTextureCache = NULL; 97 fTextureCache = NULL;
110 fFontCache = NULL; 98 fFontCache = NULL;
111 fDrawBuffer = NULL; 99 fDrawBuffer = NULL;
112 fDrawBufferVBAllocPool = NULL; 100 fDrawBufferVBAllocPool = NULL;
113 fDrawBufferIBAllocPool = NULL; 101 fDrawBufferIBAllocPool = NULL;
(...skipping 27 matching lines...) Expand all
141 fAARectRenderer = SkNEW(GrAARectRenderer); 129 fAARectRenderer = SkNEW(GrAARectRenderer);
142 fOvalRenderer = SkNEW(GrOvalRenderer); 130 fOvalRenderer = SkNEW(GrOvalRenderer);
143 131
144 fDidTestPMConversions = false; 132 fDidTestPMConversions = false;
145 133
146 this->setupDrawBuffer(); 134 this->setupDrawBuffer();
147 135
148 return true; 136 return true;
149 } 137 }
150 138
151 int GrContext::GetThreadInstanceCount() {
152 return THREAD_INSTANCE_COUNT;
153 }
154
155 GrContext::~GrContext() { 139 GrContext::~GrContext() {
156 if (NULL == fGpu) { 140 if (NULL == fGpu) {
157 return; 141 return;
158 } 142 }
159 143
160 this->flush(); 144 this->flush();
161 145
162 for (int i = 0; i < fCleanUpData.count(); ++i) { 146 for (int i = 0; i < fCleanUpData.count(); ++i) {
163 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo); 147 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo);
164 } 148 }
165 149
166 // Since the gpu can hold scratch textures, give it a chance to let go 150 // Since the gpu can hold scratch textures, give it a chance to let go
167 // of them before freeing the texture cache 151 // of them before freeing the texture cache
168 fGpu->purgeResources(); 152 fGpu->purgeResources();
169 153
170 delete fTextureCache; 154 delete fTextureCache;
171 fTextureCache = NULL; 155 fTextureCache = NULL;
172 delete fFontCache; 156 delete fFontCache;
173 delete fDrawBuffer; 157 delete fDrawBuffer;
174 delete fDrawBufferVBAllocPool; 158 delete fDrawBufferVBAllocPool;
175 delete fDrawBufferIBAllocPool; 159 delete fDrawBufferIBAllocPool;
176 160
177 fAARectRenderer->unref(); 161 fAARectRenderer->unref();
178 fOvalRenderer->unref(); 162 fOvalRenderer->unref();
179 163
180 fGpu->unref(); 164 fGpu->unref();
181 SkSafeUnref(fPathRendererChain); 165 SkSafeUnref(fPathRendererChain);
182 SkSafeUnref(fSoftwarePathRenderer); 166 SkSafeUnref(fSoftwarePathRenderer);
183 fDrawState->unref(); 167 fDrawState->unref();
184
185 --THREAD_INSTANCE_COUNT;
186 } 168 }
187 169
188 void GrContext::contextLost() { 170 void GrContext::contextLost() {
189 this->contextDestroyed(); 171 this->contextDestroyed();
190 this->setupDrawBuffer(); 172 this->setupDrawBuffer();
191 } 173 }
192 174
193 void GrContext::contextDestroyed() { 175 void GrContext::contextDestroyed() {
194 // abandon first to so destructors 176 // abandon first to so destructors
195 // don't try to free the resources in the API. 177 // don't try to free the resources in the API.
(...skipping 1614 matching lines...) Expand 10 before | Expand all | Expand 10 after
1810 } 1792 }
1811 return path; 1793 return path;
1812 } 1794 }
1813 1795
1814 /////////////////////////////////////////////////////////////////////////////// 1796 ///////////////////////////////////////////////////////////////////////////////
1815 #if GR_CACHE_STATS 1797 #if GR_CACHE_STATS
1816 void GrContext::printCacheStats() const { 1798 void GrContext::printCacheStats() const {
1817 fTextureCache->printStats(); 1799 fTextureCache->printStats();
1818 } 1800 }
1819 #endif 1801 #endif
OLDNEW
« no previous file with comments | « include/gpu/GrContext.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698