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 "Benchmark.h"
9 #include "SkCanvas.h"
10 #include "SkGraphics.h"
11 #include "SkPaint.h"
12 #include "SkRandom.h"
13 #include "SkString.h"
14 
15 class FontScalerBench : public Benchmark {
16     SkString fName;
17     SkString fText;
18     bool     fDoLCD;
19 public:
20     FontScalerBench(bool doLCD)  {
21         fName.printf("fontscaler_%s", doLCD ? "lcd" : "aa");
22         fText.set("abcdefghijklmnopqrstuvwxyz01234567890");
23         fDoLCD = doLCD;
24     }
25 
26 protected:
27     virtual const char* onGetName() { return fName.c_str(); }
28     virtual void onDraw(int loops, SkCanvas* canvas) {
29         SkPaint paint;
30         this->setupPaint(&paint);
31         paint.setLCDRenderText(fDoLCD);
32 
33         for (int i = 0; i < loops; i++) {
34             // this is critical - we want to time the creation process, so we
35             // explicitly flush our cache before each run
36             SkGraphics::PurgeFontCache();
37 
38             for (int ps = 9; ps <= 24; ps += 2) {
39                 paint.setTextSize(SkIntToScalar(ps));
40                 canvas->drawString(fText,
41                         0, SkIntToScalar(20), paint);
42             }
43         }
44     }
45 private:
46     typedef Benchmark INHERITED;
47 };
48 
49 ///////////////////////////////////////////////////////////////////////////////
50 
51 DEF_BENCH(return new FontScalerBench(false);)
52 DEF_BENCH(return new FontScalerBench(true);)
53