From 47df89ebfd548de2ccd91387e1d7eee418b65f96 Mon Sep 17 00:00:00 2001 From: reed Date: Thu, 30 Jun 2016 06:38:54 -0700 Subject: speed up maprect for scale+trans case BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2111703002 Review-Url: https://codereview.chromium.org/2111703002 --- bench/MatrixBench.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'bench/MatrixBench.cpp') 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); ) -- cgit v1.2.3