| reed@google.com | 6e5a45c | 2011-11-02 21:02:57 +0000 | [diff] [blame] | 1 | /* | 
 | 2 |  * Copyright 2011 Google Inc. | 
 | 3 |  * | 
 | 4 |  * Use of this source code is governed by a BSD-style license that can be | 
 | 5 |  * found in the LICENSE file. | 
 | 6 |  */ | 
 | 7 |  | 
 | 8 | #include "SkBenchmark.h" | 
 | 9 | #include "SkCanvas.h" | 
 | 10 | #include "SkGraphics.h" | 
 | 11 | #include "SkPaint.h" | 
 | 12 | #include "SkRandom.h" | 
 | 13 | #include "SkString.h" | 
 | 14 |  | 
 | 15 | extern bool gSkSuppressFontCachePurgeSpew; | 
 | 16 |  | 
 | 17 | class FontScalerBench : public SkBenchmark { | 
 | 18 |     SkString fName; | 
 | 19 |     SkString fText; | 
| reed@google.com | 8e372c9 | 2011-11-03 13:45:38 +0000 | [diff] [blame] | 20 |     bool     fDoLCD; | 
| reed@google.com | 6e5a45c | 2011-11-02 21:02:57 +0000 | [diff] [blame] | 21 | public: | 
| reed@google.com | 8e372c9 | 2011-11-03 13:45:38 +0000 | [diff] [blame] | 22 |     FontScalerBench(void* param, bool doLCD) : INHERITED(param) { | 
 | 23 |         fName.printf("fontscaler_%s", doLCD ? "lcd" : "aa"); | 
| reed@google.com | 6e5a45c | 2011-11-02 21:02:57 +0000 | [diff] [blame] | 24 |         fText.set("abcdefghijklmnopqrstuvwxyz01234567890"); | 
| reed@google.com | 8e372c9 | 2011-11-03 13:45:38 +0000 | [diff] [blame] | 25 |         fDoLCD = doLCD; | 
| reed@google.com | 6e5a45c | 2011-11-02 21:02:57 +0000 | [diff] [blame] | 26 |     } | 
 | 27 |  | 
 | 28 | protected: | 
 | 29 |     virtual const char* onGetName() { return fName.c_str(); } | 
 | 30 |     virtual void onDraw(SkCanvas* canvas) { | 
 | 31 |         SkPaint paint; | 
 | 32 |         this->setupPaint(&paint); | 
| reed@google.com | 8e372c9 | 2011-11-03 13:45:38 +0000 | [diff] [blame] | 33 |         paint.setLCDRenderText(fDoLCD); | 
| reed@google.com | 6e5a45c | 2011-11-02 21:02:57 +0000 | [diff] [blame] | 34 |  | 
 | 35 |         bool prev = gSkSuppressFontCachePurgeSpew; | 
 | 36 |         gSkSuppressFontCachePurgeSpew = true; | 
 | 37 |  | 
 | 38 |         // this is critical - we want to time the creation process, so we | 
 | 39 |         // explicitly flush our cache before each run | 
| reed@google.com | 073c907 | 2011-11-08 20:03:48 +0000 | [diff] [blame] | 40 |         SkGraphics::PurgeFontCache(); | 
 | 41 |  | 
| reed@google.com | 6e5a45c | 2011-11-02 21:02:57 +0000 | [diff] [blame] | 42 |         for (int ps = 9; ps <= 24; ps += 2) { | 
 | 43 |             paint.setTextSize(SkIntToScalar(ps)); | 
 | 44 |             canvas->drawText(fText.c_str(), fText.size(), | 
 | 45 |                              0, SkIntToScalar(20), paint); | 
 | 46 |         } | 
 | 47 |  | 
 | 48 |         gSkSuppressFontCachePurgeSpew = prev; | 
 | 49 |     } | 
 | 50 | private: | 
 | 51 |     typedef SkBenchmark INHERITED; | 
 | 52 | }; | 
 | 53 |  | 
 | 54 | /////////////////////////////////////////////////////////////////////////////// | 
 | 55 |  | 
| reed@google.com | 8e372c9 | 2011-11-03 13:45:38 +0000 | [diff] [blame] | 56 | static SkBenchmark* Fact0(void* p) { return SkNEW_ARGS(FontScalerBench, (p, false)); } | 
 | 57 | static SkBenchmark* Fact1(void* p) { return SkNEW_ARGS(FontScalerBench, (p, true)); } | 
| reed@google.com | 6e5a45c | 2011-11-02 21:02:57 +0000 | [diff] [blame] | 58 |  | 
| reed@google.com | 8e372c9 | 2011-11-03 13:45:38 +0000 | [diff] [blame] | 59 | static BenchRegistry gReg0(Fact0); | 
 | 60 | static BenchRegistry gReg1(Fact1); |