Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

252 lines (207 sloc) 5.715 kb
/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <memory>
#include "Benchmark.h"
#include "SkRefCnt.h"
#include "SkThread.h"
#include "SkWeakRefCnt.h"
enum {
M = 2
};
class AtomicInc32 : public Benchmark {
public:
AtomicInc32() : fX(0) {}
bool isSuitableFor(Backend backend) 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) {}
bool isSuitableFor(Backend backend) 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:
bool isSuitableFor(Backend backend) override {
return backend == kNonRendering_Backend;
}
protected:
virtual const char* onGetName() {
return "ref_cnt_stack";
}
virtual void onDraw(const int loops, SkCanvas*) {
for (int i = 0; i < loops; ++i) {
SkRefCnt ref;
for (int j = 0; j < M; ++j) {
ref.ref();
ref.unref();
}
}
}
private:
typedef Benchmark INHERITED;
};
class PlacedRefCnt : public SkRefCnt {
public:
SK_DECLARE_INST_COUNT(PlacedRefCnt)
PlacedRefCnt() : SkRefCnt() { }
void operator delete(void*) { }
private:
typedef SkRefCnt INHERITED;
};
class RefCntBench_Heap : public Benchmark {
public:
bool isSuitableFor(Backend backend) override {
return backend == kNonRendering_Backend;
}
protected:
virtual const char* onGetName() {
return "ref_cnt_heap";
}
virtual void onDraw(const int loops, SkCanvas*) {
char memory[sizeof(PlacedRefCnt)];
for (int i = 0; i < loops; ++i) {
PlacedRefCnt* ref = new (memory) PlacedRefCnt();
for (int j = 0; j < M; ++j) {
ref->ref();
ref->unref();
}
ref->unref();
}
}
private:
typedef Benchmark INHERITED;
};
class RefCntBench_New : public Benchmark {
public:
bool isSuitableFor(Backend backend) override {
return backend == kNonRendering_Backend;
}
protected:
virtual const char* onGetName() {
return "ref_cnt_new";
}
virtual void onDraw(const int loops, SkCanvas*) {
for (int i = 0; i < loops; ++i) {
SkRefCnt* ref = new SkRefCnt();
for (int j = 0; j < M; ++j) {
ref->ref();
ref->unref();
}
ref->unref();
}
}
private:
typedef Benchmark INHERITED;
};
///////////////////////////////////////////////////////////////////////////////
class WeakRefCntBench_Stack : public Benchmark {
public:
bool isSuitableFor(Backend backend) override {
return backend == kNonRendering_Backend;
}
protected:
virtual const char* onGetName() {
return "ref_cnt_stack_weak";
}
virtual void onDraw(const int loops, SkCanvas*) {
for (int i = 0; i < loops; ++i) {
SkWeakRefCnt ref;
for (int j = 0; j < M; ++j) {
ref.ref();
ref.unref();
}
}
}
private:
typedef Benchmark INHERITED;
};
class PlacedWeakRefCnt : public SkWeakRefCnt {
public:
PlacedWeakRefCnt() : SkWeakRefCnt() { }
void operator delete(void*) { }
};
class WeakRefCntBench_Heap : public Benchmark {
public:
bool isSuitableFor(Backend backend) override {
return backend == kNonRendering_Backend;
}
protected:
const char* onGetName() override {
return "ref_cnt_heap_weak";
}
void onDraw(const int loops, SkCanvas*) override {
char memory[sizeof(PlacedWeakRefCnt)];
for (int i = 0; i < loops; ++i) {
PlacedWeakRefCnt* ref = new (memory) PlacedWeakRefCnt();
for (int j = 0; j < M; ++j) {
ref->ref();
ref->unref();
}
ref->unref();
}
}
private:
typedef Benchmark INHERITED;
};
class WeakRefCntBench_New : public Benchmark {
public:
bool isSuitableFor(Backend backend) override {
return backend == kNonRendering_Backend;
}
protected:
const char* onGetName() override {
return "ref_cnt_new_weak";
}
void onDraw(const int loops, SkCanvas*) override {
for (int i = 0; i < loops; ++i) {
SkWeakRefCnt* ref = new SkWeakRefCnt();
for (int j = 0; j < M; ++j) {
ref->ref();
ref->unref();
}
ref->unref();
}
}
private:
typedef Benchmark INHERITED;
};
///////////////////////////////////////////////////////////////////////////////
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(); )
DEF_BENCH( return new WeakRefCntBench_Stack(); )
DEF_BENCH( return new WeakRefCntBench_Heap(); )
DEF_BENCH( return new WeakRefCntBench_New(); )
Jump to Line
Something went wrong with that request. Please try again.