1aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 2aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com/* 3aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com * Copyright 2013 Google Inc. 4aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com * 5aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 6aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com * found in the LICENSE file. 7aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com */ 8aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 9f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 10aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com#include "SkCanvas.h" 11aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com#include "SkPaint.h" 12aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com#include "SkRandom.h" 13aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 14aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com/** 15aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com * Draws full screen opaque rectangles. It is designed to test any optimizations in the GPU backend 16aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com * to turn such draws into clears. 17aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com */ 18f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass FSRectBench : public Benchmark { 19aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.compublic: 20410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com FSRectBench() : fInit(false) { } 21aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 22aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.comprotected: 23aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com virtual const char* onGetName() SK_OVERRIDE { return "fullscreen_rects"; } 24aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 25aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com virtual void onPreDraw() SK_OVERRIDE { 26aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com if (!fInit) { 27e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 28aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com static const SkScalar kMinOffset = 0; 29aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com static const SkScalar kMaxOffset = 100 * SK_Scalar1; 30aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com static const SkScalar kOffsetRange = kMaxOffset - kMinOffset; 31aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com for (int i = 0; i < N; ++i) { 32aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com fRects[i].fLeft = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange); 33aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com fRects[i].fTop = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange); 34aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com fRects[i].fRight = W + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange); 35aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com fRects[i].fBottom = H + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange); 36aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com fColors[i] = rand.nextU() | 0xFF000000; 37aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com } 38aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com fInit = true; 39aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com } 40aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com } 41aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 423361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { 43aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com SkPaint paint; 443361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; ++i) { 45c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com paint.setColor(fColors[i % N]); 46c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com canvas->drawRect(fRects[i % N], paint); 47aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com } 48aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com } 49aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 50aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.comprivate: 51aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com enum { 52aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com W = 640, 53aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com H = 480, 54c289743864e2ab926a95e617a5cd1d29b26d1825mtklein@google.com N = 300, 55aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com }; 56aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com SkRect fRects[N]; 57aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com SkColor fColors[N]; 58aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com bool fInit; 59aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 60f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 61aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com}; 62aade2e1e19181eee0d950456cf50aa7cf6a239f8bsalomon@google.com 63410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return SkNEW_ARGS(FSRectBench, ()); ) 64