1 2 /* 3 * Copyright 2014 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #ifndef GrResourceCache2_DEFINED 10 #define GrResourceCache2_DEFINED 11 12 #include "GrGpuResource.h" 13 #include "GrResourceKey.h" 14 #include "SkTInternalLList.h" 15 #include "SkTMultiMap.h" 16 17 /** 18 * Eventual replacement for GrResourceCache. Currently it simply holds a list 19 * of all GrGpuResource objects for a GrContext. It is used to invalidate all 20 * the resources when necessary. 21 */ 22 class GrResourceCache2 { 23 public: GrResourceCache2()24 GrResourceCache2() : fCount(0) {}; 25 ~GrResourceCache2(); 26 27 void insertResource(GrGpuResource* resource); 28 29 void removeResource(GrGpuResource* resource); 30 31 void abandonAll(); 32 33 void releaseAll(); 34 35 private: 36 #ifdef SK_DEBUG isInCache(const GrGpuResource * r)37 bool isInCache(const GrGpuResource* r) const { 38 return fResources.isInList(r); 39 } 40 #endif 41 42 43 void removeScratch(const GrGpuResource* resource); 44 struct ScratchMapTraits { GetKeyScratchMapTraits45 static const GrResourceKey& GetKey(const GrGpuResource& r) { 46 return r.getScratchKey(); 47 } 48 HashScratchMapTraits49 static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); } 50 }; 51 typedef SkTMultiMap<GrGpuResource, GrResourceKey, ScratchMapTraits> ScratchMap; 52 53 int fCount; 54 SkTInternalLList<GrGpuResource> fResources; 55 // This map holds all resources that can be used as scratch resources. 56 ScratchMap fScratchMap; 57 }; 58 59 #endif 60