2015-09-04 17:26:27 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2015 Google Inc.
|
|
|
|
*
|
|
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
|
|
* found in the LICENSE file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "Test.h"
|
|
|
|
#include "SkOncePtr.h"
|
|
|
|
#include "SkTaskGroup.h"
|
|
|
|
|
2016-05-02 14:19:41 +00:00
|
|
|
SK_DECLARE_STATIC_ONCE_PTR(int, once);
|
2015-09-04 17:26:27 +00:00
|
|
|
|
2016-05-02 14:19:41 +00:00
|
|
|
DEF_TEST(OncePtr, r) {
|
2015-09-04 17:26:27 +00:00
|
|
|
static SkAtomic<int> calls(0);
|
|
|
|
auto create = [&] {
|
|
|
|
calls.fetch_add(1);
|
|
|
|
return new int(5);
|
|
|
|
};
|
|
|
|
|
2016-01-05 03:13:19 +00:00
|
|
|
SkTaskGroup().batch(sk_num_cores()*4, [&](size_t) {
|
2015-09-04 17:26:27 +00:00
|
|
|
int* n = once.get(create);
|
|
|
|
REPORTER_ASSERT(r, *n == 5);
|
|
|
|
});
|
|
|
|
REPORTER_ASSERT(r, calls.load() == 1);
|
|
|
|
}
|