| /* | 
 |  * Copyright 2016 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #include "Benchmark.h" | 
 | #include "SkCanvas.h" | 
 | #include "SkRandom.h" | 
 |  | 
 | class QuickRejectBench : public Benchmark { | 
 |     enum { N = 1000000 }; | 
 |     float fFloats[N]; | 
 |     int   fInts  [N]; | 
 |  | 
 |     const char* onGetName() override { return "quick_reject"; } | 
 |     bool isSuitableFor(Backend backend) override { return backend != kNonRendering_Backend; } | 
 |  | 
 |     void onDelayedSetup() override  { | 
 |         SkRandom rand; | 
 |         for (int i = 0; i < N; ++i) { | 
 |             fFloats[i] = 300.0f * (rand.nextSScalar1() + 0.5f); | 
 |         } | 
 |     } | 
 |  | 
 |     void onDraw(int loops, SkCanvas* canvas) override { | 
 |         while (loops --> 0) { | 
 |             for (int i = 0; i < N - 4; i++) { | 
 |                 if (canvas->quickReject(*(SkRect*)(fFloats+i))) { | 
 |                     fInts[i] = 11; | 
 |                 } else { | 
 |                     fInts[i] = 24; | 
 |                 } | 
 |             } | 
 |         } | 
 |     } | 
 | }; | 
 | DEF_BENCH( return new QuickRejectBench; ) | 
 |  | 
 | class ConcatBench : public Benchmark { | 
 |     SkMatrix fMatrix; | 
 |  | 
 |     const char* onGetName() override { return "concat"; } | 
 |     bool isSuitableFor(Backend backend) override { return backend != kNonRendering_Backend; } | 
 |  | 
 |     void onDelayedSetup() override  { | 
 |         SkRandom r; | 
 |         fMatrix.setScale(5.0f, 5.0f); | 
 |         fMatrix.setTranslateX(10.0f); | 
 |         fMatrix.setTranslateY(10.0f); | 
 |     } | 
 |  | 
 |     void onDraw(int loops, SkCanvas* canvas) override { | 
 |         while (loops --> 0) { | 
 |             canvas->setMatrix(SkMatrix::MakeScale(3.0f)); | 
 |             canvas->concat(fMatrix); | 
 |         } | 
 |     } | 
 | }; | 
 | DEF_BENCH( return new ConcatBench; ) |