blob: b346cdc963fd20e4c921e8448217b97a46ff0050 [file] [log] [blame]
reed@google.com7d683352012-12-03 21:19:52 +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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "bench/Benchmark.h"
Mike Reed46f5c5f2020-02-20 15:42:29 -05009#include "include/core/SkM44.h"
Mike Kleina121fb62020-02-26 08:25:52 -060010#include "include/core/SkString.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/utils/SkRandom.h"
reed@google.com7d683352012-12-03 21:19:52 +000012
Mike Reed403c8072020-01-08 10:40:39 -050013class M4Bench : public Benchmark {
14 SkString fName;
15public:
16 M4Bench(const char name[]) {
17 fName.printf("m4_%s", name);
18
19 SkRandom rand;
20 float value[32];
21 for (auto& v : value) {
22 v = rand.nextF();
23 }
Mike Reed3ef77dd2020-04-06 10:41:09 -040024 fM1 = SkM44::ColMajor(value + 0);
25 fM2 = SkM44::ColMajor(value + 16);
Mike Reed403c8072020-01-08 10:40:39 -050026 }
27
28 bool isSuitableFor(Backend backend) override {
29 return backend == kNonRendering_Backend;
30 }
31
32 virtual void performTest() = 0;
33
34protected:
35 SkM44 fM0, fM1, fM2;
36
37 virtual int mulLoopCount() const { return 1; }
38
39 const char* onGetName() override {
40 return fName.c_str();
41 }
42
43 void onDraw(int loops, SkCanvas*) override {
44 for (int i = 0; i < loops; i++) {
45 this->performTest();
46 }
47 }
48
49private:
50 typedef Benchmark INHERITED;
51};
52
53class M4NEQ : public M4Bench {
54public:
55 M4NEQ() : INHERITED("neq") {}
56protected:
57 void performTest() override {
58 for (int i = 0; i < 10000; ++i) {
59 fEQ = (fM2 == fM1); // should always be false
60 }
61 }
62private:
63 bool fEQ;
64 typedef M4Bench INHERITED;
65};
66
67class M4EQ : public M4Bench {
68public:
69 M4EQ() : INHERITED("eq") {}
70protected:
71 void performTest() override {
72 fM2 = fM1;
73 for (int i = 0; i < 10000; ++i) {
74 fEQ = (fM2 == fM1); // should always be true
75 }
76 }
77private:
78 bool fEQ;
79 typedef M4Bench INHERITED;
80};
81
82class M4Concat : public M4Bench {
83public:
84 M4Concat() : INHERITED("op_concat") {}
85protected:
86 void performTest() override {
87 for (int i = 0; i < 10000; ++i) {
88 fM0 = SkM44(fM1, fM2);
89 }
90 }
91private:
92 typedef M4Bench INHERITED;
93};
94
95class M4SetConcat : public M4Bench {
96public:
97 M4SetConcat() : INHERITED("set_concat") {}
98protected:
99 void performTest() override {
100 for (int i = 0; i < 10000; ++i) {
101 fM0.setConcat(fM1, fM2);
102 }
103 }
104private:
105 typedef M4Bench INHERITED;
106};
107
108DEF_BENCH( return new M4EQ(); )
109DEF_BENCH( return new M4NEQ(); )
110DEF_BENCH( return new M4Concat(); )
111DEF_BENCH( return new M4SetConcat(); )
Mike Reedc4b8eef2020-01-15 22:26:17 -0500112
113class M4_map4 : public M4Bench {
114public:
115 M4_map4() : INHERITED("map4") {}
116protected:
117 void performTest() override {
118 SkV4 v = {1, 2, 3, 4};
119 for (int i = 0; i < 100000; ++i) {
120 fV = fM0 * v;
121 }
122 }
123private:
124 SkV4 fV;
125 typedef M4Bench INHERITED;
126};
127DEF_BENCH( return new M4_map4(); )
128
129class M4_map2 : public M4Bench {
130public:
131 M4_map2() : INHERITED("map2") {}
132protected:
133 void performTest() override {
134 SkMatrix m;
135 m.setRotate(1);
136 for (int i = 0; i < 100000; ++i) {
137 fV = m.mapXY(5, 6);
138 }
139 }
140private:
141 SkPoint fV;
142 typedef M4Bench INHERITED;
143};
144DEF_BENCH( return new M4_map2(); )