Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / gpu / GrResourceCache2.h
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:
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
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 {
45         static const GrResourceKey& GetKey(const GrGpuResource& r) {
46             return r.getScratchKey();
47         }
48
49         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