blob: c2cc5a2fdd992722d54b3c40ca6427e152368fc9 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
reed@google.com3fb51872011-06-01 15:11:22 +00008#include "SkBenchmark.h"
9#include "SkMatrix.h"
commit-bot@chromium.org5b2e2642013-09-03 19:08:14 +000010#include "SkMatrixUtils.h"
tomhudson@google.com7b4e1072011-06-03 19:16:56 +000011#include "SkRandom.h"
reed@google.com3fb51872011-06-01 15:11:22 +000012#include "SkString.h"
13
14class MatrixBench : public SkBenchmark {
15 SkString fName;
reed@google.com3fb51872011-06-01 15:11:22 +000016public:
17 MatrixBench(void* param, const char name[]) : INHERITED(param) {
18 fName.printf("matrix_%s", name);
tomhudson@google.com9dc27132012-09-13 15:50:24 +000019 fIsRendering = false;
reed@google.com3fb51872011-06-01 15:11:22 +000020 }
21
22 virtual void performTest() = 0;
23
24protected:
reed@google.comcbefd7d2011-06-06 13:31:30 +000025 virtual int mulLoopCount() const { return 1; }
26
reed@google.com3fb51872011-06-01 15:11:22 +000027 virtual const char* onGetName() {
28 return fName.c_str();
29 }
30
sugoi@google.com77472f02013-03-05 18:50:01 +000031 virtual void onDraw(SkCanvas*) {
mtklein@google.comc2897432013-09-10 19:23:38 +000032 for (int i = 0; i < this->getLoops(); i++) {
reed@google.com3fb51872011-06-01 15:11:22 +000033 this->performTest();
34 }
35 }
36
37private:
38 typedef SkBenchmark INHERITED;
39};
40
41// we want to stop the compiler from eliminating code that it thinks is a no-op
42// so we have a non-static global we increment, hoping that will convince the
43// compiler to execute everything
44int gMatrixBench_NonStaticGlobal;
45
46#define always_do(pred) \
47 do { \
48 if (pred) { \
49 ++gMatrixBench_NonStaticGlobal; \
50 } \
51 } while (0)
52
53class EqualsMatrixBench : public MatrixBench {
54public:
55 EqualsMatrixBench(void* param) : INHERITED(param, "equals") {}
56protected:
57 virtual void performTest() {
58 SkMatrix m0, m1, m2;
tomhudson@google.com7b4e1072011-06-03 19:16:56 +000059
reed@google.com3fb51872011-06-01 15:11:22 +000060 m0.reset();
61 m1.reset();
62 m2.reset();
63 always_do(m0 == m1);
64 always_do(m1 == m2);
65 always_do(m2 == m0);
reed@google.com3fb51872011-06-01 15:11:22 +000066 }
67private:
68 typedef MatrixBench INHERITED;
69};
70
71class ScaleMatrixBench : public MatrixBench {
72public:
73 ScaleMatrixBench(void* param) : INHERITED(param, "scale") {
bungeman@google.com20809002011-06-08 19:38:53 +000074 fSX = fSY = SkFloatToScalar(1.5f);
reed@google.com3fb51872011-06-01 15:11:22 +000075 fM0.reset();
76 fM1.setScale(fSX, fSY);
77 fM2.setTranslate(fSX, fSY);
reed@google.com3fb51872011-06-01 15:11:22 +000078 }
79protected:
80 virtual void performTest() {
81 SkMatrix m;
82 m = fM0; m.preScale(fSX, fSY);
83 m = fM1; m.preScale(fSX, fSY);
84 m = fM2; m.preScale(fSX, fSY);
85 }
86private:
87 SkMatrix fM0, fM1, fM2;
88 SkScalar fSX, fSY;
89 typedef MatrixBench INHERITED;
90};
91
reed@google.come0dcde72011-06-06 13:20:29 +000092// having unknown values in our arrays can throw off the timing a lot, perhaps
93// handling NaN values is a lot slower. Anyway, this guy is just meant to put
94// reasonable values in our arrays.
95template <typename T> void init9(T array[9]) {
commit-bot@chromium.orge0e7cfe2013-09-09 20:09:12 +000096 SkRandom rand;
reed@google.come0dcde72011-06-06 13:20:29 +000097 for (int i = 0; i < 9; i++) {
98 array[i] = rand.nextSScalar1();
99 }
100}
101
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000102// Test the performance of setConcat() non-perspective case:
103// using floating point precision only.
104class FloatConcatMatrixBench : public MatrixBench {
105public:
reed@google.come0dcde72011-06-06 13:20:29 +0000106 FloatConcatMatrixBench(void* p) : INHERITED(p, "concat_floatfloat") {
107 init9(mya);
108 init9(myb);
109 init9(myr);
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000110 }
111protected:
reed@google.comcbefd7d2011-06-06 13:31:30 +0000112 virtual int mulLoopCount() const { return 4; }
113
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000114 static inline void muladdmul(float a, float b, float c, float d,
115 float* result) {
116 *result = a * b + c * d;
117 }
118 virtual void performTest() {
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000119 const float* a = mya;
120 const float* b = myb;
121 float* r = myr;
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000122 muladdmul(a[0], b[0], a[1], b[3], &r[0]);
123 muladdmul(a[0], b[1], a[1], b[4], &r[1]);
124 muladdmul(a[0], b[2], a[1], b[5], &r[2]);
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000125 r[2] += a[2];
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000126 muladdmul(a[3], b[0], a[4], b[3], &r[3]);
127 muladdmul(a[3], b[1], a[4], b[4], &r[4]);
128 muladdmul(a[3], b[2], a[4], b[5], &r[5]);
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000129 r[5] += a[5];
130 r[6] = r[7] = 0.0f;
131 r[8] = 1.0f;
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000132 }
133private:
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000134 float mya [9];
135 float myb [9];
136 float myr [9];
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000137 typedef MatrixBench INHERITED;
138};
139
140static inline float SkDoubleToFloat(double x) {
141 return static_cast<float>(x);
142}
143
144// Test the performance of setConcat() non-perspective case:
145// using floating point precision but casting up to float for
146// intermediate results during computations.
147class FloatDoubleConcatMatrixBench : public MatrixBench {
148public:
reed@google.come0dcde72011-06-06 13:20:29 +0000149 FloatDoubleConcatMatrixBench(void* p) : INHERITED(p, "concat_floatdouble") {
150 init9(mya);
151 init9(myb);
152 init9(myr);
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000153 }
154protected:
reed@google.comcbefd7d2011-06-06 13:31:30 +0000155 virtual int mulLoopCount() const { return 4; }
156
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000157 static inline void muladdmul(float a, float b, float c, float d,
158 float* result) {
159 *result = SkDoubleToFloat((double)a * b + (double)c * d);
160 }
161 virtual void performTest() {
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000162 const float* a = mya;
163 const float* b = myb;
164 float* r = myr;
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000165 muladdmul(a[0], b[0], a[1], b[3], &r[0]);
166 muladdmul(a[0], b[1], a[1], b[4], &r[1]);
167 muladdmul(a[0], b[2], a[1], b[5], &r[2]);
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000168 r[2] += a[2];
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000169 muladdmul(a[3], b[0], a[4], b[3], &r[3]);
170 muladdmul(a[3], b[1], a[4], b[4], &r[4]);
171 muladdmul(a[3], b[2], a[4], b[5], &r[5]);
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000172 r[5] += a[5];
173 r[6] = r[7] = 0.0f;
174 r[8] = 1.0f;
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000175 }
176private:
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000177 float mya [9];
178 float myb [9];
179 float myr [9];
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000180 typedef MatrixBench INHERITED;
181};
182
183// Test the performance of setConcat() non-perspective case:
184// using double precision only.
185class DoubleConcatMatrixBench : public MatrixBench {
186public:
reed@google.come0dcde72011-06-06 13:20:29 +0000187 DoubleConcatMatrixBench(void* p) : INHERITED(p, "concat_double") {
188 init9(mya);
189 init9(myb);
190 init9(myr);
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000191 }
192protected:
reed@google.comcbefd7d2011-06-06 13:31:30 +0000193 virtual int mulLoopCount() const { return 4; }
194
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000195 static inline void muladdmul(double a, double b, double c, double d,
196 double* result) {
197 *result = a * b + c * d;
198 }
199 virtual void performTest() {
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000200 const double* a = mya;
201 const double* b = myb;
202 double* r = myr;
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000203 muladdmul(a[0], b[0], a[1], b[3], &r[0]);
204 muladdmul(a[0], b[1], a[1], b[4], &r[1]);
205 muladdmul(a[0], b[2], a[1], b[5], &r[2]);
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000206 r[2] += a[2];
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000207 muladdmul(a[3], b[0], a[4], b[3], &r[3]);
208 muladdmul(a[3], b[1], a[4], b[4], &r[4]);
209 muladdmul(a[3], b[2], a[4], b[5], &r[5]);
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000210 r[5] += a[5];
211 r[6] = r[7] = 0.0;
212 r[8] = 1.0;
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000213 }
214private:
tomhudson@google.coma20416b2011-06-03 20:32:58 +0000215 double mya [9];
216 double myb [9];
217 double myr [9];
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000218 typedef MatrixBench INHERITED;
219};
220
tomhudson@google.com317d5402011-06-24 18:30:49 +0000221class GetTypeMatrixBench : public MatrixBench {
222public:
223 GetTypeMatrixBench(void* param)
224 : INHERITED(param, "gettype") {
bsalomon@google.com820e80a2011-10-24 21:09:40 +0000225 fArray[0] = (float) fRnd.nextS();
226 fArray[1] = (float) fRnd.nextS();
227 fArray[2] = (float) fRnd.nextS();
228 fArray[3] = (float) fRnd.nextS();
229 fArray[4] = (float) fRnd.nextS();
230 fArray[5] = (float) fRnd.nextS();
231 fArray[6] = (float) fRnd.nextS();
232 fArray[7] = (float) fRnd.nextS();
233 fArray[8] = (float) fRnd.nextS();
tomhudson@google.com317d5402011-06-24 18:30:49 +0000234 }
235protected:
236 // Putting random generation of the matrix inside performTest()
237 // would help us avoid anomalous runs, but takes up 25% or
238 // more of the function time.
239 virtual void performTest() {
240 fMatrix.setAll(fArray[0], fArray[1], fArray[2],
241 fArray[3], fArray[4], fArray[5],
242 fArray[6], fArray[7], fArray[8]);
243 always_do(fMatrix.getType());
244 fMatrix.dirtyMatrixTypeCache();
245 always_do(fMatrix.getType());
246 fMatrix.dirtyMatrixTypeCache();
247 always_do(fMatrix.getType());
248 fMatrix.dirtyMatrixTypeCache();
249 always_do(fMatrix.getType());
250 fMatrix.dirtyMatrixTypeCache();
251 always_do(fMatrix.getType());
252 fMatrix.dirtyMatrixTypeCache();
253 always_do(fMatrix.getType());
254 fMatrix.dirtyMatrixTypeCache();
255 always_do(fMatrix.getType());
256 fMatrix.dirtyMatrixTypeCache();
257 always_do(fMatrix.getType());
258 }
259private:
260 SkMatrix fMatrix;
261 float fArray[9];
commit-bot@chromium.orge0e7cfe2013-09-09 20:09:12 +0000262 SkRandom fRnd;
tomhudson@google.com317d5402011-06-24 18:30:49 +0000263 typedef MatrixBench INHERITED;
264};
265
tomhudson@google.com288ff332011-06-07 14:31:38 +0000266class ScaleTransMixedMatrixBench : public MatrixBench {
267 public:
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000268 ScaleTransMixedMatrixBench(void* p) : INHERITED(p, "scaletrans_mixed") {
bsalomon@google.com3d3dfe02011-11-10 13:50:19 +0000269 fMatrix.setAll(fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.nextSScalar1(),
270 fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.nextSScalar1(),
271 fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.nextSScalar1());
tomhudson@google.com288ff332011-06-07 14:31:38 +0000272 int i;
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000273 for (i = 0; i < kCount; i++) {
bsalomon@google.com820e80a2011-10-24 21:09:40 +0000274 fSrc[i].fX = fRandom.nextSScalar1();
275 fSrc[i].fY = fRandom.nextSScalar1();
276 fDst[i].fX = fRandom.nextSScalar1();
277 fDst[i].fY = fRandom.nextSScalar1();
tomhudson@google.com288ff332011-06-07 14:31:38 +0000278 }
279 }
280 protected:
281 virtual void performTest() {
282 SkPoint* dst = fDst;
283 const SkPoint* src = fSrc;
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000284 int count = kCount;
tomhudson@google.com288ff332011-06-07 14:31:38 +0000285 float mx = fMatrix[SkMatrix::kMScaleX];
286 float my = fMatrix[SkMatrix::kMScaleY];
287 float tx = fMatrix[SkMatrix::kMTransX];
288 float ty = fMatrix[SkMatrix::kMTransY];
289 do {
290 dst->fY = SkScalarMulAdd(src->fY, my, ty);
291 dst->fX = SkScalarMulAdd(src->fX, mx, tx);
292 src += 1;
293 dst += 1;
294 } while (--count);
295 }
296 private:
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000297 enum {
mtklein@google.comc2897432013-09-10 19:23:38 +0000298 kCount = 16
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000299 };
tomhudson@google.com288ff332011-06-07 14:31:38 +0000300 SkMatrix fMatrix;
mtklein@google.comc2897432013-09-10 19:23:38 +0000301 SkPoint fSrc [kCount];
302 SkPoint fDst [kCount];
commit-bot@chromium.orge0e7cfe2013-09-09 20:09:12 +0000303 SkRandom fRandom;
tomhudson@google.com288ff332011-06-07 14:31:38 +0000304 typedef MatrixBench INHERITED;
305};
tomhudson@google.com288ff332011-06-07 14:31:38 +0000306
307class ScaleTransDoubleMatrixBench : public MatrixBench {
308 public:
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000309 ScaleTransDoubleMatrixBench(void* p) : INHERITED(p, "scaletrans_double") {
tomhudson@google.com288ff332011-06-07 14:31:38 +0000310 init9(fMatrix);
311 int i;
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000312 for (i = 0; i < kCount; i++) {
bsalomon@google.com820e80a2011-10-24 21:09:40 +0000313 fSrc[i].fX = fRandom.nextSScalar1();
314 fSrc[i].fY = fRandom.nextSScalar1();
315 fDst[i].fX = fRandom.nextSScalar1();
316 fDst[i].fY = fRandom.nextSScalar1();
tomhudson@google.com288ff332011-06-07 14:31:38 +0000317 }
318 }
319 protected:
320 virtual void performTest() {
321 SkPoint* dst = fDst;
322 const SkPoint* src = fSrc;
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000323 int count = kCount;
tomhudson@google.com288ff332011-06-07 14:31:38 +0000324 // As doubles, on Z600 Linux systems this is 2.5x as expensive as mixed mode
bsalomon@google.com820e80a2011-10-24 21:09:40 +0000325 float mx = (float) fMatrix[SkMatrix::kMScaleX];
326 float my = (float) fMatrix[SkMatrix::kMScaleY];
327 float tx = (float) fMatrix[SkMatrix::kMTransX];
328 float ty = (float) fMatrix[SkMatrix::kMTransY];
tomhudson@google.com288ff332011-06-07 14:31:38 +0000329 do {
330 dst->fY = src->fY * my + ty;
331 dst->fX = src->fX * mx + tx;
332 src += 1;
333 dst += 1;
334 } while (--count);
335 }
336 private:
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000337 enum {
mtklein@google.comc2897432013-09-10 19:23:38 +0000338 kCount = 16
tfarina@chromium.org7731ead2013-04-05 21:13:14 +0000339 };
tomhudson@google.com288ff332011-06-07 14:31:38 +0000340 double fMatrix [9];
mtklein@google.comc2897432013-09-10 19:23:38 +0000341 SkPoint fSrc [kCount];
342 SkPoint fDst [kCount];
commit-bot@chromium.orge0e7cfe2013-09-09 20:09:12 +0000343 SkRandom fRandom;
tomhudson@google.com288ff332011-06-07 14:31:38 +0000344 typedef MatrixBench INHERITED;
345};
tomhudson@google.com288ff332011-06-07 14:31:38 +0000346
commit-bot@chromium.org5b2e2642013-09-03 19:08:14 +0000347class DecomposeMatrixBench : public MatrixBench {
348public:
349 DecomposeMatrixBench(void* param) : INHERITED(param, "decompose") {}
350
351protected:
352 virtual void onPreDraw() {
353 for (int i = 0; i < 10; ++i) {
354 SkScalar rot0 = (fRandom.nextBool()) ? fRandom.nextRangeF(-180, 180) : 0.0f;
355 SkScalar sx = fRandom.nextRangeF(-3000.f, 3000.f);
356 SkScalar sy = (fRandom.nextBool()) ? fRandom.nextRangeF(-3000.f, 3000.f) : sx;
357 SkScalar rot1 = fRandom.nextRangeF(-180, 180);
358 fMatrix[i].setRotate(rot0);
359 fMatrix[i].postScale(sx, sy);
360 fMatrix[i].postRotate(rot1);
361 }
362 }
363 virtual void performTest() {
364 SkPoint rotation1, scale, rotation2;
365 for (int i = 0; i < 10; ++i) {
366 (void) SkDecomposeUpper2x2(fMatrix[i], &rotation1, &scale, &rotation2);
367 }
368 }
369private:
370 SkMatrix fMatrix[10];
commit-bot@chromium.orge0e7cfe2013-09-09 20:09:12 +0000371 SkRandom fRandom;
commit-bot@chromium.org5b2e2642013-09-03 19:08:14 +0000372 typedef MatrixBench INHERITED;
373};
374
junov@chromium.org6fc56992012-07-12 14:01:32 +0000375class InvertMapRectMatrixBench : public MatrixBench {
376public:
rmistry@google.comfbfcd562012-08-23 18:09:54 +0000377 InvertMapRectMatrixBench(void* param, const char* name, int flags)
junov@chromium.org6fc56992012-07-12 14:01:32 +0000378 : INHERITED(param, name)
379 , fFlags(flags) {
380 fMatrix.reset();
381 fIteration = 0;
382 if (flags & kScale_Flag) {
383 fMatrix.postScale(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f));
384 }
385 if (flags & kTranslate_Flag) {
386 fMatrix.postTranslate(SkFloatToScalar(1.5f), SkFloatToScalar(2.5f));
387 }
388 if (flags & kRotate_Flag) {
389 fMatrix.postRotate(SkFloatToScalar(45.0f));
390 }
391 if (flags & kPerspective_Flag) {
392 fMatrix.setPerspX(SkFloatToScalar(1.5f));
393 fMatrix.setPerspY(SkFloatToScalar(2.5f));
394 }
395 if (0 == (flags & kUncachedTypeMask_Flag)) {
396 fMatrix.getType();
397 }
398 }
399 enum Flag {
400 kScale_Flag = 0x01,
401 kTranslate_Flag = 0x02,
402 kRotate_Flag = 0x04,
403 kPerspective_Flag = 0x08,
404 kUncachedTypeMask_Flag = 0x10,
405 };
406protected:
407 virtual void performTest() {
408 if (fFlags & kUncachedTypeMask_Flag) {
409 // This will invalidate the typemask without
410 // changing the matrix.
411 fMatrix.setPerspX(fMatrix.getPerspX());
412 }
413 SkMatrix inv;
robertphillips@google.com31f8f732012-09-17 13:36:47 +0000414 bool invertible = fMatrix.invert(&inv);
junov@chromium.org6fc56992012-07-12 14:01:32 +0000415 SkASSERT(invertible);
416 SkRect transformedRect;
robertphillips@google.com31f8f732012-09-17 13:36:47 +0000417 // an arbitrary, small, non-zero rect to transform
418 SkRect srcRect = SkRect::MakeWH(SkIntToScalar(10), SkIntToScalar(10));
junov@chromium.org6fc56992012-07-12 14:01:32 +0000419 if (invertible) {
robertphillips@google.com31f8f732012-09-17 13:36:47 +0000420 inv.mapRect(&transformedRect, srcRect);
junov@chromium.org6fc56992012-07-12 14:01:32 +0000421 }
422 }
423private:
424 SkMatrix fMatrix;
junov@chromium.org6fc56992012-07-12 14:01:32 +0000425 int fFlags;
426 unsigned fIteration;
427 typedef MatrixBench INHERITED;
428};
tomhudson@google.com288ff332011-06-07 14:31:38 +0000429
reed@google.com82bf8bb2013-01-04 14:04:08 +0000430///////////////////////////////////////////////////////////////////////////////
tomhudson@google.com288ff332011-06-07 14:31:38 +0000431
reed@google.com82bf8bb2013-01-04 14:04:08 +0000432DEF_BENCH( return new EqualsMatrixBench(p); )
433DEF_BENCH( return new ScaleMatrixBench(p); )
434DEF_BENCH( return new FloatConcatMatrixBench(p); )
435DEF_BENCH( return new FloatDoubleConcatMatrixBench(p); )
436DEF_BENCH( return new DoubleConcatMatrixBench(p); )
437DEF_BENCH( return new GetTypeMatrixBench(p); )
commit-bot@chromium.org5b2e2642013-09-03 19:08:14 +0000438DEF_BENCH( return new DecomposeMatrixBench(p); )
439
reed@google.com82bf8bb2013-01-04 14:04:08 +0000440DEF_BENCH( return new InvertMapRectMatrixBench(p, "invert_maprect_identity", 0); )
tomhudson@google.com288ff332011-06-07 14:31:38 +0000441
reed@google.com82bf8bb2013-01-04 14:04:08 +0000442DEF_BENCH(return new InvertMapRectMatrixBench(p,
reed@google.com90533be2013-01-04 15:46:42 +0000443 "invert_maprect_rectstaysrect",
444 InvertMapRectMatrixBench::kScale_Flag |
445 InvertMapRectMatrixBench::kTranslate_Flag); )
446
447DEF_BENCH(return new InvertMapRectMatrixBench(p,
448 "invert_maprect_translate",
449 InvertMapRectMatrixBench::kTranslate_Flag); )
tomhudson@google.com7b4e1072011-06-03 19:16:56 +0000450
reed@google.com82bf8bb2013-01-04 14:04:08 +0000451DEF_BENCH(return new InvertMapRectMatrixBench(p,
452 "invert_maprect_nonpersp",
453 InvertMapRectMatrixBench::kScale_Flag |
454 InvertMapRectMatrixBench::kRotate_Flag |
455 InvertMapRectMatrixBench::kTranslate_Flag); )
reed@google.com3fb51872011-06-01 15:11:22 +0000456
reed@google.com82bf8bb2013-01-04 14:04:08 +0000457DEF_BENCH( return new InvertMapRectMatrixBench(p,
458 "invert_maprect_persp",
459 InvertMapRectMatrixBench::kPerspective_Flag); )
tomhudson@google.com288ff332011-06-07 14:31:38 +0000460
reed@google.com82bf8bb2013-01-04 14:04:08 +0000461DEF_BENCH( return new InvertMapRectMatrixBench(p,
462 "invert_maprect_typemask_rectstaysrect",
463 InvertMapRectMatrixBench::kUncachedTypeMask_Flag |
464 InvertMapRectMatrixBench::kScale_Flag |
465 InvertMapRectMatrixBench::kTranslate_Flag); )
466
467DEF_BENCH( return new InvertMapRectMatrixBench(p,
468 "invert_maprect_typemask_nonpersp",
469 InvertMapRectMatrixBench::kUncachedTypeMask_Flag |
470 InvertMapRectMatrixBench::kScale_Flag |
471 InvertMapRectMatrixBench::kRotate_Flag |
472 InvertMapRectMatrixBench::kTranslate_Flag); )
473
474DEF_BENCH( return new ScaleTransMixedMatrixBench(p); )
475DEF_BENCH( return new ScaleTransDoubleMatrixBench(p); )