aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/MatrixBench.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-06-30 06:38:54 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-30 06:38:54 -0700
commit47df89ebfd548de2ccd91387e1d7eee418b65f96 (patch)
tree97ef6df66cec123f559f7feb98dd5942670bf744 /bench/MatrixBench.cpp
parent501ca7f538f129efd27113e641ad17363920886e (diff)
speed up maprect for scale+trans case
Diffstat (limited to 'bench/MatrixBench.cpp')
-rw-r--r--bench/MatrixBench.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/bench/MatrixBench.cpp b/bench/MatrixBench.cpp
index a185fec589..53e7296731 100644
--- a/bench/MatrixBench.cpp
+++ b/bench/MatrixBench.cpp
@@ -297,3 +297,37 @@ DEF_BENCH( return new MapPointsMatrixBench("mappoints_identity", SkMatrix::I());
DEF_BENCH( return new MapPointsMatrixBench("mappoints_trans", make_trans()); )
DEF_BENCH( return new MapPointsMatrixBench("mappoints_scale", make_scale()); )
DEF_BENCH( return new MapPointsMatrixBench("mappoints_affine", make_afine()); )
+
+///////////////////////////////////////////////////////////////////////////////
+
+class MapRectMatrixBench : public MatrixBench {
+ SkMatrix fM;
+ SkRect fR;
+ bool fScaleTrans;
+
+ enum { MEGA_LOOP = 1000 * 1000 };
+public:
+ MapRectMatrixBench(const char name[], bool scale_trans)
+ : MatrixBench(name), fScaleTrans(scale_trans)
+ {
+ fM.setScale(2, 3);
+ fM.postTranslate(1, 2);
+
+ fR.set(10, 10, 100, 200);
+ }
+
+ void performTest() override {
+ SkRect dst;
+ if (fScaleTrans) {
+ for (int i = 0; i < MEGA_LOOP; ++i) {
+ fM.mapRectScaleTranslate(&dst, fR);
+ }
+ } else {
+ for (int i = 0; i < MEGA_LOOP; ++i) {
+ fM.mapRect(&dst, fR);
+ }
+ }
+ }
+};
+DEF_BENCH( return new MapRectMatrixBench("maprect", false); )
+DEF_BENCH( return new MapRectMatrixBench("maprectscaletrans", true); )