• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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