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

Side by Side Diff: src/gpu/vk/GrVkResource.h

Issue 2128273002: Only check resource tracking on program shutdown, not context shutdown (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 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/vk/GrVkBuffer.cpp ('k') | src/gpu/vk/GrVkResourceProvider.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 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrVkResource_DEFINED 8 #ifndef GrVkResource_DEFINED
9 #define GrVkResource_DEFINED 9 #define GrVkResource_DEFINED
10 10
(...skipping 22 matching lines...) Expand all
33 takes a GrVkGpu, and any derived classes must implement freeGPUData() and 33 takes a GrVkGpu, and any derived classes must implement freeGPUData() and
34 possibly abandonSubResources(). 34 possibly abandonSubResources().
35 */ 35 */
36 36
37 class GrVkResource : SkNoncopyable { 37 class GrVkResource : SkNoncopyable {
38 public: 38 public:
39 // Simple refCount tracing, to ensure that everything ref'ed is unref'ed. 39 // Simple refCount tracing, to ensure that everything ref'ed is unref'ed.
40 #ifdef SK_TRACE_VK_RESOURCES 40 #ifdef SK_TRACE_VK_RESOURCES
41 static const uint32_t& GetKey(const GrVkResource& r) { return r.fKey; } 41 static const uint32_t& GetKey(const GrVkResource& r) { return r.fKey; }
42 static uint32_t Hash(const uint32_t& k) { return k; } 42 static uint32_t Hash(const uint32_t& k) { return k; }
43 static SkTDynamicHash<GrVkResource, uint32_t> fTrace; 43
44 class Trace {
45 public:
46 ~Trace() {
47 if (fHash.count()) {
48 SkTDynamicHash<GrVkResource, uint32_t>::Iter iter(&fHash);
49 for (; !iter.done(); ++iter) {
50 (*iter).dumpInfo();
51 }
52 }
53 SkASSERT(0 == fHash.count());
54 }
55 void add(GrVkResource* r) { fHash.add(r); }
56 void remove(const GrVkResource* r) { fHash.remove(GetKey(*r)); }
57
58 private:
59 SkTDynamicHash<GrVkResource, uint32_t> fHash;
60 };
61 static Trace fTrace;
62
44 static SkRandom fRandom; 63 static SkRandom fRandom;
45 #endif 64 #endif
46 65
47 /** Default construct, initializing the reference count to 1. 66 /** Default construct, initializing the reference count to 1.
48 */ 67 */
49 GrVkResource() : fRefCnt(1) { 68 GrVkResource() : fRefCnt(1) {
50 #ifdef SK_TRACE_VK_RESOURCES 69 #ifdef SK_TRACE_VK_RESOURCES
51 fKey = fRandom.nextU(); 70 fKey = fRandom.nextU();
52 fTrace.add(this); 71 fTrace.add(this);
53 #endif 72 #endif
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 * Will unrefAndAbandon those resources without deleting the underlying Vk data 156 * Will unrefAndAbandon those resources without deleting the underlying Vk data
138 */ 157 */
139 virtual void abandonSubResources() const {} 158 virtual void abandonSubResources() const {}
140 159
141 /** 160 /**
142 * Called when the ref count goes to 0. Will free Vk resources. 161 * Called when the ref count goes to 0. Will free Vk resources.
143 */ 162 */
144 void internal_dispose(const GrVkGpu* gpu) const { 163 void internal_dispose(const GrVkGpu* gpu) const {
145 this->freeGPUData(gpu); 164 this->freeGPUData(gpu);
146 #ifdef SK_TRACE_VK_RESOURCES 165 #ifdef SK_TRACE_VK_RESOURCES
147 fTrace.remove(GetKey(*this)); 166 fTrace.remove(this);
148 #endif 167 #endif
149 SkASSERT(0 == fRefCnt); 168 SkASSERT(0 == fRefCnt);
150 fRefCnt = 1; 169 fRefCnt = 1;
151 delete this; 170 delete this;
152 } 171 }
153 172
154 /** 173 /**
155 * Internal_dispose without freeing Vk resources. Used when we've lost cont ext. 174 * Internal_dispose without freeing Vk resources. Used when we've lost cont ext.
156 */ 175 */
157 void internal_dispose() const { 176 void internal_dispose() const {
158 this->abandonSubResources(); 177 this->abandonSubResources();
159 #ifdef SK_TRACE_VK_RESOURCES 178 #ifdef SK_TRACE_VK_RESOURCES
160 fTrace.remove(GetKey(*this)); 179 fTrace.remove(this);
161 #endif 180 #endif
162 SkASSERT(0 == fRefCnt); 181 SkASSERT(0 == fRefCnt);
163 fRefCnt = 1; 182 fRefCnt = 1;
164 delete this; 183 delete this;
165 } 184 }
166 185
167 mutable int32_t fRefCnt; 186 mutable int32_t fRefCnt;
168 #ifdef SK_TRACE_VK_RESOURCES 187 #ifdef SK_TRACE_VK_RESOURCES
169 uint32_t fKey; 188 uint32_t fKey;
170 #endif 189 #endif
171 190
172 typedef SkNoncopyable INHERITED; 191 typedef SkNoncopyable INHERITED;
173 }; 192 };
174 193
175 194
176 #endif 195 #endif
OLDNEW
« no previous file with comments | « src/gpu/vk/GrVkBuffer.cpp ('k') | src/gpu/vk/GrVkResourceProvider.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698