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 */
22class GrResourceCache2 {
23public:
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
35private:
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
60