blob: e0390bba38d21ac835a9e6befe659ff7bfde9615 [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
tfarinaf168b862014-06-19 12:32:29 -07008#include "Benchmark.h"
reed@google.comc117cba2013-06-03 16:54:10 +00009#include "SkCanvas.h"
reed@google.comc117cba2013-06-03 16:54:10 +000010#include "SkString.h"
tfarinaf168b862014-06-19 12:32:29 -070011#include "SkUtils.h"
reed@google.comc117cba2013-06-03 16:54:10 +000012
tfarinaf168b862014-06-19 12:32:29 -070013class MemsetBench : public Benchmark {
reed@google.comc117cba2013-06-03 16:54:10 +000014 SkString fName;
15
16protected:
bsalomon0aa5cea2014-12-15 09:13:35 -080017 int fMinSize;
18 int fMaxSize;
reed@google.comc117cba2013-06-03 16:54:10 +000019 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:
bsalomon0aa5cea2014-12-15 09:13:35 -080031 MemsetBench(MemsetType type, int minSize, int maxSize) {
reed@google.comc117cba2013-06-03 16:54:10 +000032 SkASSERT((minSize < maxSize) && (maxSize <= kBufferSize));
33 fMinSize = minSize;
34 fMaxSize = maxSize;
bsalomon0aa5cea2014-12-15 09:13:35 -080035 fName.printf("memset%d_%d_%d", type, minSize, maxSize);
commit-bot@chromium.org644629c2013-11-21 06:21:58 +000036 }
37
mtklein36352bf2015-03-25 18:17:31 -070038 bool isSuitableFor(Backend backend) override {
commit-bot@chromium.org644629c2013-11-21 06:21:58 +000039 return backend == kNonRendering_Backend;
reed@google.comc117cba2013-06-03 16:54:10 +000040 }
41
42 virtual void performTest() = 0;
43
44protected:
mtklein36352bf2015-03-25 18:17:31 -070045 const char* onGetName() override {
reed@google.comc117cba2013-06-03 16:54:10 +000046 return fName.c_str();
47 }
48
mtklein36352bf2015-03-25 18:17:31 -070049 void onDraw(const int loops, SkCanvas* canvas) override {
commit-bot@chromium.org33614712013-12-03 18:17:16 +000050 for (int i = 0; i < loops; ++i) {
reed@google.comc117cba2013-06-03 16:54:10 +000051 this->performTest();
52 }
53 }
54
55private:
tfarinaf168b862014-06-19 12:32:29 -070056 typedef Benchmark INHERITED;
reed@google.comc117cba2013-06-03 16:54:10 +000057};
58
59class Memset32Bench : public MemsetBench {
60 uint32_t kBuffer[kBufferSize + 3];
61public:
bsalomon0aa5cea2014-12-15 09:13:35 -080062 Memset32Bench(int minSize, int maxSize)
mtklein@google.com410e6e82013-09-13 19:52:27 +000063 : INHERITED(MEMSET32, minSize, maxSize) {}
reed@google.comc117cba2013-06-03 16:54:10 +000064
65protected:
mtklein36352bf2015-03-25 18:17:31 -070066 void performTest() override {
bsalomon0aa5cea2014-12-15 09:13:35 -080067 for(int j = fMinSize; j < fMaxSize; ++j){
reed@google.comc117cba2013-06-03 16:54:10 +000068 sk_memset32(kBuffer, VALUE32, j);
69 sk_memset32(kBuffer + 1, VALUE32, j);
70 sk_memset32(kBuffer + 2, VALUE32, j);
71 sk_memset32(kBuffer + 3, VALUE32, j);
72 }
73 }
74private:
75 typedef MemsetBench INHERITED;
76};
77
78class Memset16Bench : public MemsetBench {
79 uint16_t kBuffer[kBufferSize + 7];
80public:
bsalomon0aa5cea2014-12-15 09:13:35 -080081 Memset16Bench(int minSize, int maxSize)
mtklein@google.com410e6e82013-09-13 19:52:27 +000082 : INHERITED(MEMSET16, minSize, maxSize) {}
reed@google.comc117cba2013-06-03 16:54:10 +000083
84protected:
mtklein36352bf2015-03-25 18:17:31 -070085 void performTest() override {
bsalomon0aa5cea2014-12-15 09:13:35 -080086 for(int j = fMinSize; j < fMaxSize; ++j){
reed@google.comc117cba2013-06-03 16:54:10 +000087 sk_memset16(kBuffer, VALUE16, j);
88 sk_memset16(kBuffer + 1, VALUE16, j);
89 sk_memset16(kBuffer + 2, VALUE16, j);
90 sk_memset16(kBuffer + 3, VALUE16, j);
91 sk_memset16(kBuffer + 4, VALUE16, j);
92 sk_memset16(kBuffer + 5, VALUE16, j);
93 sk_memset16(kBuffer + 6, VALUE16, j);
94 sk_memset16(kBuffer + 7, VALUE16, j);
95 }
96 }
97private:
98 typedef MemsetBench INHERITED;
99};
100
mtklein@google.com410e6e82013-09-13 19:52:27 +0000101DEF_BENCH(return new Memset32Bench(1, 600);)
102DEF_BENCH(return new Memset32Bench(600, 800);)
103DEF_BENCH(return new Memset32Bench(800, 1000);)
104DEF_BENCH(return new Memset32Bench(1000, 2000);)
105DEF_BENCH(return new Memset32Bench(2000, 3000);)
106DEF_BENCH(return new Memset32Bench(3000, 4000);)
107DEF_BENCH(return new Memset32Bench(4000, 5000);)
reed@google.comc117cba2013-06-03 16:54:10 +0000108
mtklein@google.com410e6e82013-09-13 19:52:27 +0000109DEF_BENCH(return new Memset16Bench(1, 600);)
110DEF_BENCH(return new Memset16Bench(600, 800);)
111DEF_BENCH(return new Memset16Bench(800, 1000);)
112DEF_BENCH(return new Memset16Bench(1000, 2000);)
113DEF_BENCH(return new Memset16Bench(2000, 3000);)
114DEF_BENCH(return new Memset16Bench(3000, 4000);)
115DEF_BENCH(return new Memset16Bench(4000, 5000);)