1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2015 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSharedMutex.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTaskGroup.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Test.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_TEST(SkSharedMutexBasic, r) { 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkSharedMutex sm; 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.acquire(); 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.assertHeld(); 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.release(); 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.acquireShared(); 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.assertHeldShared(); 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.releaseShared(); 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_TEST(SkSharedMutexMultiThreaded, r) { 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkSharedMutex sm; 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const int kSharedSize = 10; 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int shared[kSharedSize]; 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int value = 0; 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < kSharedSize; ++i) { 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot shared[i] = 0; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTaskGroup().batch(8, [&](int threadIndex) { 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (threadIndex % 4 != 0) { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int c = 0; c < 100000; ++c) { 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.acquireShared(); 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.assertHeldShared(); 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int v = shared[0]; 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 1; i < kSharedSize; ++i) { 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(r, v == shared[i]); 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.releaseShared(); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } else { 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int c = 0; c < 100000; ++c) { 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.acquire(); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.assertHeld(); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot value += 1; 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < kSharedSize; ++i) { 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot shared[i] = value; 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sm.release(); 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 55