| // Copyright 2019 Google LLC. |
| // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. |
| |
| #include "bench/Benchmark.h" |
| |
| #if !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_GOOGLE3) |
| |
| #include "modules/skparagraph/include/FontCollection.h" |
| #include "modules/skparagraph/include/Paragraph.h" |
| #include "modules/skparagraph/src/ParagraphBuilderImpl.h" |
| #include "modules/skparagraph/src/ParagraphImpl.h" |
| #include "tools/Resources.h" |
| |
| #include <cfloat> |
| #include "include/core/SkPictureRecorder.h" |
| #include "modules/skparagraph/utils/TestFontCollection.h" |
| |
| using namespace skia::textlayout; |
| namespace { |
| struct ParagraphBench : public Benchmark { |
| ParagraphBench(SkScalar width, const char* r, const char* n) |
| : fResource(r), fName(n), fWidth(width) {} |
| sk_sp<SkData> fData; |
| const char* fResource; |
| const char* fName; |
| SkScalar fWidth; |
| const char* onGetName() override { return fName; } |
| bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } |
| void onDelayedSetup() override { fData = GetResourceAsData(fResource); } |
| void onDraw(int loops, SkCanvas*) override { |
| if (!fData) { |
| return; |
| } |
| |
| const char* text = (const char*)fData->data(); |
| |
| auto fontCollection = sk_make_sp<FontCollection>(); |
| fontCollection->setDefaultFontManager(SkFontMgr::RefDefault()); |
| ParagraphStyle paragraph_style; |
| paragraph_style.turnHintingOff(); |
| ParagraphBuilderImpl builder(paragraph_style, fontCollection); |
| builder.addText(text); |
| auto paragraph = builder.Build(); |
| |
| SkPictureRecorder rec; |
| SkCanvas* canvas = rec.beginRecording({0,0, 2000,3000}); |
| while (loops-- > 0) { |
| paragraph->layout(fWidth); |
| auto impl = static_cast<ParagraphImpl*>(paragraph.get()); |
| paragraph->paint(canvas, 0, 0); |
| paragraph->markDirty(); |
| impl->resetCache(); |
| } |
| } |
| }; |
| } // namespace |
| |
| #define PARAGRAPH_BENCH(X) DEF_BENCH(return new ParagraphBench(50000, "text/" #X ".txt", "paragraph_" #X);) |
| //PARAGRAPH_BENCH(arabic) |
| //PARAGRAPH_BENCH(emoji) |
| PARAGRAPH_BENCH(english) |
| #undef PARAGRAPH_BENCH |
| |
| #endif // !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) && !defined(SK_BUILD_FOR_GOOGLE3) |