1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "Test.h"
9 #include "SkOncePtr.h"
10 #include "SkTaskGroup.h"
11 
DEF_TEST(OncePtr,r)12 DEF_TEST(OncePtr, r) {
13     SkOncePtr<int> once;
14 
15     static SkAtomic<int> calls(0);
16     auto create = [&] {
17         calls.fetch_add(1);
18         return new int(5);
19     };
20 
21     SkTaskGroup().batch(sk_num_cores()*4, [&](size_t) {
22         int* n = once.get(create);
23         REPORTER_ASSERT(r, *n == 5);
24     });
25     REPORTER_ASSERT(r, calls.load() == 1);
26 }
27 
28 /* TODO(mtklein): next CL
29 
30 SK_DECLARE_STATIC_ONCE(once_noptr);
31 DEF_TEST(OnceNoPtr, r) {
32     static SkAtomic<int> calls(0);
33 
34     SkAtomic<int> force_a_race(sk_num_cores());
35     SkTaskGroup().batch(sk_num_cores()*4, [&](size_t) {
36         force_a_race.fetch_add(-1);
37         while (force_a_race.load() > 0);
38 
39         SkOnce(&once_noptr, [&] { calls.fetch_add(1); });
40     });
41     REPORTER_ASSERT(r, calls.load() == 1);
42 }
43 */
44