OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 GrGpuResource_DEFINED | 8 #ifndef GrGpuResource_DEFINED |
9 #define GrGpuResource_DEFINED | 9 #define GrGpuResource_DEFINED |
10 | 10 |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 public: | 143 public: |
144 SK_DECLARE_INST_COUNT(GrGpuResource) | 144 SK_DECLARE_INST_COUNT(GrGpuResource) |
145 | 145 |
146 enum LifeCycle { | 146 enum LifeCycle { |
147 /** | 147 /** |
148 * The resource is cached and owned by Skia. Resources with this status
may be kept alive | 148 * The resource is cached and owned by Skia. Resources with this status
may be kept alive |
149 * by the cache as either scratch or unique resources even when there ar
e no refs to them. | 149 * by the cache as either scratch or unique resources even when there ar
e no refs to them. |
150 * The cache may release them whenever there are no refs. | 150 * The cache may release them whenever there are no refs. |
151 */ | 151 */ |
152 kCached_LifeCycle, | 152 kCached_LifeCycle, |
| 153 |
153 /** | 154 /** |
154 * The resource is uncached. As soon as there are no more refs to it, it
is released. Under | 155 * The resource is uncached. As soon as there are no more refs to it, it
is released. Under |
155 * the hood the cache may opaquely recycle it as a cached resource. | 156 * the hood the cache may opaquely recycle it as a cached resource. |
156 */ | 157 */ |
157 kUncached_LifeCycle, | 158 kUncached_LifeCycle, |
| 159 |
158 /** | 160 /** |
159 * Similar to uncached, but Skia does not manage the lifetime of the und
erlying backend | 161 * Similar to uncached, but Skia does not manage the lifetime of the und
erlying backend |
160 * 3D API object(s). The client is responsible for freeing those. Used t
o inject client- | 162 * 3D API object(s). The client is responsible for freeing those. Used t
o inject client- |
161 * created GPU resources into Skia (e.g. to render to a client-created t
exture). | 163 * created GPU resources into Skia (e.g. to render to a client-created t
exture). |
162 */ | 164 */ |
163 kWrapped_LifeCycle, | 165 kBorrowed_LifeCycle, |
| 166 |
| 167 /** |
| 168 * An external resource with ownership transfered into Skia. Skia will f
ree the resource. |
| 169 */ |
| 170 kAdopted_LifeCycle, |
164 }; | 171 }; |
165 | 172 |
166 /** | 173 /** |
167 * Tests whether a object has been abandoned or released. All objects will | 174 * Tests whether a object has been abandoned or released. All objects will |
168 * be in this state after their creating GrContext is destroyed or has | 175 * be in this state after their creating GrContext is destroyed or has |
169 * contextLost called. It's up to the client to test wasDestroyed() before | 176 * contextLost called. It's up to the client to test wasDestroyed() before |
170 * attempting to use an object if it holds refs on objects across | 177 * attempting to use an object if it holds refs on objects across |
171 * ~GrContext, freeResources with the force flag, or contextLost. | 178 * ~GrContext, freeResources with the force flag, or contextLost. |
172 * | 179 * |
173 * @return true if the object has been released or abandoned, | 180 * @return true if the object has been released or abandoned, |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 | 265 |
259 GrGpu* getGpu() const { return fGpu; } | 266 GrGpu* getGpu() const { return fGpu; } |
260 | 267 |
261 /** Overridden to free GPU resources in the backend API. */ | 268 /** Overridden to free GPU resources in the backend API. */ |
262 virtual void onRelease() { } | 269 virtual void onRelease() { } |
263 /** Overridden to abandon any internal handles, ptrs, etc to backend API res
ources. | 270 /** Overridden to abandon any internal handles, ptrs, etc to backend API res
ources. |
264 This may be called when the underlying 3D context is no longer valid and
so no | 271 This may be called when the underlying 3D context is no longer valid and
so no |
265 backend API calls should be made. */ | 272 backend API calls should be made. */ |
266 virtual void onAbandon() { } | 273 virtual void onAbandon() { } |
267 | 274 |
268 bool isWrapped() const { return kWrapped_LifeCycle == fLifeCycle; } | 275 bool shouldFreeResources() const { return fLifeCycle != kBorrowed_LifeCycle;
} |
| 276 |
| 277 bool isExternal() const { |
| 278 return GrGpuResource::kAdopted_LifeCycle == fLifeCycle || |
| 279 GrGpuResource::kBorrowed_LifeCycle == fLifeCycle; |
| 280 } |
269 | 281 |
270 /** | 282 /** |
271 * This entry point should be called whenever gpuMemorySize() should report
a different size. | 283 * This entry point should be called whenever gpuMemorySize() should report
a different size. |
272 * The cache will call gpuMemorySize() to update the current size of the res
ource. | 284 * The cache will call gpuMemorySize() to update the current size of the res
ource. |
273 */ | 285 */ |
274 void didChangeGpuMemorySize() const; | 286 void didChangeGpuMemorySize() const; |
275 | 287 |
276 /** | 288 /** |
277 * Optionally called by the GrGpuResource subclass if the resource can be us
ed as scratch. | 289 * Optionally called by the GrGpuResource subclass if the resource can be us
ed as scratch. |
278 * By default resources are not usable as scratch. This should only be calle
d once. | 290 * By default resources are not usable as scratch. This should only be calle
d once. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 LifeCycle fLifeCycle; | 333 LifeCycle fLifeCycle; |
322 const uint32_t fUniqueID; | 334 const uint32_t fUniqueID; |
323 | 335 |
324 SkAutoTUnref<const SkData> fData; | 336 SkAutoTUnref<const SkData> fData; |
325 | 337 |
326 typedef GrIORef<GrGpuResource> INHERITED; | 338 typedef GrIORef<GrGpuResource> INHERITED; |
327 friend class GrIORef<GrGpuResource>; // to access notifyAllCntsAreZero and n
otifyRefCntIsZero. | 339 friend class GrIORef<GrGpuResource>; // to access notifyAllCntsAreZero and n
otifyRefCntIsZero. |
328 }; | 340 }; |
329 | 341 |
330 #endif | 342 #endif |
OLD | NEW |