Home | History | Annotate | Download | only in tests
      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 
     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