| Index: tests/OncePtrTest.cpp
|
| diff --git a/tests/OncePtrTest.cpp b/tests/OncePtrTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1b348dfd2d3b7531de099373d341b0b1bf2f15f5
|
| --- /dev/null
|
| +++ b/tests/OncePtrTest.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 "Test.h"
|
| +#include "SkOncePtr.h"
|
| +#include "SkTaskGroup.h"
|
| +
|
| +DEF_TEST(OncePtr, r) {
|
| + SkOncePtr<int> once;
|
| +
|
| + static SkAtomic<int> calls(0);
|
| + auto create = [&] {
|
| + calls.fetch_add(1);
|
| + return new int(5);
|
| + };
|
| +
|
| + SkAtomic<int> force_a_race(sk_num_cores());
|
| +
|
| + sk_parallel_for(sk_num_cores()*4, [&](size_t) {
|
| + force_a_race.fetch_add(-1);
|
| + while (force_a_race.load() > 0);
|
| +
|
| + int* n = once.get(create);
|
| + REPORTER_ASSERT(r, *n == 5);
|
| + });
|
| + REPORTER_ASSERT(r, calls.load() == 1);
|
| +
|
| + delete (int*)once;
|
| +}
|
| +
|
| +/* TODO(mtklein): next CL
|
| +
|
| +SK_DECLARE_STATIC_ONCE(once_noptr);
|
| +DEF_TEST(OnceNoPtr, r) {
|
| + static SkAtomic<int> calls(0);
|
| +
|
| + SkAtomic<int> force_a_race(sk_num_cores());
|
| + sk_parallel_for(sk_num_cores()*4, [&](size_t) {
|
| + force_a_race.fetch_add(-1);
|
| + while (force_a_race.load() > 0);
|
| +
|
| + SkOnce(&once_noptr, [&] { calls.fetch_add(1); });
|
| + });
|
| + REPORTER_ASSERT(r, calls.load() == 1);
|
| +}
|
| +*/
|
|
|