Matrix44Bench.cpp revision 950457543860eb1c545e0ef8bb2c20e2ddc6196e
17d68335eb427547606497eb4edea81acce7891f9reed@google.com/*
27d68335eb427547606497eb4edea81acce7891f9reed@google.com * Copyright 2012 Google Inc.
37d68335eb427547606497eb4edea81acce7891f9reed@google.com *
47d68335eb427547606497eb4edea81acce7891f9reed@google.com * Use of this source code is governed by a BSD-style license that can be
57d68335eb427547606497eb4edea81acce7891f9reed@google.com * found in the LICENSE file.
67d68335eb427547606497eb4edea81acce7891f9reed@google.com */
77d68335eb427547606497eb4edea81acce7891f9reed@google.com
87d68335eb427547606497eb4edea81acce7891f9reed@google.com#include "SkBenchmark.h"
97d68335eb427547606497eb4edea81acce7891f9reed@google.com#include "SkMatrix44.h"
107d68335eb427547606497eb4edea81acce7891f9reed@google.com#include "SkRandom.h"
117d68335eb427547606497eb4edea81acce7891f9reed@google.com#include "SkString.h"
127d68335eb427547606497eb4edea81acce7891f9reed@google.com
137d68335eb427547606497eb4edea81acce7891f9reed@google.comclass Matrix44Bench : public SkBenchmark {
147d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkString    fName;
157d68335eb427547606497eb4edea81acce7891f9reed@google.com    enum { N = 10000 };
167d68335eb427547606497eb4edea81acce7891f9reed@google.compublic:
177d68335eb427547606497eb4edea81acce7891f9reed@google.com    Matrix44Bench(void* param, const char name[]) : INHERITED(param) {
187d68335eb427547606497eb4edea81acce7891f9reed@google.com        fName.printf("matrix44_%s", name);
197d68335eb427547606497eb4edea81acce7891f9reed@google.com        fIsRendering = false;
207d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
217d68335eb427547606497eb4edea81acce7891f9reed@google.com
227d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual void performTest() = 0;
237d68335eb427547606497eb4edea81acce7891f9reed@google.com
247d68335eb427547606497eb4edea81acce7891f9reed@google.comprotected:
257d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual int mulLoopCount() const { return 1; }
267d68335eb427547606497eb4edea81acce7891f9reed@google.com
277d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual const char* onGetName() {
287d68335eb427547606497eb4edea81acce7891f9reed@google.com        return fName.c_str();
297d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
307d68335eb427547606497eb4edea81acce7891f9reed@google.com
3177472f06f88b85e85fb690584c85d0a42e74b685sugoi@google.com    virtual void onDraw(SkCanvas*) {
327d68335eb427547606497eb4edea81acce7891f9reed@google.com        int n = SkBENCHLOOP(N * this->mulLoopCount());
337d68335eb427547606497eb4edea81acce7891f9reed@google.com        for (int i = 0; i < n; i++) {
347d68335eb427547606497eb4edea81acce7891f9reed@google.com            this->performTest();
357d68335eb427547606497eb4edea81acce7891f9reed@google.com        }
367d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
377d68335eb427547606497eb4edea81acce7891f9reed@google.com
387d68335eb427547606497eb4edea81acce7891f9reed@google.comprivate:
397d68335eb427547606497eb4edea81acce7891f9reed@google.com    typedef SkBenchmark INHERITED;
407d68335eb427547606497eb4edea81acce7891f9reed@google.com};
417d68335eb427547606497eb4edea81acce7891f9reed@google.com
427d68335eb427547606497eb4edea81acce7891f9reed@google.comclass EqualsMatrix44Bench : public Matrix44Bench {
437d68335eb427547606497eb4edea81acce7891f9reed@google.compublic:
447d68335eb427547606497eb4edea81acce7891f9reed@google.com    EqualsMatrix44Bench(void* param) : INHERITED(param, "equals") {
457d68335eb427547606497eb4edea81acce7891f9reed@google.com        fM1.set(0, 0, 0);
467d68335eb427547606497eb4edea81acce7891f9reed@google.com        fM2.set(3, 3, 0);
477d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
487d68335eb427547606497eb4edea81acce7891f9reed@google.comprotected:
497d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual void performTest() {
507d68335eb427547606497eb4edea81acce7891f9reed@google.com        for (int i = 0; i < 10; ++i) {
5105af1afd429808913683da75644e48bece12e820humper@google.com            (void) (fM0 == fM1);
5205af1afd429808913683da75644e48bece12e820humper@google.com            (void) (fM1 == fM2);
5305af1afd429808913683da75644e48bece12e820humper@google.com            (void) (fM2 == fM0);
547d68335eb427547606497eb4edea81acce7891f9reed@google.com        }
557d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
567d68335eb427547606497eb4edea81acce7891f9reed@google.comprivate:
577d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMatrix44 fM0, fM1, fM2;
587d68335eb427547606497eb4edea81acce7891f9reed@google.com    typedef Matrix44Bench INHERITED;
597d68335eb427547606497eb4edea81acce7891f9reed@google.com};
607d68335eb427547606497eb4edea81acce7891f9reed@google.com
617d68335eb427547606497eb4edea81acce7891f9reed@google.comclass PreScaleMatrix44Bench : public Matrix44Bench {
627d68335eb427547606497eb4edea81acce7891f9reed@google.compublic:
637d68335eb427547606497eb4edea81acce7891f9reed@google.com    PreScaleMatrix44Bench(void* param) : INHERITED(param, "prescale") {
647d68335eb427547606497eb4edea81acce7891f9reed@google.com        fX = fY = fZ = SkDoubleToMScalar(1.5);
657d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
667d68335eb427547606497eb4edea81acce7891f9reed@google.comprotected:
677d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual void performTest() {
687d68335eb427547606497eb4edea81acce7891f9reed@google.com        fM0.reset();
697d68335eb427547606497eb4edea81acce7891f9reed@google.com        for (int i = 0; i < 10; ++i) {
707d68335eb427547606497eb4edea81acce7891f9reed@google.com            fM0.preScale(fX, fY, fZ);
717d68335eb427547606497eb4edea81acce7891f9reed@google.com        }
727d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
737d68335eb427547606497eb4edea81acce7891f9reed@google.comprivate:
747d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMatrix44 fM0;
757d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMScalar  fX, fY, fZ;
767d68335eb427547606497eb4edea81acce7891f9reed@google.com    typedef Matrix44Bench INHERITED;
777d68335eb427547606497eb4edea81acce7891f9reed@google.com};
787d68335eb427547606497eb4edea81acce7891f9reed@google.com
799973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.comclass InvertMatrix44Bench : public Matrix44Bench {
809973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.compublic:
819973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com    InvertMatrix44Bench(void* param) : INHERITED(param, "invert") {
82950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 0, -1.1);
83950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 1, 2.1);
84950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 2, -3.1);
85950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 3, 4.1);
86950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 0, 5.1);
87950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 1, -6.1);
88950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 2, 7.1);
89950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 3, 8.1);
90950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 0, -9.1);
91950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 1, 10.1);
92950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 2, 11.1);
93950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 3, -12.1);
94950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(3, 0, -13.1);
95950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(3, 1, 14.1);
96950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(3, 2, -15.1);
97950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(3, 3, 16.1);
98950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    }
99950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgprotected:
100950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    virtual void performTest() {
101950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        for (int i = 0; i < 10; ++i) {
102950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org            fM0.invert(&fM1);
103950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        }
104950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    }
105950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgprivate:
106950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    SkMatrix44 fM0, fM1;
107950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    typedef Matrix44Bench INHERITED;
108950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org};
109950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org
110950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgclass InvertAffineMatrix44Bench : public Matrix44Bench {
111950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgpublic:
112950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    InvertAffineMatrix44Bench(void* param) : INHERITED(param, "invertaffine") {
113950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 0, -1.1);
114950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 1, 2.1);
115950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 2, -3.1);
116950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 3, 4.1);
117950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 0, 5.1);
118950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 1, -6.1);
119950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 2, 7.1);
120950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 3, 8.1);
121950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 0, -9.1);
122950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 1, 10.1);
123950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 2, 11.1);
124950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 3, -12.1);
125950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        // bottom row (perspective component) remains (0, 0, 0, 1).
126950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    }
127950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgprotected:
128950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    virtual void performTest() {
129950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        for (int i = 0; i < 10; ++i) {
130950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org            fM0.invert(&fM1);
131950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        }
132950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    }
133950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgprivate:
134950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    SkMatrix44 fM0, fM1;
135950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    typedef Matrix44Bench INHERITED;
136950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org};
137950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org
138950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgclass InvertScaleTranslateMatrix44Bench : public Matrix44Bench {
139950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgpublic:
140950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    InvertScaleTranslateMatrix44Bench(void* param) : INHERITED(param, "invertscaletranslate") {
141950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 0, -1.1);
142950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 3, 4.1);
143950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org
144950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 1, -6.1);
145950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 3, 8.1);
146950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org
147950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 2, 11.1);
148950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 3, -12.1);
149950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    }
150950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgprotected:
151950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    virtual void performTest() {
152950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        for (int i = 0; i < 10; ++i) {
153950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org            fM0.invert(&fM1);
154950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        }
155950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    }
156950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgprivate:
157950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    SkMatrix44 fM0, fM1;
158950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    typedef Matrix44Bench INHERITED;
159950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org};
160950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org
161950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgclass InvertTranslateMatrix44Bench : public Matrix44Bench {
162950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgpublic:
163950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org    InvertTranslateMatrix44Bench(void* param) : INHERITED(param, "inverttranslate") {
164950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(0, 3, 4.1);
165950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(1, 3, 8.1);
166950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.org        fM0.set(2, 3, -12.1);
1679973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com    }
1689973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.comprotected:
1699973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com    virtual void performTest() {
1709973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com        for (int i = 0; i < 10; ++i) {
1719973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com            fM0.invert(&fM1);
1729973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com        }
1739973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com    }
1749973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.comprivate:
1759973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com    SkMatrix44 fM0, fM1;
1769973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com    typedef Matrix44Bench INHERITED;
1779973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com};
1789973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.com
1797d68335eb427547606497eb4edea81acce7891f9reed@google.comclass PostScaleMatrix44Bench : public Matrix44Bench {
1807d68335eb427547606497eb4edea81acce7891f9reed@google.compublic:
1817d68335eb427547606497eb4edea81acce7891f9reed@google.com    PostScaleMatrix44Bench(void* param) : INHERITED(param, "postscale") {
1827d68335eb427547606497eb4edea81acce7891f9reed@google.com        fX = fY = fZ = SkDoubleToMScalar(1.5);
1837d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
1847d68335eb427547606497eb4edea81acce7891f9reed@google.comprotected:
1857d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual void performTest() {
1867d68335eb427547606497eb4edea81acce7891f9reed@google.com        fM0.reset();
1877d68335eb427547606497eb4edea81acce7891f9reed@google.com        for (int i = 0; i < 10; ++i) {
1887d68335eb427547606497eb4edea81acce7891f9reed@google.com            fM0.postScale(fX, fY, fZ);
1897d68335eb427547606497eb4edea81acce7891f9reed@google.com        }
1907d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
1917d68335eb427547606497eb4edea81acce7891f9reed@google.comprivate:
1927d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMatrix44 fM0;
1937d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMScalar  fX, fY, fZ;
1947d68335eb427547606497eb4edea81acce7891f9reed@google.com    typedef Matrix44Bench INHERITED;
1957d68335eb427547606497eb4edea81acce7891f9reed@google.com};
1967d68335eb427547606497eb4edea81acce7891f9reed@google.com
1977d68335eb427547606497eb4edea81acce7891f9reed@google.comclass SetConcatMatrix44Bench : public Matrix44Bench {
1987d68335eb427547606497eb4edea81acce7891f9reed@google.compublic:
1997d68335eb427547606497eb4edea81acce7891f9reed@google.com    SetConcatMatrix44Bench(void* param) : INHERITED(param, "setconcat") {
2007d68335eb427547606497eb4edea81acce7891f9reed@google.com        fX = fY = fZ = SkDoubleToMScalar(1.5);
2017d68335eb427547606497eb4edea81acce7891f9reed@google.com        fM1.setScale(fX, fY, fZ);
2027d68335eb427547606497eb4edea81acce7891f9reed@google.com        fM2.setTranslate(fX, fY, fZ);
2037d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
2047d68335eb427547606497eb4edea81acce7891f9reed@google.comprotected:
2057d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual void performTest() {
2067d68335eb427547606497eb4edea81acce7891f9reed@google.com        fM0.reset();    // just to normalize this test with prescale/postscale
2077d68335eb427547606497eb4edea81acce7891f9reed@google.com        for (int i = 0; i < 10; ++i) {
2087d68335eb427547606497eb4edea81acce7891f9reed@google.com            fM0.setConcat(fM1, fM2);
2097d68335eb427547606497eb4edea81acce7891f9reed@google.com        }
2107d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
2117d68335eb427547606497eb4edea81acce7891f9reed@google.comprivate:
2127d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMatrix44 fM0, fM1, fM2;
2137d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMScalar  fX, fY, fZ;
2147d68335eb427547606497eb4edea81acce7891f9reed@google.com    typedef Matrix44Bench INHERITED;
2157d68335eb427547606497eb4edea81acce7891f9reed@google.com};
2167d68335eb427547606497eb4edea81acce7891f9reed@google.com
2177d68335eb427547606497eb4edea81acce7891f9reed@google.comclass GetTypeMatrix44Bench : public Matrix44Bench {
2187d68335eb427547606497eb4edea81acce7891f9reed@google.compublic:
2197d68335eb427547606497eb4edea81acce7891f9reed@google.com    GetTypeMatrix44Bench(void* param) : INHERITED(param, "gettype") {}
2207d68335eb427547606497eb4edea81acce7891f9reed@google.comprotected:
2217d68335eb427547606497eb4edea81acce7891f9reed@google.com    // Putting random generation of the matrix inside performTest()
2227d68335eb427547606497eb4edea81acce7891f9reed@google.com    // would help us avoid anomalous runs, but takes up 25% or
2237d68335eb427547606497eb4edea81acce7891f9reed@google.com    // more of the function time.
2247d68335eb427547606497eb4edea81acce7891f9reed@google.com    virtual void performTest() {
2257d68335eb427547606497eb4edea81acce7891f9reed@google.com        for (int i = 0; i < 20; ++i) {
2267d68335eb427547606497eb4edea81acce7891f9reed@google.com            fMatrix.set(1, 2, 1);   // to invalidate the type-cache
2277d68335eb427547606497eb4edea81acce7891f9reed@google.com            fMatrix.getType();
2287d68335eb427547606497eb4edea81acce7891f9reed@google.com        }
2297d68335eb427547606497eb4edea81acce7891f9reed@google.com    }
2307d68335eb427547606497eb4edea81acce7891f9reed@google.comprivate:
2317d68335eb427547606497eb4edea81acce7891f9reed@google.com    SkMatrix44 fMatrix;
2327d68335eb427547606497eb4edea81acce7891f9reed@google.com    typedef Matrix44Bench INHERITED;
2337d68335eb427547606497eb4edea81acce7891f9reed@google.com};
2347d68335eb427547606497eb4edea81acce7891f9reed@google.com
2357d68335eb427547606497eb4edea81acce7891f9reed@google.comDEF_BENCH( return new EqualsMatrix44Bench(p); )
2367d68335eb427547606497eb4edea81acce7891f9reed@google.comDEF_BENCH( return new PreScaleMatrix44Bench(p); )
2377d68335eb427547606497eb4edea81acce7891f9reed@google.comDEF_BENCH( return new PostScaleMatrix44Bench(p); )
2389973a8a396957afb66c9ba5ee40f829770619ce3tomhudson@google.comDEF_BENCH( return new InvertMatrix44Bench(p); )
239950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgDEF_BENCH( return new InvertAffineMatrix44Bench(p); )
240950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgDEF_BENCH( return new InvertScaleTranslateMatrix44Bench(p); )
241950457543860eb1c545e0ef8bb2c20e2ddc6196ecommit-bot@chromium.orgDEF_BENCH( return new InvertTranslateMatrix44Bench(p); )
2427d68335eb427547606497eb4edea81acce7891f9reed@google.comDEF_BENCH( return new SetConcatMatrix44Bench(p); )
2437d68335eb427547606497eb4edea81acce7891f9reed@google.comDEF_BENCH( return new GetTypeMatrix44Bench(p); )
244