Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(278)

Unified Diff: src/gpu/GrResourceCache.h

Issue 91453002: Speed up GrResourceCache add and lookup by using TDynamicHash (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrResourceCache.h
diff --git a/src/gpu/GrResourceCache.h b/src/gpu/GrResourceCache.h
index 15a6da2910f97b60fb7a157df1a962731eb769b2..d24d28d3e4c742afc58840c27cb82ca1cd5063aa 100644
--- a/src/gpu/GrResourceCache.h
+++ b/src/gpu/GrResourceCache.h
@@ -13,9 +13,9 @@
#include "GrConfig.h"
#include "GrTypes.h"
-#include "GrTHashTable.h"
#include "GrBinHashKey.h"
#include "SkMessageBus.h"
+#include "SkTDynamicHash.h"
#include "SkTInternalLList.h"
class GrResource;
@@ -23,12 +23,6 @@ class GrResourceEntry;
class GrResourceKey {
public:
- enum {
- kHashBits = 7,
- kHashCount = 1 << kHashBits,
- kHashMask = kHashCount - 1
- };
-
static GrCacheID::Domain ScratchDomain() {
static const GrCacheID::Domain gDomain = GrCacheID::GenerateDomain();
return gDomain;
@@ -61,9 +55,8 @@ public:
this->init(id.getDomain(), id.getKey(), type, flags);
}
- //!< returns hash value [0..kHashMask] for the key
- int getHash() const {
- return fKey.getHash() & kHashMask;
+ uint32_t getHash() const {
+ return fKey.getHash();
}
bool isScratch() const {
@@ -83,14 +76,6 @@ public:
}
bool operator==(const GrResourceKey& other) const { return fKey == other.fKey; }
- bool operator<(const GrResourceKey& other) const { return fKey < other.fKey; }
-
- static bool lessThan(const GrResourceEntry& entry, const GrResourceKey& key);
- static bool equals(const GrResourceEntry& entry, const GrResourceKey& key);
-#ifdef SK_DEBUG
- static bool lessThan(const GrResourceEntry& a, const GrResourceEntry& b);
- static bool equals(const GrResourceEntry& a, const GrResourceEntry& b);
-#endif
private:
enum {
@@ -135,6 +120,12 @@ public:
GrResource* resource() const { return fResource; }
const GrResourceKey& key() const { return fKey; }
+ static const GrResourceKey& GetKey(const GrResourceEntry& e) { return e.key(); }
+ static uint32_t GetKeyHash(const GrResourceKey& key) { return key.getHash(); }
+ static bool EqualsKey(const GrResourceEntry& a, const GrResourceKey& b) {
+ return a.key() == b;
+ }
+
#ifdef SK_DEBUG
void validate() const;
#else
@@ -152,27 +143,8 @@ private:
SK_DECLARE_INTERNAL_LLIST_INTERFACE(GrResourceEntry);
friend class GrResourceCache;
- friend class GrDLinkedList;
};
-inline bool GrResourceKey::lessThan(const GrResourceEntry& entry, const GrResourceKey& key) {
- return entry.key() < key;
-}
-
-inline bool GrResourceKey::equals(const GrResourceEntry& entry, const GrResourceKey& key) {
- return entry.key() == key;
-}
-
-#ifdef SK_DEBUG
-inline bool GrResourceKey::lessThan(const GrResourceEntry& a, const GrResourceEntry& b) {
- return a.key() < b.key();
-}
-
-inline bool GrResourceKey::equals(const GrResourceEntry& a, const GrResourceEntry& b) {
- return a.key() == b.key();
-}
-#endif
-
///////////////////////////////////////////////////////////////////////////////
/**
@@ -192,7 +164,7 @@ inline bool GrResourceKey::equals(const GrResourceEntry& a, const GrResourceEntr
*
* For even faster searches, a hash is computed from the Key. If there is
* a collision between two keys with the same hash, we fall back on the
- * bsearch, and update the hash to reflect the most recent Key requested.
+ * bsearch, and update the hash to reflect the most recent Key roequested.
*
* It is a goal to make the GrResourceCache the central repository and bookkeeper
* of all resources. It should replace the linked list of GrResources that
@@ -348,7 +320,11 @@ private:
void removeInvalidResource(GrResourceEntry* entry);
- GrTHashTable<GrResourceEntry, GrResourceKey, 8> fCache;
+ SkTDynamicHash<GrResourceEntry,
+ GrResourceKey,
+ GrResourceEntry::GetKey,
+ GrResourceEntry::GetKeyHash,
+ GrResourceEntry::EqualsKey> fCache;
// We're an internal doubly linked list
typedef SkTInternalLList<GrResourceEntry> EntryList;

Powered by Google App Engine
This is Rietveld 408576698