|  | /* | 
|  | * 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; ) |