blob: bfdff5cbcc4b8ff11ce41f9515cbfaa2b96a6e92 [file] [log] [blame]
reed@google.comc117cba2013-06-03 16:54:10 +00001/*
2 * Copyright 2013 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
8#include "SkBenchmark.h"
9#include "SkCanvas.h"
10#include "SkUtils.h"
11#include "SkString.h"
12
13class MemsetBench : public SkBenchmark {
14 SkString fName;
15
16protected:
17 size_t fMinSize;
18 size_t fMaxSize;
19 enum {
reed@google.comc117cba2013-06-03 16:54:10 +000020 kBufferSize = 10000,
21 VALUE32 = 0x12345678,
22 VALUE16 = 0x1234
23 };
24
25 enum MemsetType {
26 MEMSET16 = 16,
27 MEMSET32 = 32
28 };
29
30public:
mtklein@google.com410e6e82013-09-13 19:52:27 +000031 MemsetBench(MemsetType type, size_t minSize, size_t maxSize) {
reed@google.comc117cba2013-06-03 16:54:10 +000032 SkASSERT((minSize < maxSize) && (maxSize <= kBufferSize));
33 fMinSize = minSize;
34 fMaxSize = maxSize;
35 fName.printf("memset%d_" SK_SIZE_T_SPECIFIER "_" SK_SIZE_T_SPECIFIER,
36 type, minSize, maxSize);
commit-bot@chromium.org644629c2013-11-21 06:21:58 +000037 }
38
39 virtual bool isSuitableFor(Backend backend) SK_OVERRIDE {
40 return backend == kNonRendering_Backend;
reed@google.comc117cba2013-06-03 16:54:10 +000041 }
42
43 virtual void performTest() = 0;
44
45protected:
46 virtual const char* onGetName() SK_OVERRIDE {
47 return fName.c_str();
48 }
49
commit-bot@chromium.org33614712013-12-03 18:17:16 +000050 virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
51 for (int i = 0; i < loops; ++i) {
reed@google.comc117cba2013-06-03 16:54:10 +000052 this->performTest();
53 }
54 }
55
56private:
57 typedef SkBenchmark INHERITED;
58};
59
60class Memset32Bench : public MemsetBench {
61 uint32_t kBuffer[kBufferSize + 3];
62public:
mtklein@google.com410e6e82013-09-13 19:52:27 +000063 Memset32Bench(size_t minSize, size_t maxSize)
64 : INHERITED(MEMSET32, minSize, maxSize) {}
reed@google.comc117cba2013-06-03 16:54:10 +000065
66protected:
robertphillips@google.com59ce1372013-06-03 17:29:58 +000067 virtual void performTest() SK_OVERRIDE {
reed@google.comc117cba2013-06-03 16:54:10 +000068 for(size_t j = fMinSize; j < fMaxSize; ++j){
69 sk_memset32(kBuffer, VALUE32, j);
70 sk_memset32(kBuffer + 1, VALUE32, j);
71 sk_memset32(kBuffer + 2, VALUE32, j);
72 sk_memset32(kBuffer + 3, VALUE32, j);
73 }
74 }
75private:
76 typedef MemsetBench INHERITED;
77};
78
79class Memset16Bench : public MemsetBench {
80 uint16_t kBuffer[kBufferSize + 7];
81public:
mtklein@google.com410e6e82013-09-13 19:52:27 +000082 Memset16Bench(size_t minSize, size_t maxSize)
83 : INHERITED(MEMSET16, minSize, maxSize) {}
reed@google.comc117cba2013-06-03 16:54:10 +000084
85protected:
robertphillips@google.com59ce1372013-06-03 17:29:58 +000086 virtual void performTest() SK_OVERRIDE {
reed@google.comc117cba2013-06-03 16:54:10 +000087 for(size_t j = fMinSize; j < fMaxSize; ++j){
88 sk_memset16(kBuffer, VALUE16, j);
89 sk_memset16(kBuffer + 1, VALUE16, j);
90 sk_memset16(kBuffer + 2, VALUE16, j);
91 sk_memset16(kBuffer + 3, VALUE16, j);
92 sk_memset16(kBuffer + 4, VALUE16, j);
93 sk_memset16(kBuffer + 5, VALUE16, j);
94 sk_memset16(kBuffer + 6, VALUE16, j);
95 sk_memset16(kBuffer + 7, VALUE16, j);
96 }
97 }
98private:
99 typedef MemsetBench INHERITED;
100};
101
mtklein@google.com410e6e82013-09-13 19:52:27 +0000102DEF_BENCH(return new Memset32Bench(1, 600);)
103DEF_BENCH(return new Memset32Bench(600, 800);)
104DEF_BENCH(return new Memset32Bench(800, 1000);)
105DEF_BENCH(return new Memset32Bench(1000, 2000);)
106DEF_BENCH(return new Memset32Bench(2000, 3000);)
107DEF_BENCH(return new Memset32Bench(3000, 4000);)
108DEF_BENCH(return new Memset32Bench(4000, 5000);)
reed@google.comc117cba2013-06-03 16:54:10 +0000109
mtklein@google.com410e6e82013-09-13 19:52:27 +0000110DEF_BENCH(return new Memset16Bench(1, 600);)
111DEF_BENCH(return new Memset16Bench(600, 800);)
112DEF_BENCH(return new Memset16Bench(800, 1000);)
113DEF_BENCH(return new Memset16Bench(1000, 2000);)
114DEF_BENCH(return new Memset16Bench(2000, 3000);)
115DEF_BENCH(return new Memset16Bench(3000, 4000);)
116DEF_BENCH(return new Memset16Bench(4000, 5000);)