/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrResourceCache2_DEFINED #define GrResourceCache2_DEFINED #include "GrGpuResource.h" #include "GrResourceKey.h" #include "SkTInternalLList.h" #include "SkTMultiMap.h" /** * Eventual replacement for GrResourceCache. Currently it simply holds a list * of all GrGpuResource objects for a GrContext. It is used to invalidate all * the resources when necessary. */ class GrResourceCache2 { public: GrResourceCache2() : fCount(0) {}; ~GrResourceCache2(); void insertResource(GrGpuResource*); void removeResource(GrGpuResource*); void abandonAll(); void releaseAll(); enum { /** Preferentially returns scratch resources with no pending IO. */ kPreferNoPendingIO_ScratchFlag = 0x1, /** Will not return any resources that match but have pending IO. */ kRequireNoPendingIO_ScratchFlag = 0x2, }; GrGpuResource* findAndRefScratchResource(const GrResourceKey& scratchKey, uint32_t flags = 0); private: #ifdef SK_DEBUG bool isInCache(const GrGpuResource* r) const { return fResources.isInList(r); } #endif class AvailableForScratchUse; struct ScratchMapTraits { static const GrResourceKey& GetKey(const GrGpuResource& r) { return r.getScratchKey(); } static uint32_t Hash(const GrResourceKey& key) { return key.getHash(); } }; typedef SkTMultiMap ScratchMap; int fCount; SkTInternalLList fResources; // This map holds all resources that can be used as scratch resources. ScratchMap fScratchMap; }; #endif