blob: b1e4e5d1ae7d3ec238a324201db3bb0d9ae7dd11 [file] [log] [blame]
mtklein714a7102015-09-04 10:26:27 -07001/*
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
12DEF_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 SkAtomic<int> force_a_race(sk_num_cores());
22
23 sk_parallel_for(sk_num_cores()*4, [&](size_t) {
24 force_a_race.fetch_add(-1);
25 while (force_a_race.load() > 0);
26
27 int* n = once.get(create);
28 REPORTER_ASSERT(r, *n == 5);
29 });
30 REPORTER_ASSERT(r, calls.load() == 1);
mtklein714a7102015-09-04 10:26:27 -070031}
32
33/* TODO(mtklein): next CL
34
35SK_DECLARE_STATIC_ONCE(once_noptr);
36DEF_TEST(OnceNoPtr, r) {
37 static SkAtomic<int> calls(0);
38
39 SkAtomic<int> force_a_race(sk_num_cores());
40 sk_parallel_for(sk_num_cores()*4, [&](size_t) {
41 force_a_race.fetch_add(-1);
42 while (force_a_race.load() > 0);
43
44 SkOnce(&once_noptr, [&] { calls.fetch_add(1); });
45 });
46 REPORTER_ASSERT(r, calls.load() == 1);
47}
48*/