Index: tests/SkSharedMutexTest.cpp |
diff --git a/tests/SkSharedMutexTest.cpp b/tests/SkSharedMutexTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..49f01abfe4a512259068d80a80e97fa0e208fc06 |
--- /dev/null |
+++ b/tests/SkSharedMutexTest.cpp |
@@ -0,0 +1,50 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkSharedMutex.h" |
+#include "SkTaskGroup.h" |
+ |
+#include "Test.h" |
+ |
+DEF_TEST(SkSharedMutexBasic, r) { |
+ SkSharedMutex sm; |
+ sm.acquire(); |
+ sm.release(); |
+ sm.acquireShared(); |
+ sm.releaseShared(); |
+} |
+ |
+DEF_TEST(SkSharedMutexMultiThreaded, r) { |
+ SkSharedMutex sm; |
+ static const int kSharedSize = 10; |
+ int shared[kSharedSize]; |
+ int value = 0; |
+ for (int i = 0; i < kSharedSize; ++i) { |
+ shared[i] = 0; |
+ } |
+ sk_parallel_for(8, [&](int threadIndex) { |
+ if (threadIndex % 4 != 0) { |
+ for (int c = 0; c < 100000; ++c) { |
+ sm.acquireShared(); |
+ int v = shared[0]; |
+ for (int i = 1; i < kSharedSize; ++i) { |
+ REPORTER_ASSERT(r, v == shared[i]); |
+ } |
+ sm.releaseShared(); |
+ } |
+ } else { |
+ for (int c = 0; c < 100000; ++c) { |
+ sm.acquire(); |
+ value += 1; |
+ for (int i = 0; i < kSharedSize; ++i) { |
+ shared[i] = value; |
+ } |
+ sm.release(); |
+ } |
+ } |
+ }); |
+} |