skia2/modules/skparagraph/bench/ParagraphBench.cpp
Ben Wagner ebebf6e2b5 Move SkParagraph bits into skparagraph directory.
This makes it more obvious that these files really are part of
SkParagraph and integrate with the Skia test framework and are not part
of core Skia. This is more like how Skottie is setup and helps prevent
misunderstandings about where additional files like this should go and
how the build should be structured.

Change-Id: Iaac060c97cffd2b0c29833c7b0403521d91bdb6a
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/292439
Reviewed-by: Julia Lavrova <jlavrova@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2020-05-28 13:59:18 +00:00

65 lines
2.3 KiB
C++

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