Index: bench/FontScalerBench.cpp |
diff --git a/bench/FontScalerBench.cpp b/bench/FontScalerBench.cpp |
index 6ef0703346ea9521d116569ffd992e649e0d8409..5d6f01aef15ff6063be0d95e419d66f525d372f0 100644 |
--- a/bench/FontScalerBench.cpp |
+++ b/bench/FontScalerBench.cpp |
@@ -11,17 +11,44 @@ |
#include "SkPaint.h" |
#include "SkRandom.h" |
#include "SkString.h" |
+#include "SkTypeface.h" |
extern bool gSkSuppressFontCachePurgeSpew; |
+static const struct { |
+ const char* fStyleString; |
+ SkTypeface::Style fStyle; |
+} gStyleNames [] = { |
+ { "normal", SkTypeface::kNormal }, |
+ { "bold", SkTypeface::kBold }, |
+ { "italic", SkTypeface::kItalic }, |
+ { "bolditalic", SkTypeface::kBoldItalic }, |
+}; |
+ |
class FontScalerBench : public SkBenchmark { |
- SkString fName; |
- SkString fText; |
- bool fDoLCD; |
+ SkString fName; |
+ SkString fText; |
+ SkTypeface::Style fStyle; |
+ bool fDoLCD; |
public: |
- FontScalerBench(bool doLCD) { |
- fName.printf("fontscaler_%s", doLCD ? "lcd" : "aa"); |
+ FontScalerBench(SkTypeface::Style style, bool doLCD) { |
+ const char* styleString; |
+ |
+ styleString = gStyleNames[0].fStyleString; |
+ fStyle = gStyleNames[0].fStyle; |
+ |
+ for (unsigned int i = 0; |
+ i < sizeof(gStyleNames) / sizeof(gStyleNames[0]); i++) { |
+ if (gStyleNames[i].fStyle == style) { |
+ styleString = gStyleNames[i].fStyleString; |
+ fStyle = style; |
+ break; |
+ } |
+ } |
+ |
+ fName.printf("fontscaler_%s_%s", styleString, doLCD ? "lcd" : "aa"); |
fText.set("abcdefghijklmnopqrstuvwxyz01234567890"); |
+ |
fDoLCD = doLCD; |
} |
@@ -30,6 +57,9 @@ protected: |
virtual void onDraw(const int loops, SkCanvas* canvas) { |
SkPaint paint; |
this->setupPaint(&paint); |
+ |
+ SkTypeface* face = SkTypeface::CreateFromName(NULL, fStyle); |
+ paint.setTypeface(face); |
paint.setLCDRenderText(fDoLCD); |
bool prev = gSkSuppressFontCachePurgeSpew; |
@@ -40,14 +70,16 @@ protected: |
// explicitly flush our cache before each run |
SkGraphics::PurgeFontCache(); |
- for (int ps = 9; ps <= 24; ps += 2) { |
+ for (int y = 20, ps = 9; ps <= 24; y += ps, ps += 2) { |
paint.setTextSize(SkIntToScalar(ps)); |
canvas->drawText(fText.c_str(), fText.size(), |
- 0, SkIntToScalar(20), paint); |
+ 0, SkIntToScalar(y), paint); |
} |
} |
gSkSuppressFontCachePurgeSpew = prev; |
+ |
+ SkSafeUnref(face); |
} |
private: |
typedef SkBenchmark INHERITED; |
@@ -55,5 +87,11 @@ private: |
/////////////////////////////////////////////////////////////////////////////// |
-DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (false)); ) |
-DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (true)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kNormal, false)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kBold, false)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kItalic, false)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kBoldItalic, false)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kNormal, true)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kBold, true)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kItalic, true)); ) |
+DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (SkTypeface::kBoldItalic, true)); ) |