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

Unified Diff: tests/HashTest.cpp

Issue 919193002: Minimize SkTHash object copying (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: relaxed same-val copy expectations Created 5 years, 10 months 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
« no previous file with comments | « src/core/SkTHash.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/HashTest.cpp
diff --git a/tests/HashTest.cpp b/tests/HashTest.cpp
index 3dd2df4e3c6b9aa9734c159047843e1d2e64f0dc..00857f63dcd61377090f2fc01023e22b84d4376a 100644
--- a/tests/HashTest.cpp
+++ b/tests/HashTest.cpp
@@ -3,7 +3,7 @@
#include "SkTHash.h"
#include "Test.h"
-namespace { uint32_t hash_int(int k) { return SkChecksum::Mix(k); } }
+namespace { uint32_t hash_int(const int& k) { return SkChecksum::Mix(k); } }
static void set_negative_key(int key, double* d) { *d = -key; }
@@ -41,7 +41,7 @@ DEF_TEST(HashMap, r) {
REPORTER_ASSERT(r, map.count() == N);
}
-namespace { uint32_t hash_string(SkString s) { return (uint32_t)s.size(); } }
+namespace { uint32_t hash_string(const SkString& s) { return SkToInt(s.size()); } }
DEF_TEST(HashSet, r) {
SkTHashSet<SkString, hash_string> set;
@@ -55,3 +55,66 @@ DEF_TEST(HashSet, r) {
REPORTER_ASSERT(r, set.contains(SkString("World")));
REPORTER_ASSERT(r, !set.contains(SkString("Goodbye")));
}
+
+namespace {
+
+class CopyCounter {
+public:
+ CopyCounter() : fID(0), fCounter(NULL) {}
+
+ CopyCounter(uint32_t id, uint32_t* counter) : fID(id), fCounter(counter) {}
+
+ CopyCounter(const CopyCounter& other)
+ : fID(other.fID)
+ , fCounter(other.fCounter) {
+ SkASSERT(fCounter);
+ *fCounter += 1;
+ }
+
+ void operator=(const CopyCounter& other) {
+ fID = other.fID;
+ fCounter = other.fCounter;
+ *fCounter += 1;
+ }
+
+ bool operator==(const CopyCounter& other) const {
+ return fID == other.fID;
+ }
+
+private:
+ uint32_t fID;
+ uint32_t* fCounter;
+};
+
+uint32_t hash_copy_counter(const CopyCounter&) {
+ return 0; // let them collide, what do we care?
+}
+
+}
+
+DEF_TEST(HashSetCopyCounter, r) {
+ SkTHashSet<CopyCounter, hash_copy_counter> set;
+
+ uint32_t globalCounter = 0;
+ CopyCounter copyCounter1(1, &globalCounter);
+ CopyCounter copyCounter2(2, &globalCounter);
+ REPORTER_ASSERT(r, globalCounter == 0);
+
+ set.add(copyCounter1);
+ REPORTER_ASSERT(r, globalCounter == 1);
+ REPORTER_ASSERT(r, set.contains(copyCounter1));
+ REPORTER_ASSERT(r, globalCounter == 1);
+ set.add(copyCounter1);
+ // We allow copies for same-value adds for now.
+ REPORTER_ASSERT(r, globalCounter == 2);
+
+ set.add(copyCounter2);
+ REPORTER_ASSERT(r, globalCounter == 3);
+ REPORTER_ASSERT(r, set.contains(copyCounter1));
+ REPORTER_ASSERT(r, set.contains(copyCounter2));
+ REPORTER_ASSERT(r, globalCounter == 3);
+ set.add(copyCounter1);
+ set.add(copyCounter2);
+ // We allow copies for same-value adds for now.
+ REPORTER_ASSERT(r, globalCounter == 5);
+}
« no previous file with comments | « src/core/SkTHash.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698