blob: 44fb648f4e00cfaafad11b67acb43fe22a95a185 [file] [log] [blame]
/*
* 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 "SkBenchmark.h"
#include "SkThread.h"
#include <memory>
enum {
N = SkBENCHLOOP(1000000),
M = SkBENCHLOOP(2)
};
class RefCntBench_Stack : public SkBenchmark {
public:
RefCntBench_Stack(void* param) : INHERITED(param) {
}
protected:
virtual const char* onGetName() {
return "ref_cnt_stack";
}
virtual void onDraw(SkCanvas* canvas) {
for (int i = 0; i < N; ++i) {
SkRefCnt ref;
for (int j = 0; j < M; ++j) {
ref.ref();
ref.unref();
}
}
}
private:
typedef SkBenchmark INHERITED;
};
class PlacedRefCnt : public SkRefCnt {
public:
PlacedRefCnt() : SkRefCnt() { }
void operator delete(void *p) { }
};
class RefCntBench_Heap : public SkBenchmark {
public:
RefCntBench_Heap(void* param) : INHERITED(param) {
}
protected:
virtual const char* onGetName() {
return "ref_cnt_heap";
}
virtual void onDraw(SkCanvas* canvas) {
char memory[sizeof(PlacedRefCnt)];
for (int i = 0; i < N; ++i) {
PlacedRefCnt* ref = new (memory) PlacedRefCnt();
for (int j = 0; j < M; ++j) {
ref->ref();
ref->unref();
}
ref->unref();
}
}
private:
typedef SkBenchmark INHERITED;
};
///////////////////////////////////////////////////////////////////////////////
static SkBenchmark* Fact0(void* p) { return new RefCntBench_Stack(p); }
static SkBenchmark* Fact1(void* p) { return new RefCntBench_Heap(p); }
static BenchRegistry gReg01(Fact0);
static BenchRegistry gReg02(Fact1);