1 /*
2 * Copyright 2013 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 "gm.h"
9 #include "SkCanvas.h"
10 #include "SkGraphics.h"
11 #include "SkTypeface.h"
12
13 // GM to stress the GPU font cache
14
draw_string(SkCanvas * canvas,const SkString & text,SkScalar x,SkScalar y,const SkPaint & paint)15 static SkScalar draw_string(SkCanvas* canvas, const SkString& text, SkScalar x,
16 SkScalar y, const SkPaint& paint) {
17 canvas->drawText(text.c_str(), text.size(), x, y, paint);
18 return x + paint.measureText(text.c_str(), text.size());
19 }
20
21 class FontCacheGM : public skiagm::GM {
22 public:
FontCacheGM()23 FontCacheGM() {
24 fTypefaces[0] = NULL;
25 fTypefaces[1] = NULL;
26 }
27
~FontCacheGM()28 virtual ~FontCacheGM() {
29 SkSafeUnref(fTypefaces[0]);
30 SkSafeUnref(fTypefaces[1]);
31 }
32
33 protected:
onShortName()34 SkString onShortName() override {
35 return SkString("fontcache");
36 }
37
onISize()38 SkISize onISize() override {
39 return SkISize::Make(1280, 640);
40 }
41
onOnceBeforeDraw()42 void onOnceBeforeDraw() override {
43 fTypefaces[0] = sk_tool_utils::create_portable_typeface("serif", SkTypeface::kItalic);
44 fTypefaces[1] = sk_tool_utils::create_portable_typeface("sans-serif", SkTypeface::kItalic);
45 }
46
onDraw(SkCanvas * canvas)47 void onDraw(SkCanvas* canvas) override {
48 SkPaint paint;
49 paint.setAntiAlias(true);
50 paint.setLCDRenderText(true);
51 paint.setSubpixelText(true);
52 paint.setTypeface(fTypefaces[0]);
53 paint.setTextSize(192);
54
55 // Make sure the nul character does not cause problems.
56 paint.measureText("\0", 1);
57
58 SkScalar x = 20;
59 SkScalar y = 128;
60 SkString text("ABCDEFGHIJ");
61 draw_string(canvas, text, x, y, paint);
62 y += 100;
63 SkString text2("KLMNOPQRS");
64 draw_string(canvas, text2, x, y, paint);
65 y += 100;
66 SkString text3("TUVWXYZ012");
67 draw_string(canvas, text3, x, y, paint);
68 y += 100;
69 paint.setTypeface(fTypefaces[1]);
70 draw_string(canvas, text, x, y, paint);
71 y += 100;
72 draw_string(canvas, text2, x, y, paint);
73 y += 100;
74 draw_string(canvas, text3, x, y, paint);
75 y += 100;
76 }
77
78 private:
79 SkTypeface* fTypefaces[2];
80 typedef GM INHERITED;
81 };
82
83
84 //////////////////////////////////////////////////////////////////////////////
85
86 DEF_GM( return SkNEW(FontCacheGM); )
87