From bd4e7fa12c251d2fc351dc5ff0f78c3181470261 Mon Sep 17 00:00:00 2001 From: Seigo Nonaka Date: Thu, 8 Oct 2020 14:54:29 -0700 Subject: [PATCH] Revert "Call minikin::getBounds instead of using Layout." This reverts commit efd38dd5046b659bd39bded00e40882e1495749e. This regresses the DynamicLayout performance since it aggressively calls TextPaint.getTextBounds. CTS will not be removed since their test is still valid. Bug: 170230123 Bug: 169114687 Test: N/A Change-Id: I9f0951c6aefb7785137c00c7f802fb0c0a518cd2 --- libs/hwui/hwui/MinikinUtils.cpp | 13 ------------- libs/hwui/hwui/MinikinUtils.h | 3 --- libs/hwui/jni/Paint.cpp | 11 ++++++++--- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/libs/hwui/hwui/MinikinUtils.cpp b/libs/hwui/hwui/MinikinUtils.cpp index b8029087cb4f8..5f6b53ac767fe 100644 --- a/libs/hwui/hwui/MinikinUtils.cpp +++ b/libs/hwui/hwui/MinikinUtils.cpp @@ -21,7 +21,6 @@ #include #include -#include #include "Paint.h" #include "SkPathMeasure.h" #include "Typeface.h" @@ -70,18 +69,6 @@ minikin::Layout MinikinUtils::doLayout(const Paint* paint, minikin::Bidi bidiFla } } -void MinikinUtils::getBounds(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, - const uint16_t* buf, size_t bufSize, minikin::MinikinRect* out) { - minikin::MinikinPaint minikinPaint = prepareMinikinPaint(paint, typeface); - - const minikin::U16StringPiece textBuf(buf, bufSize); - const minikin::StartHyphenEdit startHyphen = paint->getStartHyphenEdit(); - const minikin::EndHyphenEdit endHyphen = paint->getEndHyphenEdit(); - - minikin::getBounds(textBuf, minikin::Range(0, textBuf.size()), bidiFlags, minikinPaint, - startHyphen, endHyphen, out); -} - 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) { diff --git a/libs/hwui/hwui/MinikinUtils.h b/libs/hwui/hwui/MinikinUtils.h index a15803ad2dcaa..7c3f0d84a75b2 100644 --- a/libs/hwui/hwui/MinikinUtils.h +++ b/libs/hwui/hwui/MinikinUtils.h @@ -48,9 +48,6 @@ public: size_t contextStart, size_t contextCount, minikin::MeasuredText* mt); - static void getBounds(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, - const uint16_t* buf, size_t bufSize, minikin::MinikinRect* out); - static float measureText(const Paint* paint, minikin::Bidi bidiFlags, const Typeface* typeface, const uint16_t* buf, size_t start, size_t count, size_t bufSize, diff --git a/libs/hwui/jni/Paint.cpp b/libs/hwui/jni/Paint.cpp index 3c86b28262b03..89ff9b2576426 100644 --- a/libs/hwui/jni/Paint.cpp +++ b/libs/hwui/jni/Paint.cpp @@ -339,13 +339,18 @@ namespace PaintGlue { } static void doTextBounds(JNIEnv* env, const jchar* text, int count, jobject bounds, - const Paint& paint, const Typeface* typeface, jint bidiFlagsInt) { + const Paint& paint, const Typeface* typeface, jint bidiFlags) { SkRect r; SkIRect ir; + minikin::Layout layout = MinikinUtils::doLayout(&paint, + static_cast(bidiFlags), typeface, + text, count, // text buffer + 0, count, // draw range + 0, count, // context range + nullptr); minikin::MinikinRect rect; - minikin::Bidi bidiFlags = static_cast(bidiFlagsInt); - MinikinUtils::getBounds(&paint, bidiFlags, typeface, text, count, &rect); + layout.getBounds(&rect); r.fLeft = rect.mLeft; r.fTop = rect.mTop; r.fRight = rect.mRight;