1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2011 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci#include "bench/Benchmark.h" 8cb93a386Sopenharmony_ci#include "include/core/SkString.h" 9cb93a386Sopenharmony_ci#include "include/private/SkMutex.h" 10cb93a386Sopenharmony_ci#include "include/private/SkSpinlock.h" 11cb93a386Sopenharmony_ci#include "src/core/SkSharedMutex.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_citemplate <typename Mutex> 14cb93a386Sopenharmony_ciclass MutexBench : public Benchmark { 15cb93a386Sopenharmony_cipublic: 16cb93a386Sopenharmony_ci MutexBench(SkString benchPrefix) : fBenchName(benchPrefix += "UncontendedBenchmark") { } 17cb93a386Sopenharmony_ci bool isSuitableFor(Backend backend) override { 18cb93a386Sopenharmony_ci return backend == kNonRendering_Backend; 19cb93a386Sopenharmony_ci } 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ciprotected: 22cb93a386Sopenharmony_ci const char* onGetName() override { 23cb93a386Sopenharmony_ci return fBenchName.c_str(); 24cb93a386Sopenharmony_ci } 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ci void onDraw(int loops, SkCanvas*) override { 27cb93a386Sopenharmony_ci for (int i = 0; i < loops; i++) { 28cb93a386Sopenharmony_ci fMu.acquire(); 29cb93a386Sopenharmony_ci fMu.release(); 30cb93a386Sopenharmony_ci } 31cb93a386Sopenharmony_ci } 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ciprivate: 34cb93a386Sopenharmony_ci using INHERITED = Benchmark; 35cb93a386Sopenharmony_ci SkString fBenchName; 36cb93a386Sopenharmony_ci Mutex fMu; 37cb93a386Sopenharmony_ci}; 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ciclass SharedBench : public Benchmark { 40cb93a386Sopenharmony_cipublic: 41cb93a386Sopenharmony_ci bool isSuitableFor(Backend backend) override { 42cb93a386Sopenharmony_ci return backend == kNonRendering_Backend; 43cb93a386Sopenharmony_ci } 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ciprotected: 46cb93a386Sopenharmony_ci const char* onGetName() override { 47cb93a386Sopenharmony_ci return "SkSharedMutexSharedUncontendedBenchmark"; 48cb93a386Sopenharmony_ci } 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci void onDraw(int loops, SkCanvas*) override { 51cb93a386Sopenharmony_ci for (int i = 0; i < loops; i++) { 52cb93a386Sopenharmony_ci fMu.acquireShared(); 53cb93a386Sopenharmony_ci fMu.releaseShared(); 54cb93a386Sopenharmony_ci } 55cb93a386Sopenharmony_ci } 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ciprivate: 58cb93a386Sopenharmony_ci using INHERITED = Benchmark; 59cb93a386Sopenharmony_ci SkSharedMutex fMu; 60cb93a386Sopenharmony_ci}; 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ci/////////////////////////////////////////////////////////////////////////////// 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ciDEF_BENCH( return new MutexBench<SkSharedMutex>(SkString("SkSharedMutex")); ) 65cb93a386Sopenharmony_ciDEF_BENCH( return new MutexBench<SkMutex>(SkString("SkMutex")); ) 66cb93a386Sopenharmony_ciDEF_BENCH( return new MutexBench<SkSpinlock>(SkString("SkSpinlock")); ) 67cb93a386Sopenharmony_ciDEF_BENCH( return new SharedBench; ) 68