Home | History | Annotate | Download | only in bench
      1 
      2 /*
      3  * Copyright 2013 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #include "SkBenchmark.h"
     10 #include "SkCanvas.h"
     11 #include "SkPaint.h"
     12 #include "SkRandom.h"
     13 
     14 /**
     15  * Draws full screen opaque rectangles. It is designed to test any optimizations in the GPU backend
     16  * to turn such draws into clears.
     17  */
     18 class FSRectBench : public SkBenchmark {
     19 public:
     20     FSRectBench(void* param)
     21         : INHERITED(param)
     22         , fInit(false) {
     23     }
     24 
     25 protected:
     26     virtual const char* onGetName() SK_OVERRIDE { return "fullscreen_rects"; }
     27 
     28     virtual void onPreDraw() SK_OVERRIDE {
     29         if (!fInit) {
     30             SkMWCRandom rand;
     31             static const SkScalar kMinOffset = 0;
     32             static const SkScalar kMaxOffset = 100 * SK_Scalar1;
     33             static const SkScalar kOffsetRange = kMaxOffset - kMinOffset;
     34             for (int i = 0; i < N; ++i) {
     35                 fRects[i].fLeft = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange);
     36                 fRects[i].fTop = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange);
     37                 fRects[i].fRight = W + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange);
     38                 fRects[i].fBottom = H + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange);
     39                 fColors[i] = rand.nextU() | 0xFF000000;
     40             }
     41             fInit = true;
     42         }
     43     }
     44 
     45     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
     46         SkPaint paint;
     47         for (int i = 0; i < N; ++i) {
     48             paint.setColor(fColors[i]);
     49             canvas->drawRect(fRects[i], paint);
     50         }
     51     }
     52 
     53 private:
     54     enum {
     55         W = 640,
     56         H = 480,
     57         N = SkBENCHLOOP(300)
     58     };
     59     SkRect  fRects[N];
     60     SkColor fColors[N];
     61     bool fInit;
     62 
     63     typedef SkBenchmark INHERITED;
     64 };
     65 
     66 DEF_BENCH( return SkNEW_ARGS(FSRectBench, (p)); )
     67