From 055af884c8f1a0a2e5b4ded400ea7af27295dfc1 Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Wed, 23 Nov 2011 15:52:02 +0000 Subject: add test for drawPosText, to measure any difference it introduces given that it has to transform each char's position (unlike drawText) git-svn-id: http://skia.googlecode.com/svn/trunk@2742 2bbb7eff-a529-9590-31e7-b0007b416f81 --- bench/TextBench.cpp | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) (limited to 'bench/TextBench.cpp') diff --git a/bench/TextBench.cpp b/bench/TextBench.cpp index e252ead4a3..63a71673ad 100644 --- a/bench/TextBench.cpp +++ b/bench/TextBench.cpp @@ -44,22 +44,45 @@ class TextBench : public SkBenchmark { SkString fText; SkString fName; FontQuality fFQ; + bool fDoPos; + SkPoint* fPos; enum { N = SkBENCHLOOP(800) }; public: TextBench(void* param, const char text[], int ps, - SkColor color, FontQuality fq) : INHERITED(param) { + SkColor color, FontQuality fq, bool doPos = false) : INHERITED(param) { fFQ = fq; + fDoPos = doPos; fText.set(text); fPaint.setAntiAlias(kBW != fq); fPaint.setLCDRenderText(kLCD == fq); fPaint.setTextSize(SkIntToScalar(ps)); fPaint.setColor(color); + + if (doPos) { + size_t len = strlen(text); + SkScalar* adv = new SkScalar[len]; + fPaint.getTextWidths(text, len, adv); + fPos = new SkPoint[len]; + SkScalar x = 0; + for (size_t i = 0; i < len; ++i) { + fPos[i].set(x, SkIntToScalar(50)); + x += adv[i]; + } + delete[] adv; + } + } + + virtual ~TextBench() { + delete[] fPos; } protected: virtual const char* onGetName() { fName.printf("text_%g", SkScalarToFloat(fPaint.getTextSize())); + if (fDoPos) { + fName.appendf("_pos"); + } fName.appendf("_%s", fontQualityName(fPaint)); if (SK_ColorBLACK != fPaint.getColor()) { fName.appendf("_%02X", fPaint.getAlpha()); @@ -83,10 +106,20 @@ protected: const SkScalar x0 = SkIntToScalar(-10); const SkScalar y0 = SkIntToScalar(-10); + if (fDoPos) { + // realistically, the matrix is often at least translated, so we + // do that since it exercises different code in drawPosText. + canvas->translate(SK_Scalar1, SK_Scalar1); + } + 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); + if (fDoPos) { + canvas->drawPosText(fText.c_str(), fText.size(), fPos, paint); + } else { + SkScalar x = x0 + rand.nextUScalar1() * dim.fX; + SkScalar y = y0 + rand.nextUScalar1() * dim.fY; + canvas->drawText(fText.c_str(), fText.size(), x, y, paint); + } } } @@ -110,6 +143,8 @@ static SkBenchmark* Fact21(void* p) { return new TextBench(p, STR, 16, 0xFF00000 static SkBenchmark* Fact22(void* p) { return new TextBench(p, STR, 16, 0xFFFF0000, kLCD); } static SkBenchmark* Fact23(void* p) { return new TextBench(p, STR, 16, 0x88FF0000, kLCD); } +static SkBenchmark* Fact111(void* p) { return new TextBench(p, STR, 16, 0xFF000000, kAA, true); } + static BenchRegistry gReg01(Fact01); static BenchRegistry gReg02(Fact02); static BenchRegistry gReg03(Fact03); @@ -122,3 +157,4 @@ static BenchRegistry gReg21(Fact21); static BenchRegistry gReg22(Fact22); static BenchRegistry gReg23(Fact23); +static BenchRegistry gReg111(Fact111); -- cgit v1.2.3