1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2011 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Benchmark.h" 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBitmap.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorPriv.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPaint.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkString.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void draw_into_bitmap(const SkBitmap& bm) { 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const int w = bm.width(); 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const int h = bm.height(); 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkCanvas canvas(bm); 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint p; 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setAntiAlias(true); 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setColor(SK_ColorRED); 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas.drawCircle(SkIntToScalar(w)/2, SkIntToScalar(h)/2, 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIntToScalar(SkMin32(w, h))*3/8, p); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r; 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r.set(0, 0, SkIntToScalar(w), SkIntToScalar(h)); 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStyle(SkPaint::kStroke_Style); 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setStrokeWidth(SkIntToScalar(4)); 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.setColor(SK_ColorBLUE); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas.drawRect(r, p); 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* Variants for bitmaprect 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot src : entire bitmap, subset, fractional subset 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dst : same size as src, diff size 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint : filter-p 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass BitmapRectBench : public Benchmark { 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBitmap fBitmap; 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool fSlightMatrix; 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t fAlpha; 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkFilterQuality fFilterQuality; 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString fName; 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect fSrcR, fDstR; 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const int kWidth = 128; 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const int kHeight = 128; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot BitmapRectBench(U8CPU alpha, SkFilterQuality filterQuality, 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool slightMatrix) { 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fAlpha = SkToU8(alpha); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fFilterQuality = filterQuality; 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fSlightMatrix = slightMatrix; 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fBitmap.setInfo(SkImageInfo::MakeN32Premul(kWidth, kHeight)); 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* onGetName() override { 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fName.printf("bitmaprect_%02X_%sfilter_%s", 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fAlpha, 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kNone_SkFilterQuality == fFilterQuality ? "no" : "", 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fSlightMatrix ? "trans" : "identity"); 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fName.c_str(); 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDelayedSetup() override { 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fBitmap.allocPixels(); 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fBitmap.setAlphaType(kOpaque_SkAlphaType); 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fBitmap.eraseColor(SK_ColorBLACK); 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot draw_into_bitmap(fBitmap); 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fSrcR.iset(0, 0, kWidth, kHeight); 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fDstR.iset(0, 0, kWidth, kHeight); 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fSlightMatrix) { 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // want fractional translate 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fDstR.offset(SK_Scalar1 / 3, SK_Scalar1 * 5 / 7); 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // want enough to create a scale matrix, but not enough to scare 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // off our sniffer which tries to see if the matrix is "effectively" 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // translate-only. 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fDstR.fRight += SK_Scalar1 / (kWidth * 60); 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(int loops, SkCanvas* canvas) override { 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom rand; 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->setupPaint(&paint); 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setFilterQuality(fFilterQuality); 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAlpha(fAlpha); 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < loops; i++) { 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawBitmapRect(fBitmap, fSrcR, fDstR, &paint, 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkCanvas::kStrict_SrcRectConstraint); 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef Benchmark INHERITED; 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH(return new BitmapRectBench(0xFF, kNone_SkFilterQuality, false)) 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH(return new BitmapRectBench(0x80, kNone_SkFilterQuality, false)) 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH(return new BitmapRectBench(0xFF, kLow_SkFilterQuality, false)) 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH(return new BitmapRectBench(0x80, kLow_SkFilterQuality, false)) 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH(return new BitmapRectBench(0xFF, kNone_SkFilterQuality, true)) 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_BENCH(return new BitmapRectBench(0xFF, kLow_SkFilterQuality, true)) 114