• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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;
20     bool     fDoLCD;
21 public:
FontScalerBench(bool doLCD)22     FontScalerBench(bool doLCD)  {
23         fName.printf("fontscaler_%s", doLCD ? "lcd" : "aa");
24         fText.set("abcdefghijklmnopqrstuvwxyz01234567890");
25         fDoLCD = doLCD;
26     }
27 
28 protected:
onGetName()29     virtual const char* onGetName() { return fName.c_str(); }
onDraw(const int loops,SkCanvas * canvas)30     virtual void onDraw(const int loops, SkCanvas* canvas) {
31         SkPaint paint;
32         this->setupPaint(&paint);
33         paint.setLCDRenderText(fDoLCD);
34 
35         bool prev = gSkSuppressFontCachePurgeSpew;
36         gSkSuppressFontCachePurgeSpew = true;
37 
38         for (int i = 0; i < loops; i++) {
39             // this is critical - we want to time the creation process, so we
40             // explicitly flush our cache before each run
41             SkGraphics::PurgeFontCache();
42 
43             for (int ps = 9; ps <= 24; ps += 2) {
44                 paint.setTextSize(SkIntToScalar(ps));
45                 canvas->drawText(fText.c_str(), fText.size(),
46                         0, SkIntToScalar(20), paint);
47             }
48         }
49 
50         gSkSuppressFontCachePurgeSpew = prev;
51     }
52 private:
53     typedef SkBenchmark INHERITED;
54 };
55 
56 ///////////////////////////////////////////////////////////////////////////////
57 
58 DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (false)); )
59 DEF_BENCH( return SkNEW_ARGS(FontScalerBench, (true)); )
60