Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: bench/TextBench.cpp

Issue 914723002: Small change to use a GrGeometryProcessor for all BitmapText draw calls (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: adding bench Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/gpu/GrBitmapTextContext.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8
8 #include "Benchmark.h" 9 #include "Benchmark.h"
10 #include "Resources.h"
9 #include "SkCanvas.h" 11 #include "SkCanvas.h"
10 #include "SkPaint.h" 12 #include "SkPaint.h"
11 #include "SkRandom.h" 13 #include "SkRandom.h"
14 #include "SkStream.h"
12 #include "SkString.h" 15 #include "SkString.h"
13 #include "SkTemplates.h" 16 #include "SkTemplates.h"
17 #include "SkTypeface.h"
14 18
15 enum FontQuality { 19 enum FontQuality {
16 kBW, 20 kBW,
17 kAA, 21 kAA,
18 kLCD 22 kLCD,
19 }; 23 };
20 24
21 static const char* fontQualityName(const SkPaint& paint) { 25 static const char* fontQualityName(const SkPaint& paint) {
22 if (!paint.isAntiAlias()) { 26 if (!paint.isAntiAlias()) {
23 return "BW"; 27 return "BW";
24 } 28 }
25 if (paint.isLCDRenderText()) { 29 if (paint.isLCDRenderText()) {
26 return "LCD"; 30 return "LCD";
27 } 31 }
28 return "AA"; 32 return "AA";
29 } 33 }
30 34
31 /* Some considerations for performance: 35 /* Some considerations for performance:
32 short -vs- long strings (measuring overhead) 36 short -vs- long strings (measuring overhead)
33 tiny -vs- large pointsize (measure blit -vs- overhead) 37 tiny -vs- large pointsize (measure blit -vs- overhead)
34 1 -vs- many point sizes (measure cache lookup) 38 1 -vs- many point sizes (measure cache lookup)
35 normal -vs- subpixel -vs- lineartext (minor) 39 normal -vs- subpixel -vs- lineartext (minor)
36 force purge after each draw to measure scaler 40 force purge after each draw to measure scaler
37 textencoding? 41 textencoding?
38 text -vs- postext - pathtext 42 text -vs- postext - pathtext
39 */ 43 */
40 class TextBench : public Benchmark { 44 class TextBench : public Benchmark {
41 SkPaint fPaint; 45 SkPaint fPaint;
42 SkString fText; 46 SkString fText;
43 SkString fName; 47 SkString fName;
44 FontQuality fFQ; 48 FontQuality fFQ;
45 bool fDoPos; 49 bool fDoPos;
50 bool fDoColorEmoji;
51 SkAutoTUnref<SkTypeface> fColorEmojiTypeface;
46 SkPoint* fPos; 52 SkPoint* fPos;
47 public: 53 public:
48 TextBench(const char text[], int ps, 54 TextBench(const char text[], int ps,
49 SkColor color, FontQuality fq, bool doPos = false) { 55 SkColor color, FontQuality fq, bool doColorEmoji = false, bool doP os = false) {
50 fPos = NULL; 56 fPos = NULL;
51 fFQ = fq; 57 fFQ = fq;
52 fDoPos = doPos; 58 fDoPos = doPos;
59 fDoColorEmoji = doColorEmoji;
53 fText.set(text); 60 fText.set(text);
54 61
55 fPaint.setAntiAlias(kBW != fq); 62 fPaint.setAntiAlias(kBW != fq);
56 fPaint.setLCDRenderText(kLCD == fq); 63 fPaint.setLCDRenderText(kLCD == fq);
57 fPaint.setTextSize(SkIntToScalar(ps)); 64 fPaint.setTextSize(SkIntToScalar(ps));
58 fPaint.setColor(color); 65 fPaint.setColor(color);
59 66
67 if (doColorEmoji) {
68 SkASSERT(kBW == fFQ);
69 SkString filename = GetResourcePath("/Funkster.ttf");
70 SkAutoTDelete<SkFILEStream> stream(new SkFILEStream(filename.c_str() ));
71 if (stream->isValid()) {
72 fColorEmojiTypeface.reset(SkTypeface::CreateFromStream(stream.de tach()));
73 } else {
74 SkDebugf("Could not find Funkster.ttf, please set --resourcePath correctly.\n");
75 }
76 }
77
60 if (doPos) { 78 if (doPos) {
61 size_t len = strlen(text); 79 size_t len = strlen(text);
62 SkScalar* adv = new SkScalar[len]; 80 SkScalar* adv = new SkScalar[len];
63 fPaint.getTextWidths(text, len, adv); 81 fPaint.getTextWidths(text, len, adv);
64 fPos = new SkPoint[len]; 82 fPos = new SkPoint[len];
65 SkScalar x = 0; 83 SkScalar x = 0;
66 for (size_t i = 0; i < len; ++i) { 84 for (size_t i = 0; i < len; ++i) {
67 fPos[i].set(x, SkIntToScalar(50)); 85 fPos[i].set(x, SkIntToScalar(50));
68 x += adv[i]; 86 x += adv[i];
69 } 87 }
(...skipping 10 matching lines...) Expand all
80 fName.printf("text_%g", SkScalarToFloat(fPaint.getTextSize())); 98 fName.printf("text_%g", SkScalarToFloat(fPaint.getTextSize()));
81 if (fDoPos) { 99 if (fDoPos) {
82 fName.append("_pos"); 100 fName.append("_pos");
83 } 101 }
84 fName.appendf("_%s", fontQualityName(fPaint)); 102 fName.appendf("_%s", fontQualityName(fPaint));
85 if (SK_ColorBLACK != fPaint.getColor()) { 103 if (SK_ColorBLACK != fPaint.getColor()) {
86 fName.appendf("_%02X", fPaint.getAlpha()); 104 fName.appendf("_%02X", fPaint.getAlpha());
87 } else { 105 } else {
88 fName.append("_BK"); 106 fName.append("_BK");
89 } 107 }
108
109 if (fDoColorEmoji && fColorEmojiTypeface) {
110 fName.append("_ColorEmoji");
111 }
112
90 return fName.c_str(); 113 return fName.c_str();
91 } 114 }
92 115
93 virtual void onDraw(const int loops, SkCanvas* canvas) { 116 virtual void onDraw(const int loops, SkCanvas* canvas) {
94 const SkIPoint dim = this->getSize(); 117 const SkIPoint dim = this->getSize();
95 SkRandom rand; 118 SkRandom rand;
96 119
97 SkPaint paint(fPaint); 120 SkPaint paint(fPaint);
98 this->setupPaint(&paint); 121 this->setupPaint(&paint);
99 // explicitly need these 122 // explicitly need these
100 paint.setColor(fPaint.getColor()); 123 paint.setColor(fPaint.getColor());
101 paint.setAntiAlias(kBW != fFQ); 124 paint.setAntiAlias(kBW != fFQ);
102 paint.setLCDRenderText(kLCD == fFQ); 125 paint.setLCDRenderText(kLCD == fFQ);
103 126
127 if (fDoColorEmoji && fColorEmojiTypeface) {
128 paint.setTypeface(fColorEmojiTypeface);
129 }
130
104 const SkScalar x0 = SkIntToScalar(-10); 131 const SkScalar x0 = SkIntToScalar(-10);
105 const SkScalar y0 = SkIntToScalar(-10); 132 const SkScalar y0 = SkIntToScalar(-10);
106 133
107 if (fDoPos) { 134 if (fDoPos) {
108 // realistically, the matrix is often at least translated, so we 135 // realistically, the matrix is often at least translated, so we
109 // do that since it exercises different code in drawPosText. 136 // do that since it exercises different code in drawPosText.
110 canvas->translate(SK_Scalar1, SK_Scalar1); 137 canvas->translate(SK_Scalar1, SK_Scalar1);
111 } 138 }
112 139
113 for (int i = 0; i < loops; i++) { 140 for (int i = 0; i < loops; i++) {
(...skipping 20 matching lines...) Expand all
134 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kBW); ) 161 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kBW); )
135 162
136 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kAA); ) 163 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kAA); )
137 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kAA); ) 164 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kAA); )
138 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kAA); ) 165 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kAA); )
139 166
140 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kLCD); ) 167 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kLCD); )
141 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kLCD); ) 168 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kLCD); )
142 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kLCD); ) 169 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kLCD); )
143 170
144 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kAA, true); ) 171 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kBW, true); )
172 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kBW, true); )
173 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kBW, true); )
174
175 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kBW, true, true); )
176 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kAA, false, true); )
OLDNEW
« no previous file with comments | « no previous file | src/gpu/GrBitmapTextContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698