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