123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /*
- * 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 "bench/Benchmark.h"
- #include "include/core/SkRefCnt.h"
- #include "include/private/SkWeakRefCnt.h"
- #include <memory>
- #include <new>
- enum {
- M = 2
- };
- class RefCntBench_Stack : public Benchmark {
- public:
- bool isSuitableFor(Backend backend) override {
- return backend == kNonRendering_Backend;
- }
- protected:
- const char* onGetName() override {
- return "ref_cnt_stack";
- }
- void onDraw(int loops, SkCanvas*) override {
- 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:
- 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:
- const char* onGetName() override {
- return "ref_cnt_heap";
- }
- void onDraw(int loops, SkCanvas*) override {
- 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:
- const char* onGetName() override {
- return "ref_cnt_new";
- }
- void onDraw(int loops, SkCanvas*) override {
- 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:
- const char* onGetName() override {
- return "ref_cnt_stack_weak";
- }
- void onDraw(int loops, SkCanvas*) override {
- 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(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(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 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(); )
|