// 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 #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 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->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(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)