From cc586511839400941420160b1ef2bf19a7f7f2de Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Tue, 15 Nov 2011 15:29:45 +0000 Subject: add bench for shader+blitMask git-svn-id: http://skia.googlecode.com/svn/trunk@2685 2bbb7eff-a529-9590-31e7-b0007b416f81 --- bench/ShaderMaskBench.cpp | 109 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 bench/ShaderMaskBench.cpp (limited to 'bench/ShaderMaskBench.cpp') diff --git a/bench/ShaderMaskBench.cpp b/bench/ShaderMaskBench.cpp new file mode 100644 index 0000000000..62be6c5bd0 --- /dev/null +++ b/bench/ShaderMaskBench.cpp @@ -0,0 +1,109 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "SkBenchmark.h" +#include "SkCanvas.h" +#include "SkColorShader.h" +#include "SkFontHost.h" +#include "SkPaint.h" +#include "SkRandom.h" +#include "SkSfntUtils.h" +#include "SkString.h" +#include "SkTemplates.h" + +#define STR "Hamburgefons" + +enum FontQuality { + kBW, + kAA, + kLCD +}; + +static const char* fontQualityName(const SkPaint& paint) { + if (!paint.isAntiAlias()) { + return "BW"; + } + if (paint.isLCDRenderText()) { + return "LCD"; + } + return "AA"; +} + +class ShaderMaskBench : public SkBenchmark { + SkPaint fPaint; + SkString fText; + SkString fName; + FontQuality fFQ; + enum { N = SkBENCHLOOP(500) }; +public: + ShaderMaskBench(void* param, bool isOpaque, FontQuality fq) : INHERITED(param) { + fFQ = fq; + fText.set(STR); + + fPaint.setAntiAlias(kBW != fq); + fPaint.setLCDRenderText(kLCD == fq); + fPaint.setAlpha(isOpaque ? 0xFF : 0x80); + fPaint.setShader(new SkColorShader)->unref(); + } + +protected: + virtual const char* onGetName() { + fName.printf("shadermask", SkScalarToFloat(fPaint.getTextSize())); + fName.appendf("_%s", fontQualityName(fPaint)); + fName.appendf("_%02X", fPaint.getAlpha()); + return fName.c_str(); + } + + virtual void onDraw(SkCanvas* canvas) { + const SkIPoint dim = this->getSize(); + SkRandom rand; + + SkPaint paint(fPaint); + this->setupPaint(&paint); + // explicitly need these + paint.setAlpha(fPaint.getAlpha()); + paint.setAntiAlias(kBW != fFQ); + paint.setLCDRenderText(kLCD == fFQ); + + const SkScalar x0 = SkIntToScalar(-10); + const SkScalar y0 = SkIntToScalar(-10); + + paint.setTextSize(SkIntToScalar(12)); + for (int i = 0; i < N; i++) { + SkScalar x = x0 + rand.nextUScalar1() * dim.fX; + SkScalar y = y0 + rand.nextUScalar1() * dim.fY; + canvas->drawText(fText.c_str(), fText.size(), x, y, paint); + } + + paint.setTextSize(SkIntToScalar(48)); + for (int i = 0; i < N/4; i++) { + SkScalar x = x0 + rand.nextUScalar1() * dim.fX; + SkScalar y = y0 + rand.nextUScalar1() * dim.fY; + canvas->drawText(fText.c_str(), fText.size(), x, y, paint); + } + } + +private: + typedef SkBenchmark INHERITED; +}; + +/////////////////////////////////////////////////////////////////////////////// + +static SkBenchmark* Fact00(void* p) { return new ShaderMaskBench(p, true, kBW); } +static SkBenchmark* Fact01(void* p) { return new ShaderMaskBench(p, false, kBW); } +static SkBenchmark* Fact10(void* p) { return new ShaderMaskBench(p, true, kAA); } +static SkBenchmark* Fact11(void* p) { return new ShaderMaskBench(p, false, kAA); } +static SkBenchmark* Fact20(void* p) { return new ShaderMaskBench(p, true, kLCD); } +static SkBenchmark* Fact21(void* p) { return new ShaderMaskBench(p, false, kLCD); } + +static BenchRegistry gReg00(Fact00); +static BenchRegistry gReg01(Fact01); +static BenchRegistry gReg10(Fact10); +static BenchRegistry gReg11(Fact11); +static BenchRegistry gReg20(Fact20); +static BenchRegistry gReg21(Fact21); + -- cgit v1.2.3