blob: 44fb648f4e00cfaafad11b67acb43fe22a95a185 [file] [log] [blame]
bungeman@google.com55487522012-05-14 14:09:24 +00001/*
2 * Copyright 2012 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 "SkBenchmark.h"
8#include "SkThread.h"
9#include <memory>
10
11enum {
12 N = SkBENCHLOOP(1000000),
13 M = SkBENCHLOOP(2)
14};
15
16class RefCntBench_Stack : public SkBenchmark {
17public:
18 RefCntBench_Stack(void* param) : INHERITED(param) {
19 }
20protected:
21 virtual const char* onGetName() {
22 return "ref_cnt_stack";
23 }
24
25 virtual void onDraw(SkCanvas* canvas) {
26 for (int i = 0; i < N; ++i) {
27 SkRefCnt ref;
28 for (int j = 0; j < M; ++j) {
29 ref.ref();
30 ref.unref();
31 }
32 }
33 }
34
35private:
36 typedef SkBenchmark INHERITED;
37};
38
39class PlacedRefCnt : public SkRefCnt {
40public:
41 PlacedRefCnt() : SkRefCnt() { }
42 void operator delete(void *p) { }
43};
44
45class RefCntBench_Heap : public SkBenchmark {
46public:
47 RefCntBench_Heap(void* param) : INHERITED(param) {
48 }
49protected:
50 virtual const char* onGetName() {
51 return "ref_cnt_heap";
52 }
53
54 virtual void onDraw(SkCanvas* canvas) {
55 char memory[sizeof(PlacedRefCnt)];
56 for (int i = 0; i < N; ++i) {
57 PlacedRefCnt* ref = new (memory) PlacedRefCnt();
58 for (int j = 0; j < M; ++j) {
59 ref->ref();
60 ref->unref();
61 }
62 ref->unref();
63 }
64 }
65
66private:
67 typedef SkBenchmark INHERITED;
68};
69
70///////////////////////////////////////////////////////////////////////////////
71
72static SkBenchmark* Fact0(void* p) { return new RefCntBench_Stack(p); }
73static SkBenchmark* Fact1(void* p) { return new RefCntBench_Heap(p); }
74
75static BenchRegistry gReg01(Fact0);
76static BenchRegistry gReg02(Fact1);
77