123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /*
- * 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 "src/core/SkSharedMutex.h"
- #include "src/core/SkTaskGroup.h"
- #include "tests/Test.h"
- DEF_TEST(SkSharedMutexBasic, r) {
- SkSharedMutex sm;
- sm.acquire();
- sm.assertHeld();
- sm.release();
- sm.acquireShared();
- sm.assertHeldShared();
- sm.releaseShared();
- }
- DEF_TEST(SkSharedMutexMultiThreaded, r) {
- SkSharedMutex sm;
- static const int kSharedSize = 10;
- int shared[kSharedSize];
- int value = 0;
- for (int i = 0; i < kSharedSize; ++i) {
- shared[i] = 0;
- }
- SkTaskGroup().batch(8, [&](int threadIndex) {
- if (threadIndex % 4 != 0) {
- for (int c = 0; c < 100000; ++c) {
- sm.acquireShared();
- sm.assertHeldShared();
- int v = shared[0];
- for (int i = 1; i < kSharedSize; ++i) {
- REPORTER_ASSERT(r, v == shared[i]);
- }
- sm.releaseShared();
- }
- } else {
- for (int c = 0; c < 100000; ++c) {
- sm.acquire();
- sm.assertHeld();
- value += 1;
- for (int i = 0; i < kSharedSize; ++i) {
- shared[i] = value;
- }
- sm.release();
- }
- }
- });
- }
|