MutexBench.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright 2011 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. #include "bench/Benchmark.h"
  8. #include "include/core/SkString.h"
  9. #include "include/private/SkMutex.h"
  10. #include "include/private/SkSpinlock.h"
  11. #include "src/core/SkSharedMutex.h"
  12. template <typename Mutex>
  13. class MutexBench : public Benchmark {
  14. public:
  15. MutexBench(SkString benchPrefix) : fBenchName(benchPrefix += "UncontendedBenchmark") { }
  16. bool isSuitableFor(Backend backend) override {
  17. return backend == kNonRendering_Backend;
  18. }
  19. protected:
  20. const char* onGetName() override {
  21. return fBenchName.c_str();
  22. }
  23. void onDraw(int loops, SkCanvas*) override {
  24. for (int i = 0; i < loops; i++) {
  25. fMu.acquire();
  26. fMu.release();
  27. }
  28. }
  29. private:
  30. typedef Benchmark INHERITED;
  31. SkString fBenchName;
  32. Mutex fMu;
  33. };
  34. class SharedBench : public Benchmark {
  35. public:
  36. bool isSuitableFor(Backend backend) override {
  37. return backend == kNonRendering_Backend;
  38. }
  39. protected:
  40. const char* onGetName() override {
  41. return "SkSharedMutexSharedUncontendedBenchmark";
  42. }
  43. void onDraw(int loops, SkCanvas*) override {
  44. for (int i = 0; i < loops; i++) {
  45. fMu.acquireShared();
  46. fMu.releaseShared();
  47. }
  48. }
  49. private:
  50. typedef Benchmark INHERITED;
  51. SkSharedMutex fMu;
  52. };
  53. ///////////////////////////////////////////////////////////////////////////////
  54. DEF_BENCH( return new MutexBench<SkSharedMutex>(SkString("SkSharedMutex")); )
  55. DEF_BENCH( return new MutexBench<SkMutex>(SkString("SkMutex")); )
  56. DEF_BENCH( return new MutexBench<SkSpinlock>(SkString("SkSpinlock")); )
  57. DEF_BENCH( return new SharedBench; )