aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gyp/core.gypi1
-rw-r--r--gyp/tests.gypi1
-rw-r--r--src/core/SkTHash.h12
-rw-r--r--src/core/SkTHashCache.h77
-rw-r--r--src/gpu/gl/GrGLCaps.cpp19
-rw-r--r--src/gpu/gl/GrGLCaps.h48
-rw-r--r--tests/HashTest.cpp6
-rw-r--r--tests/THashCache.cpp89
8 files changed, 37 insertions, 216 deletions
diff --git a/gyp/core.gypi b/gyp/core.gypi
index ead1d99057..4421f5da92 100644
--- a/gyp/core.gypi
+++ b/gyp/core.gypi
@@ -203,7 +203,6 @@
'<(skia_src_path)/core/SkTextFormatParams.h',
'<(skia_src_path)/core/SkTextMapStateProc.h',
'<(skia_src_path)/core/SkTDPQueue.h',
- '<(skia_src_path)/core/SkTHashCache.h',
'<(skia_src_path)/core/SkTLList.h',
'<(skia_src_path)/core/SkTLS.cpp',
'<(skia_src_path)/core/SkTraceEvent.h',
diff --git a/gyp/tests.gypi b/gyp/tests.gypi
index 93468a6324..6b4a9e41fb 100644
--- a/gyp/tests.gypi
+++ b/gyp/tests.gypi
@@ -205,7 +205,6 @@
'../tests/SurfaceTest.cpp',
'../tests/TArrayTest.cpp',
'../tests/TDPQueueTest.cpp',
- '../tests/THashCache.cpp',
'../tests/Time.cpp',
'../tests/TLSTest.cpp',
'../tests/TSetTest.cpp',
diff --git a/src/core/SkTHash.h b/src/core/SkTHash.h
index c7917ac668..b47f8fa766 100644
--- a/src/core/SkTHash.h
+++ b/src/core/SkTHash.h
@@ -18,6 +18,12 @@ class SkTHashTable : SkNoncopyable {
public:
SkTHashTable() : fCount(0), fCapacity(0) {}
+ // Clear the table.
+ void reset() {
+ this->~SkTHashTable();
+ SkNEW_PLACEMENT(this, SkTHashTable);
+ }
+
// How many entries are in the table?
int count() const { return fCount; }
@@ -144,6 +150,9 @@ class SkTHashMap : SkNoncopyable {
public:
SkTHashMap() {}
+ // Clear the map.
+ void reset() { fTable.reset(); }
+
// How many key/value pairs are in the table?
int count() const { return fTable.count(); }
@@ -187,6 +196,9 @@ class SkTHashSet : SkNoncopyable {
public:
SkTHashSet() {}
+ // Clear the set.
+ void reset() { fTable.reset(); }
+
// How many items are in the set?
int count() const { return fTable.count(); }
diff --git a/src/core/SkTHashCache.h b/src/core/SkTHashCache.h
deleted file mode 100644
index cfee9722f2..0000000000
--- a/src/core/SkTHashCache.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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 SkTHASHCACHE_DEFINED
-#define SkTHASHCACHE_DEFINED
-
-#include "SkTypes.h"
-#include "SkTDynamicHash.h"
-
-template <typename T,
-typename Key,
-typename Traits = T,
-int kGrowPercent = 75 >
-class SkTHashCache : public SkNoncopyable {
-public:
-
- SkTHashCache() {
- this->reset();
- }
-
- ~SkTHashCache() {
- this->clear();
- }
-
- T* find(const Key& key) const {
- return fDict->find(key);
- }
-
- /**
- * If element already in cache, return immediately the cached value
- */
- T& add(const T& add) {
- Key key = Traits::GetKey(add);
- if (T* val = this->find(key)) {
- return *val;
- }
-
- T* element = SkNEW_ARGS(T, (add));
-
- fDict->add(element);
-
- return *element;
- }
-
- int size() const {
- return fDict->count();
- }
-
- void reset() {
- this->clear();
-
- fDict.reset(SkNEW(DictType));
- }
-
-private:
- typedef SkTDynamicHash<T, Key, Traits, kGrowPercent> DictType;
-
- void clear() {
- if (fDict.get()) {
- typename DictType::Iter it(fDict.get());
-
- while (!it.done()) {
- SkDELETE(&(*it));
- ++it;
- }
- }
- }
-
- SkAutoTDelete<DictType> fDict;
-};
-
-#endif /* SkHASHCACHE_DEFINED */
-
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 1f50f8d1e1..9911d53f43 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -749,20 +749,13 @@ bool GrGLCaps::readPixelsSupported(const GrGLInterface* intf,
GrGLenum format,
GrGLenum type,
GrGLenum currFboFormat) const {
-
- ReadPixelsSupportedFormats::Key key = {format, type, currFboFormat};
-
- ReadPixelsSupportedFormats* cachedValue = fReadPixelsSupportedCache.find(key);
-
- if (NULL == cachedValue) {
- bool value = doReadPixelsSupported(intf, format, type);
- ReadPixelsSupportedFormats newValue(key, value);
- fReadPixelsSupportedCache.add(newValue);
-
- return newValue.value();
+ ReadPixelsSupportedFormat key = {format, type, currFboFormat};
+ if (const bool* supported = fReadPixelsSupportedCache.find(key)) {
+ return *supported;
}
-
- return cachedValue->value();
+ bool supported = this->doReadPixelsSupported(intf, format, type);
+ fReadPixelsSupportedCache.set(key, supported);
+ return supported;
}
void GrGLCaps::initFSAASupport(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli) {
diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h
index 527cd33ee3..1b77ed0e32 100644
--- a/src/gpu/gl/GrGLCaps.h
+++ b/src/gpu/gl/GrGLCaps.h
@@ -12,7 +12,7 @@
#include "GrDrawTargetCaps.h"
#include "GrGLStencilBuffer.h"
#include "SkChecksum.h"
-#include "SkTHashCache.h"
+#include "SkTHash.h"
#include "SkTArray.h"
class GrGLContextInfo;
@@ -393,45 +393,23 @@ private:
const char* fFBFetchColorName;
const char* fFBFetchExtensionString;
- class ReadPixelsSupportedFormats {
- public:
- struct Key {
- GrGLenum fFormat;
- GrGLenum fType;
- GrGLenum fFboFormat;
-
- bool operator==(const Key& rhs) const {
- return fFormat == rhs.fFormat
- && fType == rhs.fType
- && fFboFormat == rhs.fFboFormat;
- }
-
- uint32_t getHash() const {
- return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(this), sizeof(*this));
- }
- };
-
- ReadPixelsSupportedFormats(Key key, bool value) : fKey(key), fValue(value) {
- }
-
- static const Key& GetKey(const ReadPixelsSupportedFormats& element) {
- return element.fKey;
- }
+ struct ReadPixelsSupportedFormat {
+ GrGLenum fFormat;
+ GrGLenum fType;
+ GrGLenum fFboFormat;
- static uint32_t Hash(const Key& key) {
- return key.getHash();
+ bool operator==(const ReadPixelsSupportedFormat& rhs) const {
+ return fFormat == rhs.fFormat
+ && fType == rhs.fType
+ && fFboFormat == rhs.fFboFormat;
}
-
- bool value() const {
- return fValue;
+ static uint32_t Hash(const ReadPixelsSupportedFormat& r) {
+ return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(&r), sizeof(r));
}
- private:
- Key fKey;
- bool fValue;
};
- mutable SkTHashCache<ReadPixelsSupportedFormats,
- ReadPixelsSupportedFormats::Key> fReadPixelsSupportedCache;
+ mutable SkTHashMap<ReadPixelsSupportedFormat, bool, ReadPixelsSupportedFormat::Hash>
+ fReadPixelsSupportedCache;
typedef GrDrawTargetCaps INHERITED;
};
diff --git a/tests/HashTest.cpp b/tests/HashTest.cpp
index 00857f63dc..623e597eeb 100644
--- a/tests/HashTest.cpp
+++ b/tests/HashTest.cpp
@@ -39,6 +39,9 @@ DEF_TEST(HashMap, r) {
}
REPORTER_ASSERT(r, map.count() == N);
+
+ map.reset();
+ REPORTER_ASSERT(r, map.count() == 0);
}
namespace { uint32_t hash_string(const SkString& s) { return SkToInt(s.size()); } }
@@ -54,6 +57,9 @@ DEF_TEST(HashSet, r) {
REPORTER_ASSERT(r, set.contains(SkString("Hello")));
REPORTER_ASSERT(r, set.contains(SkString("World")));
REPORTER_ASSERT(r, !set.contains(SkString("Goodbye")));
+
+ set.reset();
+ REPORTER_ASSERT(r, set.count() == 0);
}
namespace {
diff --git a/tests/THashCache.cpp b/tests/THashCache.cpp
deleted file mode 100644
index c35df6c746..0000000000
--- a/tests/THashCache.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "Test.h"
-#include "SkTHashCache.h"
-
-
-// Tests the SkTHashCache<T> class template.
-
-struct Tint {
- uint32_t value;
-
- bool operator==(const Tint& rhs) const {
- return value == rhs.value;
- }
-};
-
-class Element {
-public:
-
- bool operator==(const Element& rhs) const {
- return value == rhs.value && key == rhs.key;
- }
-
- static const Tint& GetKey(const Element& element) {
- return element.key;
- }
-
- static uint32_t Hash(const Tint& key) {
- return key.value;
- }
-
- Element(Tint key, int value) : key(key), value(value) {
- }
-
- Tint key;
- int value;
-};
-
-typedef SkTHashCache<Element, Tint> CacheType;
-
-DEF_TEST(THashCache, reporter) {
- Tint k11 = {11};
- Element e11(k11, 22);
-
- Element e11Collision(k11, 0);
- // Element e42(4, 2);
-
- //Some tests for the class Element
- REPORTER_ASSERT(reporter, Element::GetKey(e11) == k11);
- REPORTER_ASSERT(reporter, Element::Hash(k11) == 11);
-
- CacheType cache;
-
- // Is the cahce correctly initialized ?
- REPORTER_ASSERT(reporter, 0 == cache.size());
- REPORTER_ASSERT(reporter, NULL == cache.find(k11));
-
- Element& e11_c = cache.add(e11);
-
- // Tests for simple insertion, verifying that the returned element
- // has the same values as the original one
- REPORTER_ASSERT(reporter, 1 == cache.size());
- REPORTER_ASSERT(reporter, NULL != cache.find(k11));
- REPORTER_ASSERT(reporter, e11_c == e11);
-
- Element& e11Collision_c = cache.add(e11Collision);
- // Verifying that, in case of collision, the element alerady in the cache is not removed
- REPORTER_ASSERT(reporter, e11Collision_c == e11);
- REPORTER_ASSERT(reporter, 1 == cache.size());
-
- Tint k42 = {42};
- Element e42(k42, 2);
- cache.add(e42);
- // Can we add more than one element?
- REPORTER_ASSERT(reporter, NULL != cache.find(k11));
- REPORTER_ASSERT(reporter, NULL != cache.find(k42));
- REPORTER_ASSERT(reporter, 2 == cache.size());
-
- cache.reset();
- // Does clear do its job?
- REPORTER_ASSERT(reporter, 0 == cache.size());
- REPORTER_ASSERT(reporter, NULL == cache.find(k11));
- REPORTER_ASSERT(reporter, NULL == cache.find(k42));
-}