blob: b25c9755799590b4f9e55be33842cc2ab3adbeb5 [file] [log] [blame]
joshualitteef5b3e2015-04-03 08:07:26 -07001/*
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 */
24class TextBlobBench : public Benchmark {
25public:
bungeman13b9c952016-05-12 10:09:30 -070026 TextBlobBench() {}
kkinnunenb4a797f2015-05-21 06:15:28 -070027
28protected:
joshualitt8a6697a2015-09-30 12:11:07 -070029 void onDelayedSetup() override {
mbocee6a9912016-05-31 11:42:36 -070030 fTypeface = sk_tool_utils::create_portable_typeface("serif", SkFontStyle());
joshualitteef5b3e2015-04-03 08:07:26 -070031 // 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);
halcanary96fcdcc2015-08-27 07:41:13 -070037 glyphs.append(paint.textToGlyphs(text, len, nullptr));
joshualitteef5b3e2015-04-03 08:07:26 -070038 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,
halcanary96fcdcc2015-08-27 07:41:13 -070044 nullptr);
joshualitteef5b3e2015-04-03 08:07:26 -070045 memcpy(run.glyphs, glyphs.begin(), glyphs.count() * sizeof(uint16_t));
46
fmalita37283c22016-09-13 10:00:23 -070047 fBlob = builder.make();
joshualitteef5b3e2015-04-03 08:07:26 -070048 }
49
mtkleinf0599002015-07-13 06:18:39 -070050 const char* onGetName() override {
joshualitteef5b3e2015-04-03 08:07:26 -070051 return "TextBlobBench";
52 }
53
mtkleina1ebeb22015-10-01 09:43:39 -070054 void onDraw(int loops, SkCanvas* canvas) override {
joshualitteef5b3e2015-04-03 08:07:26 -070055 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
63private:
64
fmalita37283c22016-09-13 10:00:23 -070065 sk_sp<SkTextBlob> fBlob;
66 SkTDArray<uint16_t> fGlyphs;
67 sk_sp<SkTypeface> fTypeface;
joshualitteef5b3e2015-04-03 08:07:26 -070068
69 typedef Benchmark INHERITED;
70};
71
72DEF_BENCH( return new TextBlobBench(); )