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