12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /*
- * Copyright 2013 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "include/private/SkOnce.h"
- #include "src/core/SkTaskGroup.h"
- #include "tests/Test.h"
- static void add_five(int* x) {
- *x += 5;
- }
- DEF_TEST(SkOnce_Singlethreaded, r) {
- int x = 0;
- // No matter how many times we do this, x will be 5.
- SkOnce once;
- once(add_five, &x);
- once(add_five, &x);
- once(add_five, &x);
- once(add_five, &x);
- once(add_five, &x);
- REPORTER_ASSERT(r, 5 == x);
- }
- DEF_TEST(SkOnce_Multithreaded, r) {
- int x = 0;
- // Run a bunch of tasks to be the first to add six to x.
- SkOnce once;
- SkTaskGroup().batch(1021, [&](int) {
- once([&] { x += 6; });
- });
- // Only one should have done the +=.
- REPORTER_ASSERT(r, 6 == x);
- }
- static int gX = 0;
- static void inc_gX() { gX++; }
- DEF_TEST(SkOnce_NoArg, r) {
- SkOnce once;
- once(inc_gX);
- once(inc_gX);
- once(inc_gX);
- REPORTER_ASSERT(r, 1 == gX);
- }
|