OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkBenchmark.h" | 8 #include "Benchmark.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
11 #include "SkTypeface.h" | 11 #include "SkTypeface.h" |
12 | 12 |
13 enum { | 13 enum { |
14 NGLYPHS = 100 | 14 NGLYPHS = 100 |
15 }; | 15 }; |
16 | 16 |
17 static SkTypeface::Encoding paint2Encoding(const SkPaint& paint) { | 17 static SkTypeface::Encoding paint2Encoding(const SkPaint& paint) { |
18 SkPaint::TextEncoding enc = paint.getTextEncoding(); | 18 SkPaint::TextEncoding enc = paint.getTextEncoding(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 static void charsToGlyphsNull_proc(int loops, const SkPaint& paint, const void*
text, | 55 static void charsToGlyphsNull_proc(int loops, const SkPaint& paint, const void*
text, |
56 size_t len, int glyphCount) { | 56 size_t len, int glyphCount) { |
57 SkTypeface::Encoding encoding = paint2Encoding(paint); | 57 SkTypeface::Encoding encoding = paint2Encoding(paint); |
58 | 58 |
59 SkTypeface* face = paint.getTypeface(); | 59 SkTypeface* face = paint.getTypeface(); |
60 for (int i = 0; i < loops; ++i) { | 60 for (int i = 0; i < loops; ++i) { |
61 face->charsToGlyphs(text, encoding, NULL, glyphCount); | 61 face->charsToGlyphs(text, encoding, NULL, glyphCount); |
62 } | 62 } |
63 } | 63 } |
64 | 64 |
65 class CMAPBench : public SkBenchmark { | 65 class CMAPBench : public Benchmark { |
66 TypefaceProc fProc; | 66 TypefaceProc fProc; |
67 SkString fName; | 67 SkString fName; |
68 char fText[NGLYPHS]; | 68 char fText[NGLYPHS]; |
69 SkPaint fPaint; | 69 SkPaint fPaint; |
70 | 70 |
71 public: | 71 public: |
72 CMAPBench(TypefaceProc proc, const char name[]) { | 72 CMAPBench(TypefaceProc proc, const char name[]) { |
73 fProc = proc; | 73 fProc = proc; |
74 fName.printf("cmap_%s", name); | 74 fName.printf("cmap_%s", name); |
75 | 75 |
76 for (int i = 0; i < NGLYPHS; ++i) { | 76 for (int i = 0; i < NGLYPHS; ++i) { |
77 // we're jamming values into utf8, so we must keep it legal utf8 | 77 // we're jamming values into utf8, so we must keep it legal utf8 |
78 fText[i] = 'A' + (i & 31); | 78 fText[i] = 'A' + (i & 31); |
79 } | 79 } |
80 fPaint.setTypeface(SkTypeface::RefDefault())->unref(); | 80 fPaint.setTypeface(SkTypeface::RefDefault())->unref(); |
81 } | 81 } |
82 | 82 |
83 protected: | 83 protected: |
84 virtual const char* onGetName() SK_OVERRIDE { | 84 virtual const char* onGetName() SK_OVERRIDE { |
85 return fName.c_str(); | 85 return fName.c_str(); |
86 } | 86 } |
87 | 87 |
88 virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { | 88 virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE { |
89 fProc(loops, fPaint, fText, sizeof(fText), NGLYPHS); | 89 fProc(loops, fPaint, fText, sizeof(fText), NGLYPHS); |
90 } | 90 } |
91 | 91 |
92 private: | 92 private: |
93 | 93 |
94 typedef SkBenchmark INHERITED; | 94 typedef Benchmark INHERITED; |
95 }; | 95 }; |
96 | 96 |
97 ////////////////////////////////////////////////////////////////////////////// | 97 ////////////////////////////////////////////////////////////////////////////// |
98 | 98 |
99 DEF_BENCH( return new CMAPBench(containsText_proc, "paint_containsText"); ) | 99 DEF_BENCH( return new CMAPBench(containsText_proc, "paint_containsText"); ) |
100 DEF_BENCH( return new CMAPBench(textToGlyphs_proc, "paint_textToGlyphs"); ) | 100 DEF_BENCH( return new CMAPBench(textToGlyphs_proc, "paint_textToGlyphs"); ) |
101 DEF_BENCH( return new CMAPBench(charsToGlyphs_proc, "face_charsToGlyphs"); ) | 101 DEF_BENCH( return new CMAPBench(charsToGlyphs_proc, "face_charsToGlyphs"); ) |
102 DEF_BENCH( return new CMAPBench(charsToGlyphsNull_proc, "face_charsToGlyphs_null
"); ) | 102 DEF_BENCH( return new CMAPBench(charsToGlyphsNull_proc, "face_charsToGlyphs_null
"); ) |
OLD | NEW |