12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "bench/Benchmark.h"
- #include "include/core/SkString.h"
- #include "include/private/SkMutex.h"
- #include "include/private/SkSpinlock.h"
- #include "src/core/SkSharedMutex.h"
- template <typename Mutex>
- class MutexBench : public Benchmark {
- public:
- MutexBench(SkString benchPrefix) : fBenchName(benchPrefix += "UncontendedBenchmark") { }
- bool isSuitableFor(Backend backend) override {
- return backend == kNonRendering_Backend;
- }
- protected:
- const char* onGetName() override {
- return fBenchName.c_str();
- }
- void onDraw(int loops, SkCanvas*) override {
- for (int i = 0; i < loops; i++) {
- fMu.acquire();
- fMu.release();
- }
- }
- private:
- typedef Benchmark INHERITED;
- SkString fBenchName;
- Mutex fMu;
- };
- class SharedBench : public Benchmark {
- public:
- bool isSuitableFor(Backend backend) override {
- return backend == kNonRendering_Backend;
- }
- protected:
- const char* onGetName() override {
- return "SkSharedMutexSharedUncontendedBenchmark";
- }
- void onDraw(int loops, SkCanvas*) override {
- for (int i = 0; i < loops; i++) {
- fMu.acquireShared();
- fMu.releaseShared();
- }
- }
- private:
- typedef Benchmark INHERITED;
- SkSharedMutex fMu;
- };
- ///////////////////////////////////////////////////////////////////////////////
- DEF_BENCH( return new MutexBench<SkSharedMutex>(SkString("SkSharedMutex")); )
- DEF_BENCH( return new MutexBench<SkMutex>(SkString("SkMutex")); )
- DEF_BENCH( return new MutexBench<SkSpinlock>(SkString("SkSpinlock")); )
- DEF_BENCH( return new SharedBench; )
|