Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 |
| 9 #include "Benchmark.h" | 9 #include "Benchmark.h" |
| 10 #include "Resources.h" | 10 #include "Resources.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 45 SkPaint fPaint; | 45 SkPaint fPaint; |
| 46 SkString fText; | 46 SkString fText; |
| 47 SkString fName; | 47 SkString fName; |
| 48 FontQuality fFQ; | 48 FontQuality fFQ; |
| 49 bool fDoPos; | 49 bool fDoPos; |
| 50 bool fDoColorEmoji; | 50 bool fDoColorEmoji; |
| 51 SkAutoTUnref<SkTypeface> fColorEmojiTypeface; | 51 SkAutoTUnref<SkTypeface> fColorEmojiTypeface; |
| 52 SkPoint* fPos; | 52 SkPoint* fPos; |
| 53 public: | 53 public: |
| 54 TextBench(const char text[], int ps, | 54 TextBench(const char text[], int ps, |
| 55 SkColor color, FontQuality fq, bool doColorEmoji = false, bool doP os = false) { | 55 SkColor color, FontQuality fq, bool doColorEmoji = false, bool doP os = false) |
| 56 fPos = NULL; | 56 : fText(text) |
| 57 fFQ = fq; | 57 , fFQ(fq) |
| 58 fDoPos = doPos; | 58 , fDoPos(doPos) |
| 59 fDoColorEmoji = doColorEmoji; | 59 , fDoColorEmoji(doColorEmoji) |
| 60 fText.set(text); | 60 , fPos(NULL) { |
| 61 | |
| 62 fPaint.setAntiAlias(kBW != fq); | 61 fPaint.setAntiAlias(kBW != fq); |
| 63 fPaint.setLCDRenderText(kLCD == fq); | 62 fPaint.setLCDRenderText(kLCD == fq); |
| 64 fPaint.setTextSize(SkIntToScalar(ps)); | 63 fPaint.setTextSize(SkIntToScalar(ps)); |
| 65 fPaint.setColor(color); | 64 fPaint.setColor(color); |
| 65 } | |
| 66 | 66 |
| 67 if (doColorEmoji) { | 67 virtual ~TextBench() { |
| 68 delete[] fPos; | |
| 69 } | |
| 70 | |
| 71 protected: | |
| 72 void onPreDraw() override { | |
| 73 if (fDoColorEmoji) { | |
| 68 SkASSERT(kBW == fFQ); | 74 SkASSERT(kBW == fFQ); |
| 69 fColorEmojiTypeface.reset(GetResourceAsTypeface("/fonts/Funkster.ttf ")); | 75 fColorEmojiTypeface.reset(GetResourceAsTypeface("/fonts/Funkster.ttf ")); |
| 70 } | 76 } |
| 71 | 77 |
| 72 if (doPos) { | 78 if (fDoPos) { |
| 73 size_t len = strlen(text); | 79 size_t len = fText.size(); |
| 74 SkScalar* adv = new SkScalar[len]; | 80 SkScalar* adv = new SkScalar[len]; |
| 75 fPaint.getTextWidths(text, len, adv); | 81 fPaint.getTextWidths(fText.c_str(), len, adv); |
| 76 fPos = new SkPoint[len]; | 82 fPos = new SkPoint[len]; |
| 77 SkScalar x = 0; | 83 SkScalar x = 0; |
| 78 for (size_t i = 0; i < len; ++i) { | 84 for (size_t i = 0; i < len; ++i) { |
| 79 fPos[i].set(x, SkIntToScalar(50)); | 85 fPos[i].set(x, SkIntToScalar(50)); |
| 80 x += adv[i]; | 86 x += adv[i]; |
| 81 } | 87 } |
| 82 delete[] adv; | 88 delete[] adv; |
| 83 } | 89 } |
| 84 } | 90 } |
| 85 | 91 |
| 86 virtual ~TextBench() { | |
| 87 delete[] fPos; | |
| 88 } | |
| 89 | 92 |
| 90 protected: | |
| 91 virtual const char* onGetName() { | 93 virtual const char* onGetName() { |
| 92 fName.printf("text_%g", SkScalarToFloat(fPaint.getTextSize())); | 94 fName.printf("text_%g", SkScalarToFloat(fPaint.getTextSize())); |
|
mtklein
2015/05/21 13:09:25
Kind of weird that this builds fName in place then
| |
| 93 if (fDoPos) { | 95 if (fDoPos) { |
| 94 fName.append("_pos"); | 96 fName.append("_pos"); |
| 95 } | 97 } |
| 96 fName.appendf("_%s", fontQualityName(fPaint)); | 98 fName.appendf("_%s", fontQualityName(fPaint)); |
| 97 if (SK_ColorBLACK != fPaint.getColor()) { | 99 if (SK_ColorBLACK != fPaint.getColor()) { |
| 98 fName.appendf("_%02X", fPaint.getAlpha()); | 100 fName.appendf("_%02X", fPaint.getAlpha()); |
| 99 } else { | 101 } else { |
| 100 fName.append("_BK"); | 102 fName.append("_BK"); |
| 101 } | 103 } |
| 102 | 104 |
| 103 if (fDoColorEmoji && fColorEmojiTypeface) { | 105 if (fDoColorEmoji) { |
| 104 fName.append("_ColorEmoji"); | 106 fName.append("_ColorEmoji"); |
| 105 } | 107 } |
| 106 | 108 |
| 107 return fName.c_str(); | 109 return fName.c_str(); |
| 108 } | 110 } |
| 109 | 111 |
| 110 virtual void onDraw(const int loops, SkCanvas* canvas) { | 112 virtual void onDraw(const int loops, SkCanvas* canvas) { |
| 111 const SkIPoint dim = this->getSize(); | 113 const SkIPoint dim = this->getSize(); |
| 112 SkRandom rand; | 114 SkRandom rand; |
| 113 | 115 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kLCD); ) | 163 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kLCD); ) |
| 162 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kLCD); ) | 164 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kLCD); ) |
| 163 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kLCD); ) | 165 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kLCD); ) |
| 164 | 166 |
| 165 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kBW, true); ) | 167 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kBW, true); ) |
| 166 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kBW, true); ) | 168 DEF_BENCH( return new TextBench(STR, 16, 0xFFFF0000, kBW, true); ) |
| 167 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kBW, true); ) | 169 DEF_BENCH( return new TextBench(STR, 16, 0x88FF0000, kBW, true); ) |
| 168 | 170 |
| 169 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kBW, true, true); ) | 171 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kBW, true, true); ) |
| 170 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kAA, false, true); ) | 172 DEF_BENCH( return new TextBench(STR, 16, 0xFF000000, kAA, false, true); ) |
| OLD | NEW |