Clean up SkOnce:
1 Remove atExit feature: clients can do it just as well as SkOnce can.
2 Remove support for functors: no one but the unit test did that.
3 Remove support for unused non-static SkOnceFlag (no SK_ONCE_INIT).
4 Add SkOnce variants for no-arg functions so we're not forced to pass dummy values all the time.
5 Merge SkSpinlock and SkOnceFlag, making all members private.
6 More notes about memory barriers, adding an acquire load after acquiring the spinlock.
BUG=skia:
R=bungeman@google.com, mtklein@google.com, reed@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/302083003
diff --git a/tests/OnceTest.cpp b/tests/OnceTest.cpp
index 3a99c39..389d257 100644
--- a/tests/OnceTest.cpp
+++ b/tests/OnceTest.cpp
@@ -27,20 +27,6 @@
REPORTER_ASSERT(r, 5 == x);
}
-struct AddFour { void operator()(int* x) { *x += 4; } };
-
-DEF_TEST(SkOnce_MiscFeatures, r) {
- // Tests that we support functors and explicit SkOnceFlags.
- int x = 0;
-
- SkOnceFlag once = SK_ONCE_INIT;
- SkOnce(&once, AddFour(), &x);
- SkOnce(&once, AddFour(), &x);
- SkOnce(&once, AddFour(), &x);
-
- REPORTER_ASSERT(r, 4 == x);
-}
-
static void add_six(int* x) {
*x += 6;
}
@@ -78,14 +64,13 @@
REPORTER_ASSERT(r, 6 == x);
}
-// Test that the atExit option works.
-static int gToDecrement = 1;
-static void noop(int) {}
-static void decrement() { gToDecrement--; }
-static void checkDecremented() { SkASSERT(gToDecrement == 0); }
+static int gX = 0;
+static void inc_gX() { gX++; }
-DEF_TEST(SkOnce_atExit, r) {
- atexit(checkDecremented);
+DEF_TEST(SkOnce_NoArg, r) {
SK_DECLARE_STATIC_ONCE(once);
- SkOnce(&once, noop, 0, decrement);
+ SkOnce(&once, inc_gX);
+ SkOnce(&once, inc_gX);
+ SkOnce(&once, inc_gX);
+ REPORTER_ASSERT(r, 1 == gX);
}