1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 93fb5187647397e056843c1f41a508992be22175dreed@google.com#include "SkMatrix.h" 105b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org#include "SkMatrixUtils.h" 117b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com#include "SkRandom.h" 123fb5187647397e056843c1f41a508992be22175dreed@google.com#include "SkString.h" 133fb5187647397e056843c1f41a508992be22175dreed@google.com 14f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass MatrixBench : public Benchmark { 153fb5187647397e056843c1f41a508992be22175dreed@google.com SkString fName; 163fb5187647397e056843c1f41a508992be22175dreed@google.compublic: 17410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com MatrixBench(const char name[]) { 183fb5187647397e056843c1f41a508992be22175dreed@google.com fName.printf("matrix_%s", name); 19644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org } 20644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org 21644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org virtual bool isSuitableFor(Backend backend) SK_OVERRIDE { 22644629c1c7913a43ced172b98d56e0f471bc348bcommit-bot@chromium.org return backend == kNonRendering_Backend; 233fb5187647397e056843c1f41a508992be22175dreed@google.com } 243fb5187647397e056843c1f41a508992be22175dreed@google.com 253fb5187647397e056843c1f41a508992be22175dreed@google.com virtual void performTest() = 0; 263fb5187647397e056843c1f41a508992be22175dreed@google.com 273fb5187647397e056843c1f41a508992be22175dreed@google.comprotected: 28cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com virtual int mulLoopCount() const { return 1; } 29cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com 303fb5187647397e056843c1f41a508992be22175dreed@google.com virtual const char* onGetName() { 313fb5187647397e056843c1f41a508992be22175dreed@google.com return fName.c_str(); 323fb5187647397e056843c1f41a508992be22175dreed@google.com } 333fb5187647397e056843c1f41a508992be22175dreed@google.com 343361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas*) { 353361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 363fb5187647397e056843c1f41a508992be22175dreed@google.com this->performTest(); 373fb5187647397e056843c1f41a508992be22175dreed@google.com } 383fb5187647397e056843c1f41a508992be22175dreed@google.com } 393fb5187647397e056843c1f41a508992be22175dreed@google.com 403fb5187647397e056843c1f41a508992be22175dreed@google.comprivate: 41f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 423fb5187647397e056843c1f41a508992be22175dreed@google.com}; 433fb5187647397e056843c1f41a508992be22175dreed@google.com 443fb5187647397e056843c1f41a508992be22175dreed@google.com 453fb5187647397e056843c1f41a508992be22175dreed@google.comclass EqualsMatrixBench : public MatrixBench { 463fb5187647397e056843c1f41a508992be22175dreed@google.compublic: 47410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com EqualsMatrixBench() : INHERITED("equals") {} 483fb5187647397e056843c1f41a508992be22175dreed@google.comprotected: 493fb5187647397e056843c1f41a508992be22175dreed@google.com virtual void performTest() { 503fb5187647397e056843c1f41a508992be22175dreed@google.com SkMatrix m0, m1, m2; 517b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com 523fb5187647397e056843c1f41a508992be22175dreed@google.com m0.reset(); 533fb5187647397e056843c1f41a508992be22175dreed@google.com m1.reset(); 543fb5187647397e056843c1f41a508992be22175dreed@google.com m2.reset(); 55cf44feb0e192f255d598fa9a3f81b70968c98305mtklein 56cf44feb0e192f255d598fa9a3f81b70968c98305mtklein // xor into a volatile prevents these comparisons from being optimized away. 57cf44feb0e192f255d598fa9a3f81b70968c98305mtklein volatile bool junk = false; 58cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (m0 == m1); 59cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (m1 == m2); 60cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (m2 == m0); 613fb5187647397e056843c1f41a508992be22175dreed@google.com } 623fb5187647397e056843c1f41a508992be22175dreed@google.comprivate: 633fb5187647397e056843c1f41a508992be22175dreed@google.com typedef MatrixBench INHERITED; 643fb5187647397e056843c1f41a508992be22175dreed@google.com}; 653fb5187647397e056843c1f41a508992be22175dreed@google.com 663fb5187647397e056843c1f41a508992be22175dreed@google.comclass ScaleMatrixBench : public MatrixBench { 673fb5187647397e056843c1f41a508992be22175dreed@google.compublic: 68410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ScaleMatrixBench() : INHERITED("scale") { 694b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org fSX = fSY = 1.5f; 703fb5187647397e056843c1f41a508992be22175dreed@google.com fM0.reset(); 713fb5187647397e056843c1f41a508992be22175dreed@google.com fM1.setScale(fSX, fSY); 723fb5187647397e056843c1f41a508992be22175dreed@google.com fM2.setTranslate(fSX, fSY); 733fb5187647397e056843c1f41a508992be22175dreed@google.com } 743fb5187647397e056843c1f41a508992be22175dreed@google.comprotected: 753fb5187647397e056843c1f41a508992be22175dreed@google.com virtual void performTest() { 763fb5187647397e056843c1f41a508992be22175dreed@google.com SkMatrix m; 773fb5187647397e056843c1f41a508992be22175dreed@google.com m = fM0; m.preScale(fSX, fSY); 783fb5187647397e056843c1f41a508992be22175dreed@google.com m = fM1; m.preScale(fSX, fSY); 793fb5187647397e056843c1f41a508992be22175dreed@google.com m = fM2; m.preScale(fSX, fSY); 803fb5187647397e056843c1f41a508992be22175dreed@google.com } 813fb5187647397e056843c1f41a508992be22175dreed@google.comprivate: 823fb5187647397e056843c1f41a508992be22175dreed@google.com SkMatrix fM0, fM1, fM2; 833fb5187647397e056843c1f41a508992be22175dreed@google.com SkScalar fSX, fSY; 843fb5187647397e056843c1f41a508992be22175dreed@google.com typedef MatrixBench INHERITED; 853fb5187647397e056843c1f41a508992be22175dreed@google.com}; 863fb5187647397e056843c1f41a508992be22175dreed@google.com 87e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com// having unknown values in our arrays can throw off the timing a lot, perhaps 88e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com// handling NaN values is a lot slower. Anyway, this guy is just meant to put 89e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com// reasonable values in our arrays. 90e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.comtemplate <typename T> void init9(T array[9]) { 91e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 92e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com for (int i = 0; i < 9; i++) { 93e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com array[i] = rand.nextSScalar1(); 94e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com } 95e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com} 96e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com 977b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com// Test the performance of setConcat() non-perspective case: 987b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com// using floating point precision only. 997b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comclass FloatConcatMatrixBench : public MatrixBench { 1007b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.compublic: 101410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com FloatConcatMatrixBench() : INHERITED("concat_floatfloat") { 102e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(mya); 103e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(myb); 104e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(myr); 1057b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1067b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comprotected: 107cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com virtual int mulLoopCount() const { return 4; } 108cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com 1097b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com static inline void muladdmul(float a, float b, float c, float d, 1107b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com float* result) { 1117b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com *result = a * b + c * d; 1127b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1137b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com virtual void performTest() { 114a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com const float* a = mya; 115a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com const float* b = myb; 116a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float* r = myr; 1177b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[0], a[1], b[3], &r[0]); 1187b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[1], a[1], b[4], &r[1]); 1197b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[2], a[1], b[5], &r[2]); 120a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[2] += a[2]; 1217b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[0], a[4], b[3], &r[3]); 1227b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[1], a[4], b[4], &r[4]); 1237b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[2], a[4], b[5], &r[5]); 124a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[5] += a[5]; 125a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[6] = r[7] = 0.0f; 126a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[8] = 1.0f; 1277b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1287b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comprivate: 129a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float mya [9]; 130a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float myb [9]; 131a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float myr [9]; 1327b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com typedef MatrixBench INHERITED; 1337b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com}; 1347b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com 1357b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comstatic inline float SkDoubleToFloat(double x) { 1367b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com return static_cast<float>(x); 1377b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com} 1387b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com 1397b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com// Test the performance of setConcat() non-perspective case: 1407b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com// using floating point precision but casting up to float for 1417b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com// intermediate results during computations. 1427b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comclass FloatDoubleConcatMatrixBench : public MatrixBench { 1437b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.compublic: 144410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com FloatDoubleConcatMatrixBench() : INHERITED("concat_floatdouble") { 145e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(mya); 146e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(myb); 147e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(myr); 1487b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1497b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comprotected: 150cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com virtual int mulLoopCount() const { return 4; } 151cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com 1527b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com static inline void muladdmul(float a, float b, float c, float d, 1537b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com float* result) { 1547b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com *result = SkDoubleToFloat((double)a * b + (double)c * d); 1557b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1567b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com virtual void performTest() { 157a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com const float* a = mya; 158a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com const float* b = myb; 159a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float* r = myr; 1607b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[0], a[1], b[3], &r[0]); 1617b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[1], a[1], b[4], &r[1]); 1627b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[2], a[1], b[5], &r[2]); 163a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[2] += a[2]; 1647b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[0], a[4], b[3], &r[3]); 1657b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[1], a[4], b[4], &r[4]); 1667b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[2], a[4], b[5], &r[5]); 167a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[5] += a[5]; 168a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[6] = r[7] = 0.0f; 169a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[8] = 1.0f; 1707b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1717b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comprivate: 172a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float mya [9]; 173a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float myb [9]; 174a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com float myr [9]; 1757b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com typedef MatrixBench INHERITED; 1767b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com}; 1777b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com 1787b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com// Test the performance of setConcat() non-perspective case: 1797b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com// using double precision only. 1807b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comclass DoubleConcatMatrixBench : public MatrixBench { 1817b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.compublic: 182410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com DoubleConcatMatrixBench() : INHERITED("concat_double") { 183e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(mya); 184e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(myb); 185e0dcde73991a13be48f2aed9829d5e744d7fe508reed@google.com init9(myr); 1867b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1877b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comprotected: 188cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com virtual int mulLoopCount() const { return 4; } 189cbefd7d842945a8a7cc21770b19f41e0f3f3b205reed@google.com 1907b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com static inline void muladdmul(double a, double b, double c, double d, 1917b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com double* result) { 1927b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com *result = a * b + c * d; 1937b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 1947b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com virtual void performTest() { 195a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com const double* a = mya; 196a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com const double* b = myb; 197a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com double* r = myr; 1987b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[0], a[1], b[3], &r[0]); 1997b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[1], a[1], b[4], &r[1]); 2007b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[0], b[2], a[1], b[5], &r[2]); 201a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[2] += a[2]; 2027b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[0], a[4], b[3], &r[3]); 2037b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[1], a[4], b[4], &r[4]); 2047b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com muladdmul(a[3], b[2], a[4], b[5], &r[5]); 205a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[5] += a[5]; 206a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[6] = r[7] = 0.0; 207a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com r[8] = 1.0; 2087b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com } 2097b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.comprivate: 210a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com double mya [9]; 211a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com double myb [9]; 212a20416b010068df452fbfb1d2ccec9c855ae3dcctomhudson@google.com double myr [9]; 2137b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com typedef MatrixBench INHERITED; 2147b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com}; 2157b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com 216317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.comclass GetTypeMatrixBench : public MatrixBench { 217317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.compublic: 218410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com GetTypeMatrixBench() 219410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com : INHERITED("gettype") { 220820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[0] = (float) fRnd.nextS(); 221820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[1] = (float) fRnd.nextS(); 222820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[2] = (float) fRnd.nextS(); 223820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[3] = (float) fRnd.nextS(); 224820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[4] = (float) fRnd.nextS(); 225820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[5] = (float) fRnd.nextS(); 226820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[6] = (float) fRnd.nextS(); 227820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[7] = (float) fRnd.nextS(); 228820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fArray[8] = (float) fRnd.nextS(); 229317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com } 230317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.comprotected: 231317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com // Putting random generation of the matrix inside performTest() 232317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com // would help us avoid anomalous runs, but takes up 25% or 233317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com // more of the function time. 234317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com virtual void performTest() { 235317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.setAll(fArray[0], fArray[1], fArray[2], 236317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fArray[3], fArray[4], fArray[5], 237317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fArray[6], fArray[7], fArray[8]); 238cf44feb0e192f255d598fa9a3f81b70968c98305mtklein // xoring into a volatile prevents the compiler from optimizing these away 239cf44feb0e192f255d598fa9a3f81b70968c98305mtklein volatile int junk = 0; 240cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 241317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.dirtyMatrixTypeCache(); 242cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 243317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.dirtyMatrixTypeCache(); 244cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 245317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.dirtyMatrixTypeCache(); 246cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 247317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.dirtyMatrixTypeCache(); 248cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 249317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.dirtyMatrixTypeCache(); 250cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 251317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.dirtyMatrixTypeCache(); 252cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 253317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com fMatrix.dirtyMatrixTypeCache(); 254cf44feb0e192f255d598fa9a3f81b70968c98305mtklein junk ^= (fMatrix.getType()); 255317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com } 256317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.comprivate: 257317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com SkMatrix fMatrix; 258317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com float fArray[9]; 259e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom fRnd; 260317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com typedef MatrixBench INHERITED; 261317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com}; 262317d540409bc1d246a272b7f61ffba0097c4bd29tomhudson@google.com 263288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.comclass ScaleTransMixedMatrixBench : public MatrixBench { 264288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com public: 265410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ScaleTransMixedMatrixBench() : INHERITED("scaletrans_mixed") { 2663d3dfe011ca477ed96ccac2d1a293cd302fb245ebsalomon@google.com fMatrix.setAll(fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.nextSScalar1(), 2673d3dfe011ca477ed96ccac2d1a293cd302fb245ebsalomon@google.com fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.nextSScalar1(), 2683d3dfe011ca477ed96ccac2d1a293cd302fb245ebsalomon@google.com fRandom.nextSScalar1(), fRandom.nextSScalar1(), fRandom.nextSScalar1()); 269288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com int i; 2707731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org for (i = 0; i < kCount; i++) { 271820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fSrc[i].fX = fRandom.nextSScalar1(); 272820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fSrc[i].fY = fRandom.nextSScalar1(); 273820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fDst[i].fX = fRandom.nextSScalar1(); 274820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fDst[i].fY = fRandom.nextSScalar1(); 275288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } 276288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } 277288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com protected: 278288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com virtual void performTest() { 279288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com SkPoint* dst = fDst; 280288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com const SkPoint* src = fSrc; 2817731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org int count = kCount; 282288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com float mx = fMatrix[SkMatrix::kMScaleX]; 283288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com float my = fMatrix[SkMatrix::kMScaleY]; 284288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com float tx = fMatrix[SkMatrix::kMTransX]; 285288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com float ty = fMatrix[SkMatrix::kMTransY]; 286288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com do { 287288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com dst->fY = SkScalarMulAdd(src->fY, my, ty); 288288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com dst->fX = SkScalarMulAdd(src->fX, mx, tx); 289288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com src += 1; 290288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com dst += 1; 291288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } while (--count); 292288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } 293288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com private: 2947731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org enum { 295c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com kCount = 16 2967731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org }; 297288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com SkMatrix fMatrix; 298c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkPoint fSrc [kCount]; 299c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkPoint fDst [kCount]; 300e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom fRandom; 301288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com typedef MatrixBench INHERITED; 302288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com}; 303288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com 304288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.comclass ScaleTransDoubleMatrixBench : public MatrixBench { 305288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com public: 306410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ScaleTransDoubleMatrixBench() : INHERITED("scaletrans_double") { 307288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com init9(fMatrix); 308288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com int i; 3097731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org for (i = 0; i < kCount; i++) { 310820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fSrc[i].fX = fRandom.nextSScalar1(); 311820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fSrc[i].fY = fRandom.nextSScalar1(); 312820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fDst[i].fX = fRandom.nextSScalar1(); 313820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com fDst[i].fY = fRandom.nextSScalar1(); 314288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } 315288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } 316288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com protected: 317288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com virtual void performTest() { 318288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com SkPoint* dst = fDst; 319288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com const SkPoint* src = fSrc; 3207731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org int count = kCount; 321288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com // As doubles, on Z600 Linux systems this is 2.5x as expensive as mixed mode 322820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com float mx = (float) fMatrix[SkMatrix::kMScaleX]; 323820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com float my = (float) fMatrix[SkMatrix::kMScaleY]; 324820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com float tx = (float) fMatrix[SkMatrix::kMTransX]; 325820e80ad6390e120d4991a5280d0452ec87beaebbsalomon@google.com float ty = (float) fMatrix[SkMatrix::kMTransY]; 326288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com do { 327288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com dst->fY = src->fY * my + ty; 328288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com dst->fX = src->fX * mx + tx; 329288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com src += 1; 330288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com dst += 1; 331288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } while (--count); 332288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com } 333288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com private: 3347731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org enum { 335c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com kCount = 16 3367731eada5bfeb14db403cfee5c1439198c39a05btfarina@chromium.org }; 337288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com double fMatrix [9]; 338c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkPoint fSrc [kCount]; 339c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com SkPoint fDst [kCount]; 340e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom fRandom; 341288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com typedef MatrixBench INHERITED; 342288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com}; 343288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com 3445b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.orgclass DecomposeMatrixBench : public MatrixBench { 3455b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.orgpublic: 346410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com DecomposeMatrixBench() : INHERITED("decompose") {} 3475b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org 3485b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.orgprotected: 3495b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org virtual void onPreDraw() { 3505b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org for (int i = 0; i < 10; ++i) { 3515b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org SkScalar rot0 = (fRandom.nextBool()) ? fRandom.nextRangeF(-180, 180) : 0.0f; 3525b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org SkScalar sx = fRandom.nextRangeF(-3000.f, 3000.f); 3535b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org SkScalar sy = (fRandom.nextBool()) ? fRandom.nextRangeF(-3000.f, 3000.f) : sx; 3545b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org SkScalar rot1 = fRandom.nextRangeF(-180, 180); 3555b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org fMatrix[i].setRotate(rot0); 3565b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org fMatrix[i].postScale(sx, sy); 3575b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org fMatrix[i].postRotate(rot1); 3585b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org } 3595b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org } 3605b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org virtual void performTest() { 3615b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org SkPoint rotation1, scale, rotation2; 3625b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org for (int i = 0; i < 10; ++i) { 3635b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org (void) SkDecomposeUpper2x2(fMatrix[i], &rotation1, &scale, &rotation2); 3645b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org } 3655b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org } 3665b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.orgprivate: 3675b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org SkMatrix fMatrix[10]; 368e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom fRandom; 3695b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org typedef MatrixBench INHERITED; 3705b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org}; 3715b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org 3726fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.orgclass InvertMapRectMatrixBench : public MatrixBench { 3736fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.orgpublic: 374410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com InvertMapRectMatrixBench(const char* name, int flags) 375410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com : INHERITED(name) 3766fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org , fFlags(flags) { 3776fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org fMatrix.reset(); 3786fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org fIteration = 0; 3796fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org if (flags & kScale_Flag) { 3804b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org fMatrix.postScale(1.5f, 2.5f); 3816fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 3826fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org if (flags & kTranslate_Flag) { 3834b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org fMatrix.postTranslate(1.5f, 2.5f); 3846fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 3856fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org if (flags & kRotate_Flag) { 3864b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org fMatrix.postRotate(45.0f); 3876fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 3886fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org if (flags & kPerspective_Flag) { 3894b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org fMatrix.setPerspX(1.5f); 3904b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org fMatrix.setPerspY(2.5f); 3916fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 3926fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org if (0 == (flags & kUncachedTypeMask_Flag)) { 3936fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org fMatrix.getType(); 3946fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 3956fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 3966fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org enum Flag { 3976fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org kScale_Flag = 0x01, 3986fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org kTranslate_Flag = 0x02, 3996fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org kRotate_Flag = 0x04, 4006fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org kPerspective_Flag = 0x08, 4016fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org kUncachedTypeMask_Flag = 0x10, 4026fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org }; 4036fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.orgprotected: 4046fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org virtual void performTest() { 4056fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org if (fFlags & kUncachedTypeMask_Flag) { 4066fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org // This will invalidate the typemask without 4076fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org // changing the matrix. 4086fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org fMatrix.setPerspX(fMatrix.getPerspX()); 4096fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 4106fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org SkMatrix inv; 41131f8f73e83fad2241b1350d8d253c170e96e46ffrobertphillips@google.com bool invertible = fMatrix.invert(&inv); 4126fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org SkASSERT(invertible); 4136fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org SkRect transformedRect; 41431f8f73e83fad2241b1350d8d253c170e96e46ffrobertphillips@google.com // an arbitrary, small, non-zero rect to transform 41531f8f73e83fad2241b1350d8d253c170e96e46ffrobertphillips@google.com SkRect srcRect = SkRect::MakeWH(SkIntToScalar(10), SkIntToScalar(10)); 4166fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org if (invertible) { 41731f8f73e83fad2241b1350d8d253c170e96e46ffrobertphillips@google.com inv.mapRect(&transformedRect, srcRect); 4186fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 4196fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org } 4206fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.orgprivate: 4216fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org SkMatrix fMatrix; 4226fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org int fFlags; 4236fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org unsigned fIteration; 4246fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org typedef MatrixBench INHERITED; 4256fc5699e777c27c4eea9587a131aecf6e92a677ajunov@chromium.org}; 426288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com 42782bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com/////////////////////////////////////////////////////////////////////////////// 428288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com 429410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new EqualsMatrixBench(); ) 430410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ScaleMatrixBench(); ) 431410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new FloatConcatMatrixBench(); ) 432410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new FloatDoubleConcatMatrixBench(); ) 433410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DoubleConcatMatrixBench(); ) 434410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new GetTypeMatrixBench(); ) 435410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new DecomposeMatrixBench(); ) 4365b2e2640ed345c4670b99b349f62eb6f9446ec1ecommit-bot@chromium.org 437410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new InvertMapRectMatrixBench("invert_maprect_identity", 0); ) 438288ff33d06776d6b105f8056af30191510ca0e3ftomhudson@google.com 439410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new InvertMapRectMatrixBench( 44090533be035236c9ff0fc3a9944eae2ec160bc60dreed@google.com "invert_maprect_rectstaysrect", 44190533be035236c9ff0fc3a9944eae2ec160bc60dreed@google.com InvertMapRectMatrixBench::kScale_Flag | 44290533be035236c9ff0fc3a9944eae2ec160bc60dreed@google.com InvertMapRectMatrixBench::kTranslate_Flag); ) 44390533be035236c9ff0fc3a9944eae2ec160bc60dreed@google.com 444410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new InvertMapRectMatrixBench( 44590533be035236c9ff0fc3a9944eae2ec160bc60dreed@google.com "invert_maprect_translate", 44690533be035236c9ff0fc3a9944eae2ec160bc60dreed@google.com InvertMapRectMatrixBench::kTranslate_Flag); ) 4477b4e1073226e07d279d6f28883f8aa4b27ade183tomhudson@google.com 448410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH(return new InvertMapRectMatrixBench( 44982bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com "invert_maprect_nonpersp", 45082bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kScale_Flag | 45182bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kRotate_Flag | 45282bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kTranslate_Flag); ) 45382bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com 454410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new InvertMapRectMatrixBench( 45582bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com "invert_maprect_persp", 45682bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kPerspective_Flag); ) 45782bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com 458410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new InvertMapRectMatrixBench( 45982bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com "invert_maprect_typemask_rectstaysrect", 46082bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kUncachedTypeMask_Flag | 46182bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kScale_Flag | 46282bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kTranslate_Flag); ) 46382bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com 464410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new InvertMapRectMatrixBench( 46582bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com "invert_maprect_typemask_nonpersp", 46682bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kUncachedTypeMask_Flag | 46782bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kScale_Flag | 46882bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kRotate_Flag | 46982bf8bbcbcd27ca35c24f0eae9f68183619af26freed@google.com InvertMapRectMatrixBench::kTranslate_Flag); ) 4703fb5187647397e056843c1f41a508992be22175dreed@google.com 471410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ScaleTransMixedMatrixBench(); ) 472410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ScaleTransDoubleMatrixBench(); ) 473