• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015 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 "Resources.h"
10 #include "SkCanvas.h"
11 #include "SkPaint.h"
12 #include "SkRandom.h"
13 #include "SkStream.h"
14 #include "SkString.h"
15 #include "SkTemplates.h"
16 #include "SkTextBlob.h"
17 #include "SkTypeface.h"
18 
19 #include "sk_tool_utils.h"
20 
21 /*
22  * A trivial test which benchmarks the performance of a textblob with a single run.
23  */
24 class TextBlobBench : public Benchmark {
25 public:
TextBlobBench()26     TextBlobBench() {}
27 
28 protected:
onDelayedSetup()29     void onDelayedSetup() override {
30         fTypeface = sk_tool_utils::create_portable_typeface("serif", SkFontStyle());
31         // make textblob
32         SkPaint paint;
33         paint.setTypeface(fTypeface);
34         const char* text = "Hello blob!";
35         SkTDArray<uint16_t> glyphs;
36         size_t len = strlen(text);
37         glyphs.append(paint.textToGlyphs(text, len, nullptr));
38         paint.textToGlyphs(text, len, glyphs.begin());
39 
40         SkTextBlobBuilder builder;
41 
42         paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
43         const SkTextBlobBuilder::RunBuffer& run = builder.allocRun(paint, glyphs.count(), 10, 10,
44                                                                    nullptr);
45         memcpy(run.glyphs, glyphs.begin(), glyphs.count() * sizeof(uint16_t));
46 
47         fBlob = builder.make();
48     }
49 
onGetName()50     const char* onGetName() override {
51         return "TextBlobBench";
52     }
53 
onDraw(int loops,SkCanvas * canvas)54     void onDraw(int loops, SkCanvas* canvas) override {
55         SkPaint paint;
56 
57         // To ensure maximum caching, we just redraw the blob at the same place everytime
58         for (int i = 0; i < loops; i++) {
59             canvas->drawTextBlob(fBlob, 0, 0, paint);
60         }
61     }
62 
63 private:
64 
65     sk_sp<SkTextBlob>   fBlob;
66     SkTDArray<uint16_t> fGlyphs;
67     sk_sp<SkTypeface>   fTypeface;
68 
69     typedef Benchmark INHERITED;
70 };
71 
72 DEF_BENCH( return new TextBlobBench(); )
73