1410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com/* 2410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com * Copyright 2011 Google Inc. 3410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com * 4410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com * Use of this source code is governed by a BSD-style license that can be 5410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com * found in the LICENSE file. 6410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com */ 7f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 81b24933e52f50773de29332387a12721811f3012mtklein#include "SkMutex.h" 9bcfd511eb1aada39622116fd1df8178b58650fbaherb#include "SkSharedMutex.h" 10bcfd511eb1aada39622116fd1df8178b58650fbaherb#include "SkSpinlock.h" 11bcfd511eb1aada39622116fd1df8178b58650fbaherb#include "SkString.h" 12410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com 13bcfd511eb1aada39622116fd1df8178b58650fbaherbtemplate <typename Mutex> 14f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass MutexBench : public Benchmark { 15410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.compublic: 16bcfd511eb1aada39622116fd1df8178b58650fbaherb MutexBench(SkString benchPrefix) : fBenchName(benchPrefix += "UncontendedBenchmark") { } 1736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool isSuitableFor(Backend backend) override { 18644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org return backend == kNonRendering_Backend; 19410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com } 20644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org 21410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.comprotected: 22f059900f75639f1b1a03f2c25333ef9aa22d58b8mtklein const char* onGetName() override { 23bcfd511eb1aada39622116fd1df8178b58650fbaherb return fBenchName.c_str(); 24410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com } 25410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com 26a1ebeb25e9acfcd801e089e063311d716b83b8a5mtklein void onDraw(int loops, SkCanvas*) override { 273361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 28a16e8bcef165aabb2463339e80fdd6f1fa19b8b9mtklein fMu.acquire(); 29a16e8bcef165aabb2463339e80fdd6f1fa19b8b9mtklein fMu.release(); 30410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com } 31410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com } 32410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com 33410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.comprivate: 34f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 35bcfd511eb1aada39622116fd1df8178b58650fbaherb SkString fBenchName; 36a16e8bcef165aabb2463339e80fdd6f1fa19b8b9mtklein Mutex fMu; 37410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com}; 38410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com 39d32087a613fde2623bbe0abfe551164fdf3d633eherbclass SharedBench : public Benchmark { 40d32087a613fde2623bbe0abfe551164fdf3d633eherbpublic: 41d32087a613fde2623bbe0abfe551164fdf3d633eherb bool isSuitableFor(Backend backend) override { 42d32087a613fde2623bbe0abfe551164fdf3d633eherb return backend == kNonRendering_Backend; 43d32087a613fde2623bbe0abfe551164fdf3d633eherb } 44d32087a613fde2623bbe0abfe551164fdf3d633eherb 45d32087a613fde2623bbe0abfe551164fdf3d633eherbprotected: 46d32087a613fde2623bbe0abfe551164fdf3d633eherb const char* onGetName() override { 47d32087a613fde2623bbe0abfe551164fdf3d633eherb return "SkSharedMutexSharedUncontendedBenchmark"; 48d32087a613fde2623bbe0abfe551164fdf3d633eherb } 49d32087a613fde2623bbe0abfe551164fdf3d633eherb 50a1ebeb25e9acfcd801e089e063311d716b83b8a5mtklein void onDraw(int loops, SkCanvas*) override { 51d32087a613fde2623bbe0abfe551164fdf3d633eherb for (int i = 0; i < loops; i++) { 52a16e8bcef165aabb2463339e80fdd6f1fa19b8b9mtklein fMu.acquireShared(); 53a16e8bcef165aabb2463339e80fdd6f1fa19b8b9mtklein fMu.releaseShared(); 54d32087a613fde2623bbe0abfe551164fdf3d633eherb } 55d32087a613fde2623bbe0abfe551164fdf3d633eherb } 56d32087a613fde2623bbe0abfe551164fdf3d633eherb 57d32087a613fde2623bbe0abfe551164fdf3d633eherbprivate: 58d32087a613fde2623bbe0abfe551164fdf3d633eherb typedef Benchmark INHERITED; 59a16e8bcef165aabb2463339e80fdd6f1fa19b8b9mtklein SkSharedMutex fMu; 60d32087a613fde2623bbe0abfe551164fdf3d633eherb}; 61d32087a613fde2623bbe0abfe551164fdf3d633eherb 62410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com/////////////////////////////////////////////////////////////////////////////// 63410e9dc9aa3a79a19e708cad2f254a9e64891c80tomhudson@google.com 64bcfd511eb1aada39622116fd1df8178b58650fbaherbDEF_BENCH( return new MutexBench<SkSharedMutex>(SkString("SkSharedMutex")); ) 65bcfd511eb1aada39622116fd1df8178b58650fbaherbDEF_BENCH( return new MutexBench<SkMutex>(SkString("SkMutex")); ) 66bcfd511eb1aada39622116fd1df8178b58650fbaherbDEF_BENCH( return new MutexBench<SkSpinlock>(SkString("SkSpinlock")); ) 67d32087a613fde2623bbe0abfe551164fdf3d633eherbDEF_BENCH( return new SharedBench; ) 68