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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 | 167 |
168 /** | 168 /** |
169 * Retrieves the amount of GPU memory used by this resource in bytes. It is | 169 * Retrieves the amount of GPU memory used by this resource in bytes. It is |
170 * approximate since we aren't aware of additional padding or copies made | 170 * approximate since we aren't aware of additional padding or copies made |
171 * by the driver. | 171 * by the driver. |
172 * | 172 * |
173 * @return the amount of GPU memory used in bytes | 173 * @return the amount of GPU memory used in bytes |
174 */ | 174 */ |
175 virtual size_t gpuMemorySize() const = 0; | 175 virtual size_t gpuMemorySize() const = 0; |
176 | 176 |
177 // TODO(bsalomon): Move this stuff to GrGpuResourcePriv. | |
178 bool setContentKey(const GrResourceKey& contentKey); | |
179 void setCacheEntry(GrResourceCacheEntry* cacheEntry); | |
180 GrResourceCacheEntry* getCacheEntry() const { return fCacheEntry; } | |
181 bool isScratch() const; | |
182 /** | |
183 * If this resource can be used as a scratch resource this returns a valid | |
184 * scratch key. Otherwise it returns a key for which isNullScratch is true. | |
185 * The resource may currently be used as content resource rather than scratc
h. | |
186 * Check isScratch(). | |
187 */ | |
188 const GrResourceKey& getScratchKey() const { return fScratchKey; } | |
189 /** | |
190 * If this resource is currently cached by its contents then this will retur
n | |
191 * the content key. Otherwise, NULL is returned. | |
192 */ | |
193 const GrResourceKey* getContentKey() const; | |
194 | |
195 /** | 177 /** |
196 * Gets an id that is unique for this GrGpuResource object. It is static in
that it does | 178 * Gets an id that is unique for this GrGpuResource object. It is static in
that it does |
197 * not change when the content of the GrGpuResource object changes. This wil
l never return | 179 * not change when the content of the GrGpuResource object changes. This wil
l never return |
198 * 0. | 180 * 0. |
199 */ | 181 */ |
200 uint32_t getUniqueID() const { return fUniqueID; } | 182 uint32_t getUniqueID() const { return fUniqueID; } |
201 | 183 |
| 184 /** |
| 185 * Internal-only helper class used for cache manipulations of the reosurce. |
| 186 */ |
| 187 class CacheAccess; |
| 188 inline CacheAccess cacheAccess(); |
| 189 inline const CacheAccess cacheAccess() const; |
| 190 |
202 protected: | 191 protected: |
203 // This must be called by every GrGpuObject. It should be called once the ob
ject is fully | 192 // This must be called by every GrGpuObject. It should be called once the ob
ject is fully |
204 // initialized (i.e. not in a base class constructor). | 193 // initialized (i.e. not in a base class constructor). |
205 void registerWithCache(); | 194 void registerWithCache(); |
206 | 195 |
207 GrGpuResource(GrGpu*, bool isWrapped); | 196 GrGpuResource(GrGpu*, bool isWrapped); |
208 virtual ~GrGpuResource(); | 197 virtual ~GrGpuResource(); |
209 | 198 |
210 bool isInCache() const { return SkToBool(fCacheEntry); } | |
211 | |
212 GrGpu* getGpu() const { return fGpu; } | 199 GrGpu* getGpu() const { return fGpu; } |
213 | 200 |
214 // Derived classes should always call their parent class' onRelease | 201 // Derived classes should always call their parent class' onRelease |
215 // and onAbandon methods in their overrides. | 202 // and onAbandon methods in their overrides. |
216 virtual void onRelease() {}; | 203 virtual void onRelease() {}; |
217 virtual void onAbandon() {}; | 204 virtual void onAbandon() {}; |
218 | 205 |
219 bool isWrapped() const { return kWrapped_FlagBit & fFlags; } | 206 bool isWrapped() const { return kWrapped_FlagBit & fFlags; } |
220 | 207 |
221 /** | 208 /** |
222 * This entry point should be called whenever gpuMemorySize() begins | 209 * This entry point should be called whenever gpuMemorySize() begins |
223 * reporting a different size. If the object is in the cache, it will call | 210 * reporting a different size. If the object is in the cache, it will call |
224 * gpuMemorySize() immediately and pass the new size on to the resource | 211 * gpuMemorySize() immediately and pass the new size on to the resource |
225 * cache. | 212 * cache. |
226 */ | 213 */ |
227 void didChangeGpuMemorySize() const; | 214 void didChangeGpuMemorySize() const; |
228 | 215 |
229 /** | 216 /** |
230 * Optionally called by the GrGpuResource subclass if the resource can be us
ed as scratch. | 217 * Optionally called by the GrGpuResource subclass if the resource can be us
ed as scratch. |
231 * By default resources are not usable as scratch. This should only be calle
d once. | 218 * By default resources are not usable as scratch. This should only be calle
d once. |
232 **/ | 219 **/ |
233 void setScratchKey(const GrResourceKey& scratchKey); | 220 void setScratchKey(const GrResourceKey& scratchKey); |
234 | 221 |
235 private: | 222 private: |
| 223 // See comments in CacheAccess. |
| 224 bool setContentKey(const GrResourceKey& contentKey); |
| 225 |
236 void notifyIsPurgable() const; | 226 void notifyIsPurgable() const; |
237 | 227 |
238 #ifdef SK_DEBUG | 228 #ifdef SK_DEBUG |
239 friend class GrGpu; // for assert in GrGpu to access getGpu | 229 friend class GrGpu; // for assert in GrGpu to access getGpu |
240 #endif | 230 #endif |
241 | 231 |
242 static uint32_t CreateUniqueID(); | 232 static uint32_t CreateUniqueID(); |
243 | 233 |
244 // We're in an internal doubly linked list owned by GrResourceCache2 | 234 // We're in an internal doubly linked list owned by GrResourceCache2 |
245 SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrGpuResource); | 235 SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrGpuResource); |
(...skipping 20 matching lines...) Expand all Loading... |
266 // keys. | 256 // keys. |
267 GrResourceKey fScratchKey; | 257 GrResourceKey fScratchKey; |
268 GrResourceKey fContentKey; | 258 GrResourceKey fContentKey; |
269 bool fContentKeySet; | 259 bool fContentKeySet; |
270 | 260 |
271 typedef GrIORef<GrGpuResource> INHERITED; | 261 typedef GrIORef<GrGpuResource> INHERITED; |
272 friend class GrIORef<GrGpuResource>; // to access notifyIsPurgable. | 262 friend class GrIORef<GrGpuResource>; // to access notifyIsPurgable. |
273 }; | 263 }; |
274 | 264 |
275 #endif | 265 #endif |
OLD | NEW |