blob: 49f01abfe4a512259068d80a80e97fa0e208fc06 [file] [log] [blame]
herbc782b2a2015-06-29 13:46:55 -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 "SkSharedMutex.h"
9#include "SkTaskGroup.h"
10
11#include "Test.h"
12
13DEF_TEST(SkSharedMutexBasic, r) {
14 SkSharedMutex sm;
15 sm.acquire();
16 sm.release();
17 sm.acquireShared();
18 sm.releaseShared();
19}
20
21DEF_TEST(SkSharedMutexMultiThreaded, r) {
22 SkSharedMutex sm;
23 static const int kSharedSize = 10;
24 int shared[kSharedSize];
25 int value = 0;
26 for (int i = 0; i < kSharedSize; ++i) {
27 shared[i] = 0;
28 }
29 sk_parallel_for(8, [&](int threadIndex) {
30 if (threadIndex % 4 != 0) {
31 for (int c = 0; c < 100000; ++c) {
32 sm.acquireShared();
33 int v = shared[0];
34 for (int i = 1; i < kSharedSize; ++i) {
35 REPORTER_ASSERT(r, v == shared[i]);
36 }
37 sm.releaseShared();
38 }
39 } else {
40 for (int c = 0; c < 100000; ++c) {
41 sm.acquire();
42 value += 1;
43 for (int i = 0; i < kSharedSize; ++i) {
44 shared[i] = value;
45 }
46 sm.release();
47 }
48 }
49 });
50}