blob: d01cee09fe913932de27ce52a017d25821b50582 [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
mtklein279c7862016-01-04 19:13:19 -080021 SkTaskGroup().batch(sk_num_cores()*4, [&](size_t) {
mtklein714a7102015-09-04 10:26:27 -070022 int* n = once.get(create);
23 REPORTER_ASSERT(r, *n == 5);
24 });
25 REPORTER_ASSERT(r, calls.load() == 1);
mtklein714a7102015-09-04 10:26:27 -070026}
27
28/* TODO(mtklein): next CL
29
30SK_DECLARE_STATIC_ONCE(once_noptr);
31DEF_TEST(OnceNoPtr, r) {
32 static SkAtomic<int> calls(0);
33
34 SkAtomic<int> force_a_race(sk_num_cores());
mtklein279c7862016-01-04 19:13:19 -080035 SkTaskGroup().batch(sk_num_cores()*4, [&](size_t) {
mtklein714a7102015-09-04 10:26:27 -070036 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*/