| Index: src/gpu/GrResourceCache.h
|
| diff --git a/src/gpu/GrResourceCache.h b/src/gpu/GrResourceCache.h
|
| deleted file mode 100644
|
| index 80e4b3f1e40d0e499f7d67def7a8b7c2ce1f7c8c..0000000000000000000000000000000000000000
|
| --- a/src/gpu/GrResourceCache.h
|
| +++ /dev/null
|
| @@ -1,251 +0,0 @@
|
| -
|
| -/*
|
| - * Copyright 2011 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#ifndef GrResourceCache_DEFINED
|
| -#define GrResourceCache_DEFINED
|
| -
|
| -#include "GrDrawTargetCaps.h"
|
| -#include "GrResourceKey.h"
|
| -#include "SkTMultiMap.h"
|
| -#include "SkMessageBus.h"
|
| -#include "SkTInternalLList.h"
|
| -
|
| -class GrGpuResource;
|
| -class GrResourceCache;
|
| -class GrResourceCacheEntry;
|
| -
|
| -
|
| -// The cache listens for these messages to purge junk resources proactively.
|
| -struct GrResourceInvalidatedMessage {
|
| - GrResourceKey key;
|
| -};
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -class GrResourceCacheEntry {
|
| -public:
|
| - GrGpuResource* resource() const { return fResource; }
|
| -
|
| - static uint32_t Hash(const GrGpuResource* resource) {
|
| - return static_cast<uint32_t>(reinterpret_cast<intptr_t>(resource));
|
| - }
|
| -#ifdef SK_DEBUG
|
| - void validate() const;
|
| -#else
|
| - void validate() const {}
|
| -#endif
|
| -
|
| - /**
|
| - * Update the cached size for this entry and inform the resource cache that
|
| - * it has changed. Usually invoked from GrGpuResource::didChangeGpuMemorySize,
|
| - * not directly from here.
|
| - */
|
| - void didChangeResourceSize();
|
| -
|
| -private:
|
| - GrResourceCacheEntry(GrResourceCache*, GrGpuResource*);
|
| - ~GrResourceCacheEntry();
|
| -
|
| - GrResourceCache* fResourceCache;
|
| - GrGpuResource* fResource;
|
| - size_t fCachedSize;
|
| -
|
| - // Linked list for the LRU ordering.
|
| - SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrResourceCacheEntry);
|
| -
|
| - friend class GrResourceCache;
|
| - friend class GrContext;
|
| -};
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -/**
|
| - * Cache of GrGpuResource objects.
|
| - *
|
| - * These have a corresponding GrResourceKey, built from 128bits identifying the
|
| - * resource. Multiple resources can map to same GrResourceKey.
|
| - *
|
| - * The cache stores the entries in a double-linked list, which is its LRU.
|
| - * When an entry is "locked" (i.e. given to the caller), it is moved to the
|
| - * head of the list. If/when we must purge some of the entries, we walk the
|
| - * list backwards from the tail, since those are the least recently used.
|
| - *
|
| - * For fast searches, we maintain a hash map based on the GrResourceKey.
|
| - *
|
| - * It is a goal to make the GrResourceCache the central repository and bookkeeper
|
| - * of all resources. It should replace the linked list of GrGpuResources that
|
| - * GrGpu uses to call abandon/release.
|
| - */
|
| -class GrResourceCache {
|
| -public:
|
| - GrResourceCache(const GrDrawTargetCaps*, int maxCount, size_t maxBytes);
|
| - ~GrResourceCache();
|
| -
|
| - /**
|
| - * Return the current resource cache limits.
|
| - *
|
| - * @param maxResource If non-null, returns maximum number of resources
|
| - * that can be held in the cache.
|
| - * @param maxBytes If non-null, returns maximum number of bytes of
|
| - * gpu memory that can be held in the cache.
|
| - */
|
| - void getLimits(int* maxResources, size_t* maxBytes) const;
|
| -
|
| - /**
|
| - * Specify the resource cache limits. If the current cache exceeds either
|
| - * of these, it will be purged (LRU) to keep the cache within these limits.
|
| - *
|
| - * @param maxResources The maximum number of resources that can be held in
|
| - * the cache.
|
| - * @param maxBytes The maximum number of bytes of resource memory that
|
| - * can be held in the cache.
|
| - */
|
| - void setLimits(int maxResources, size_t maxResourceBytes);
|
| -
|
| - /**
|
| - * The callback function used by the cache when it is still over budget
|
| - * after a purge. The passed in 'data' is the same 'data' handed to
|
| - * setOverbudgetCallback. The callback returns true if some resources
|
| - * have been freed.
|
| - */
|
| - typedef bool (*PFOverbudgetCB)(void* data);
|
| -
|
| - /**
|
| - * Set the callback the cache should use when it is still over budget
|
| - * after a purge. The 'data' provided here will be passed back to the
|
| - * callback. Note that the cache will attempt to purge any resources newly
|
| - * freed by the callback.
|
| - */
|
| - void setOverbudgetCallback(PFOverbudgetCB overbudgetCB, void* data) {
|
| - fOverbudgetCB = overbudgetCB;
|
| - fOverbudgetData = data;
|
| - }
|
| -
|
| - /**
|
| - * Returns the number of bytes consumed by cached resources.
|
| - */
|
| - size_t getCachedResourceBytes() const { return fEntryBytes; }
|
| -
|
| - /**
|
| - * Returns the number of cached resources.
|
| - */
|
| - int getCachedResourceCount() const { return fEntryCount; }
|
| -
|
| - void makeResourceMRU(GrGpuResource*);
|
| -
|
| - /** Called by GrGpuResources when they detects that they are newly purgable. */
|
| - void notifyPurgable(const GrGpuResource*);
|
| -
|
| - /**
|
| - * Add the new resource to the cache (by creating a new cache entry based
|
| - * on the provided key and resource).
|
| - *
|
| - * Ownership of the resource is transferred to the resource cache,
|
| - * which will unref() it when it is purged or deleted.
|
| - *
|
| - * This can fail if the key is already taken, or the resource is already in
|
| - * the cache.
|
| - */
|
| - bool addResource(const GrResourceKey& key, GrGpuResource* resource);
|
| -
|
| - /**
|
| - * Notify the cache that the size of a resource has changed.
|
| - */
|
| - void didIncreaseResourceSize(const GrResourceCacheEntry*, size_t amountInc);
|
| - void didDecreaseResourceSize(const GrResourceCacheEntry*, size_t amountDec);
|
| -
|
| - /**
|
| - * Remove a resource from the cache and delete it!
|
| - */
|
| - void deleteResource(GrResourceCacheEntry* entry);
|
| -
|
| - /**
|
| - * Removes every resource in the cache that isn't locked.
|
| - */
|
| - void purgeAllUnlocked();
|
| -
|
| - /**
|
| - * Allow cache to purge unused resources to obey resource limitations
|
| - * Note: this entry point will be hidden (again) once totally ref-driven
|
| - * cache maintenance is implemented. Note that the overbudget callback
|
| - * will be called if the initial purge doesn't get the cache under
|
| - * its budget.
|
| - *
|
| - * extraCount and extraBytes are added to the current resource allocation
|
| - * to make sure enough room is available for future additions (e.g,
|
| - * 10MB across 10 textures is about to be added).
|
| - */
|
| - void purgeAsNeeded(int extraCount = 0, size_t extraBytes = 0);
|
| -
|
| -#ifdef SK_DEBUG
|
| - void validate() const;
|
| -#else
|
| - void validate() const {}
|
| -#endif
|
| -
|
| -#if GR_CACHE_STATS
|
| - void printStats();
|
| -#endif
|
| -
|
| -private:
|
| - void internalDetach(GrResourceCacheEntry*);
|
| - void attachToHead(GrResourceCacheEntry*);
|
| - void purgeInvalidated();
|
| - void internalPurge(int extraCount, size_t extraBytes);
|
| -#ifdef SK_DEBUG
|
| - static size_t countBytes(const SkTInternalLList<GrResourceCacheEntry>& list);
|
| -#endif
|
| -
|
| - // We're an internal doubly linked list
|
| - typedef SkTInternalLList<GrResourceCacheEntry> EntryList;
|
| - EntryList fList;
|
| -
|
| - // our budget, used in purgeAsNeeded()
|
| - int fMaxCount;
|
| - size_t fMaxBytes;
|
| -
|
| - // our current stats, related to our budget
|
| -#if GR_CACHE_STATS
|
| - int fHighWaterEntryCount;
|
| - size_t fHighWaterEntryBytes;
|
| -#endif
|
| -
|
| - int fEntryCount;
|
| - size_t fEntryBytes;
|
| -
|
| - // prevents recursive purging
|
| - bool fPurging;
|
| -
|
| - PFOverbudgetCB fOverbudgetCB;
|
| - void* fOverbudgetData;
|
| -
|
| - SkAutoTUnref<const GrDrawTargetCaps> fCaps;
|
| -};
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -#ifdef SK_DEBUG
|
| - class GrAutoResourceCacheValidate {
|
| - public:
|
| - GrAutoResourceCacheValidate(GrResourceCache* cache) : fCache(cache) {
|
| - cache->validate();
|
| - }
|
| - ~GrAutoResourceCacheValidate() {
|
| - fCache->validate();
|
| - }
|
| - private:
|
| - GrResourceCache* fCache;
|
| - };
|
| -#else
|
| - class GrAutoResourceCacheValidate {
|
| - public:
|
| - GrAutoResourceCacheValidate(GrResourceCache*) {}
|
| - };
|
| -#endif
|
| -
|
| -#endif
|
|
|