Revert "Store FontCollection in MinikinPaint"
This regresses the performance.
Bug: 69165958
This reverts commit c0a35e7b0e.
Change-Id: I86f0b55dc83fdde4ca04659ec0f7bb3589f571fa
This commit is contained in:
@@ -137,15 +137,18 @@ class Run {
|
||||
|
||||
class StyleRun : public Run {
|
||||
public:
|
||||
StyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint, bool isRtl)
|
||||
: Run(start, end), mPaint(std::move(paint)), mIsRtl(isRtl) {}
|
||||
StyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint,
|
||||
std::shared_ptr<minikin::FontCollection>&& collection, bool isRtl)
|
||||
: Run(start, end), mPaint(std::move(paint)), mCollection(std::move(collection)),
|
||||
mIsRtl(isRtl) {}
|
||||
|
||||
void addTo(minikin::LineBreaker* lineBreaker) override {
|
||||
lineBreaker->addStyleRun(&mPaint, mStart, mEnd, mIsRtl);
|
||||
lineBreaker->addStyleRun(&mPaint, mCollection, mStart, mEnd, mIsRtl);
|
||||
}
|
||||
|
||||
private:
|
||||
minikin::MinikinPaint mPaint;
|
||||
std::shared_ptr<minikin::FontCollection> mCollection;
|
||||
const bool mIsRtl;
|
||||
};
|
||||
|
||||
@@ -173,8 +176,10 @@ class StaticLayoutNative {
|
||||
mIndents(std::move(indents)), mLeftPaddings(std::move(leftPaddings)),
|
||||
mRightPaddings(std::move(rightPaddings)) {}
|
||||
|
||||
void addStyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint, bool isRtl) {
|
||||
mRuns.emplace_back(std::make_unique<StyleRun>(start, end, std::move(paint), isRtl));
|
||||
void addStyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint,
|
||||
std::shared_ptr<minikin::FontCollection> collection, bool isRtl) {
|
||||
mRuns.emplace_back(std::make_unique<StyleRun>(
|
||||
start, end, std::move(paint), std::move(collection), isRtl));
|
||||
}
|
||||
|
||||
void addReplacementRun(int32_t start, int32_t end, float width, uint32_t localeListId) {
|
||||
@@ -329,7 +334,7 @@ static void nAddStyleRun(jlong nativePtr, jlong nativePaint, jint start, jint en
|
||||
Paint* paint = reinterpret_cast<Paint*>(nativePaint);
|
||||
const Typeface* typeface = Typeface::resolveDefault(paint->getAndroidTypeface());
|
||||
minikin::MinikinPaint minikinPaint = MinikinUtils::prepareMinikinPaint(paint, typeface);
|
||||
builder->addStyleRun(start, end, std::move(minikinPaint), isRtl);
|
||||
builder->addStyleRun(start, end, std::move(minikinPaint), typeface->fFontCollection, isRtl);
|
||||
}
|
||||
|
||||
// CriticalNative
|
||||
|
||||
@@ -30,43 +30,46 @@ minikin::MinikinPaint MinikinUtils::prepareMinikinPaint(const Paint* paint,
|
||||
const Typeface* typeface) {
|
||||
const Typeface* resolvedFace = Typeface::resolveDefault(typeface);
|
||||
minikin::FontStyle resolved = resolvedFace->fStyle;
|
||||
|
||||
const minikin::FontVariant minikinVariant =
|
||||
(paint->getFontVariant() == minikin::FontVariant::ELEGANT)
|
||||
? minikin::FontVariant::ELEGANT
|
||||
: minikin::FontVariant::COMPACT;
|
||||
float textSize = paint->getTextSize();
|
||||
if (!paint->isLinearText()) {
|
||||
// If linear text is not specified, truncate the value.
|
||||
textSize = trunc(textSize);
|
||||
}
|
||||
return minikin::MinikinPaint(
|
||||
textSize,
|
||||
paint->getTextScaleX(),
|
||||
paint->getTextSkewX(),
|
||||
paint->getLetterSpacing(),
|
||||
paint->getWordSpacing(),
|
||||
MinikinFontSkia::packPaintFlags(paint),
|
||||
paint->getMinikinLocaleListId(),
|
||||
minikin::FontStyle(minikinVariant, resolved.weight, resolved.slant),
|
||||
minikin::HyphenEdit(paint->getHyphenEdit()),
|
||||
paint->getFontFeatureSettings(),
|
||||
resolvedFace->fFontCollection);
|
||||
|
||||
minikin::MinikinPaint minikinPaint;
|
||||
/* Prepare minikin Paint */
|
||||
minikinPaint.size =
|
||||
paint->isLinearText() ? paint->getTextSize() : static_cast<int>(paint->getTextSize());
|
||||
minikinPaint.scaleX = paint->getTextScaleX();
|
||||
minikinPaint.skewX = paint->getTextSkewX();
|
||||
minikinPaint.letterSpacing = paint->getLetterSpacing();
|
||||
minikinPaint.wordSpacing = paint->getWordSpacing();
|
||||
minikinPaint.paintFlags = MinikinFontSkia::packPaintFlags(paint);
|
||||
minikinPaint.localeListId = paint->getMinikinLocaleListId();
|
||||
minikinPaint.fontStyle = minikin::FontStyle(minikinVariant, resolved.weight, resolved.slant);
|
||||
minikinPaint.fontFeatureSettings = paint->getFontFeatureSettings();
|
||||
minikinPaint.hyphenEdit = minikin::HyphenEdit(paint->getHyphenEdit());
|
||||
return minikinPaint;
|
||||
}
|
||||
|
||||
minikin::Layout MinikinUtils::doLayout(const Paint* paint, minikin::Bidi bidiFlags,
|
||||
const Typeface* typeface, const uint16_t* buf, size_t start,
|
||||
size_t count, size_t bufSize) {
|
||||
minikin::MinikinPaint minikinPaint = prepareMinikinPaint(paint, typeface);
|
||||
minikin::Layout layout;
|
||||
layout.doLayout(buf, start, count, bufSize, bidiFlags, prepareMinikinPaint(paint, typeface));
|
||||
layout.doLayout(buf, start, count, bufSize, bidiFlags, minikinPaint,
|
||||
Typeface::resolveDefault(typeface)->fFontCollection);
|
||||
return layout;
|
||||
}
|
||||
|
||||
float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags,
|
||||
const Typeface* typeface, const uint16_t* buf, size_t start,
|
||||
size_t count, size_t bufSize, float* advances) {
|
||||
return minikin::Layout::measureText(
|
||||
buf, start, count, bufSize, bidiFlags, prepareMinikinPaint(paint, typeface), advances,
|
||||
nullptr /* extent */, nullptr /* overhangs */);
|
||||
minikin::MinikinPaint minikinPaint = prepareMinikinPaint(paint, typeface);
|
||||
const Typeface* resolvedTypeface = Typeface::resolveDefault(typeface);
|
||||
return minikin::Layout::measureText(buf, start, count, bufSize, bidiFlags, minikinPaint,
|
||||
resolvedTypeface->fFontCollection, advances,
|
||||
nullptr /* extent */, nullptr /* overhangs */);
|
||||
}
|
||||
|
||||
bool MinikinUtils::hasVariationSelector(const Typeface* typeface, uint32_t codepoint, uint32_t vs) {
|
||||
|
||||
Reference in New Issue
Block a user