aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/RefCntBench.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2014-07-11 08:42:11 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-07-11 08:42:11 -0700
commit00a8fae0cee239181c9e4fc7775b01b661c72f5e (patch)
treecb3778dd87a7b65d1cfa6e33424074e621b60dc0 /bench/RefCntBench.cpp
parentd08cb905a7cc80d8fb868bbd14fffe1cd68adcce (diff)
Add support for 64bit atomic inc/dec/cas
R=mtklein@google.com Author: bsalomon@google.com Review URL: https://codereview.chromium.org/377073002
Diffstat (limited to 'bench/RefCntBench.cpp')
-rw-r--r--bench/RefCntBench.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/bench/RefCntBench.cpp b/bench/RefCntBench.cpp
index 351513b831..f846b1ac60 100644
--- a/bench/RefCntBench.cpp
+++ b/bench/RefCntBench.cpp
@@ -14,6 +14,54 @@ enum {
M = 2
};
+class AtomicInc32 : public Benchmark {
+public:
+ AtomicInc32() : fX(0) {}
+
+ virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
+ return backend == kNonRendering_Backend;
+ }
+
+protected:
+ virtual const char* onGetName() {
+ return "atomic_inc_32";
+ }
+
+ virtual void onDraw(const int loops, SkCanvas*) {
+ for (int i = 0; i < loops; ++i) {
+ sk_atomic_inc(&fX);
+ }
+ }
+
+private:
+ int32_t fX;
+ typedef Benchmark INHERITED;
+};
+
+class AtomicInc64 : public Benchmark {
+public:
+ AtomicInc64() : fX(0) {}
+
+ virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
+ return backend == kNonRendering_Backend;
+ }
+
+protected:
+ virtual const char* onGetName() {
+ return "atomic_inc_64";
+ }
+
+ virtual void onDraw(const int loops, SkCanvas*) {
+ for (int i = 0; i < loops; ++i) {
+ sk_atomic_inc(&fX);
+ }
+ }
+
+private:
+ int64_t fX;
+ typedef Benchmark INHERITED;
+};
+
class RefCntBench_Stack : public Benchmark {
public:
virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
@@ -191,6 +239,9 @@ private:
///////////////////////////////////////////////////////////////////////////////
+DEF_BENCH( return new AtomicInc32(); )
+DEF_BENCH( return new AtomicInc64(); )
+
DEF_BENCH( return new RefCntBench_Stack(); )
DEF_BENCH( return new RefCntBench_Heap(); )
DEF_BENCH( return new RefCntBench_New(); )