1cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 2cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com/* 3cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com * Copyright 2011 Google Inc. 4cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com * 5cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com * Use of this source code is governed by a BSD-style license that can be 6cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com * found in the LICENSE file. 7cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com */ 8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h" 9cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#include "SkCanvas.h" 10cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#include "SkColorShader.h" 11cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#include "SkFontHost.h" 12cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#include "SkPaint.h" 13cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#include "SkRandom.h" 14cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#include "SkString.h" 15cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#include "SkTemplates.h" 16cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 17cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com#define STR "Hamburgefons" 18cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 19cc586511839400941420160b1ef2bf19a7f7f2dereed@google.comenum FontQuality { 20cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com kBW, 21cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com kAA, 22cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com kLCD 23cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com}; 24cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 25cc586511839400941420160b1ef2bf19a7f7f2dereed@google.comstatic const char* fontQualityName(const SkPaint& paint) { 26cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com if (!paint.isAntiAlias()) { 27cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com return "BW"; 28cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com } 29cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com if (paint.isLCDRenderText()) { 30cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com return "LCD"; 31cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com } 32cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com return "AA"; 33cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com} 34cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 35f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass ShaderMaskBench : public Benchmark { 36cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkPaint fPaint; 37cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkString fText; 38cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkString fName; 39cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com FontQuality fFQ; 40cc586511839400941420160b1ef2bf19a7f7f2dereed@google.compublic: 41410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.com ShaderMaskBench(bool isOpaque, FontQuality fq) { 42cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com fFQ = fq; 43cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com fText.set(STR); 44cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 45cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com fPaint.setAntiAlias(kBW != fq); 46cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com fPaint.setLCDRenderText(kLCD == fq); 4776a3b2abd02841c4ae786ac4cf59c3a51c545f73commit-bot@chromium.org fPaint.setShader(new SkColorShader(isOpaque ? 0xFFFFFFFF : 0x80808080))->unref(); 48cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com } 49cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 50cc586511839400941420160b1ef2bf19a7f7f2dereed@google.comprotected: 51cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com virtual const char* onGetName() { 528afae61a57f87e4a50578effce6c428031499301tomhudson@google.com fName.printf("shadermask"); 53cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com fName.appendf("_%s", fontQualityName(fPaint)); 54cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com fName.appendf("_%02X", fPaint.getAlpha()); 55cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com return fName.c_str(); 56cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com } 57cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 583361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org virtual void onDraw(const int loops, SkCanvas* canvas) { 59cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com const SkIPoint dim = this->getSize(); 60e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 61cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 62cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkPaint paint(fPaint); 63cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com this->setupPaint(&paint); 64cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com // explicitly need these 65cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com paint.setAlpha(fPaint.getAlpha()); 66cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com paint.setAntiAlias(kBW != fFQ); 67cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com paint.setLCDRenderText(kLCD == fFQ); 68cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 69cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com const SkScalar x0 = SkIntToScalar(-10); 70cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com const SkScalar y0 = SkIntToScalar(-10); 71fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 72cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com paint.setTextSize(SkIntToScalar(12)); 733361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops; i++) { 74cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkScalar x = x0 + rand.nextUScalar1() * dim.fX; 75cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkScalar y = y0 + rand.nextUScalar1() * dim.fY; 76cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com canvas->drawText(fText.c_str(), fText.size(), x, y, paint); 77cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com } 78fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 79cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com paint.setTextSize(SkIntToScalar(48)); 803361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org for (int i = 0; i < loops / 4 ; i++) { 81cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkScalar x = x0 + rand.nextUScalar1() * dim.fX; 82cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com SkScalar y = y0 + rand.nextUScalar1() * dim.fY; 83cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com canvas->drawText(fText.c_str(), fText.size(), x, y, paint); 84cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com } 85cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com } 86cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 87cc586511839400941420160b1ef2bf19a7f7f2dereed@google.comprivate: 88f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina typedef Benchmark INHERITED; 89cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com}; 90cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 91cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com/////////////////////////////////////////////////////////////////////////////// 92cc586511839400941420160b1ef2bf19a7f7f2dereed@google.com 93410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ShaderMaskBench(true, kBW); ) 94410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ShaderMaskBench(false, kBW); ) 95410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ShaderMaskBench(true, kAA); ) 96410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ShaderMaskBench(false, kAA); ) 97410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ShaderMaskBench(true, kLCD); ) 98410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new ShaderMaskBench(false, kLCD); ) 99