diff options
author | Kohsuke Yatoh <kyatoh@google.com> | 2021-06-14 20:57:03 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-06-14 20:57:03 +0000 |
commit | 667ff94664fe2500ade9ab3b6c81ed82c08f8dd4 (patch) | |
tree | ec5bc1c91ca33edd214357b76698c03f0f128600 | |
parent | 7784f1613b94347bcadd3857d57127f736f8ccee (diff) | |
parent | 554cb50b2d283bafe8fb1e4337920ac7967e3cd5 (diff) | |
download | minikin-android12-mainline-networkstack-release.tar.gz |
Expose raw typeface metadata buffer. am: 554cb50b2dandroid-mainline-12.0.0_r99android-mainline-12.0.0_r98android-mainline-12.0.0_r77android-mainline-12.0.0_r70android-mainline-12.0.0_r69android-mainline-12.0.0_r63android-mainline-12.0.0_r59android-mainline-12.0.0_r56android-mainline-12.0.0_r5android-mainline-12.0.0_r49android-mainline-12.0.0_r42android-mainline-12.0.0_r39android-mainline-12.0.0_r22android-mainline-12.0.0_r19android-mainline-12.0.0_r122android-mainline-12.0.0_r115android-mainline-12.0.0_r113android-mainline-12.0.0_r100aml_tz3_311312010android12-mainline-networkstack-releaseandroid12-mainline-art-release
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/minikin/+/14923750
Change-Id: I942815b0e90a691d34562be7048acaff88a0c450
-rw-r--r-- | include/minikin/Font.h | 28 | ||||
-rw-r--r-- | libs/minikin/Font.cpp | 2 | ||||
-rw-r--r-- | tests/util/FreeTypeMinikinFontForTest.cpp | 11 | ||||
-rw-r--r-- | tests/util/FreeTypeMinikinFontForTest.h | 2 |
4 files changed, 28 insertions, 15 deletions
diff --git a/include/minikin/Font.h b/include/minikin/Font.h index cfd8478..67feecf 100644 --- a/include/minikin/Font.h +++ b/include/minikin/Font.h @@ -17,7 +17,6 @@ #ifndef MINIKIN_FONT_H #define MINIKIN_FONT_H -#include <functional> #include <memory> #include <mutex> #include <unordered_set> @@ -112,18 +111,20 @@ public: }; // Type for functions to load MinikinFont lazily. - using TypefaceLoader = std::function<std::shared_ptr<MinikinFont>()>; - // Type for functions to read MinikinFont metadata and construct + using TypefaceLoader = std::shared_ptr<MinikinFont>(BufferReader reader); + // Type for functions to read MinikinFont metadata and return // TypefaceLoader. - using TypefaceReader = TypefaceLoader(BufferReader* reader); + using TypefaceReader = TypefaceLoader*(BufferReader* reader); // Type for functions to write MinikinFont metadata. using TypefaceWriter = void(BufferWriter* writer, const MinikinFont* typeface); template <TypefaceReader typefaceReader> static std::shared_ptr<Font> readFrom(BufferReader* reader, uint32_t localeListId) { FontStyle style = FontStyle(reader); - TypefaceLoader typefaceLoader = typefaceReader(reader); - return std::shared_ptr<Font>(new Font(style, std::move(typefaceLoader), localeListId)); + BufferReader typefaceMetadataReader = *reader; + TypefaceLoader* typefaceLoader = typefaceReader(reader); + return std::shared_ptr<Font>( + new Font(style, typefaceMetadataReader, typefaceLoader, localeListId)); } template <TypefaceWriter typefaceWriter> @@ -138,6 +139,7 @@ public: const std::shared_ptr<MinikinFont>& typeface() const; inline FontStyle style() const { return mStyle; } const HbFontUniquePtr& baseFont() const; + BufferReader typefaceMetadataReader() const { return mTypefaceMetadataReader; } std::unordered_set<AxisTag> getSupportedAxes() const; @@ -148,10 +150,14 @@ private: : mTypeface(std::move(typeface)), mStyle(style), mBaseFont(std::move(baseFont)), + mTypefaceLoader(nullptr), + mTypefaceMetadataReader(nullptr), mLocaleListId(localeListId) {} - Font(FontStyle style, TypefaceLoader&& typefaceLoader, uint32_t localeListId) + Font(FontStyle style, BufferReader typefaceMetadataReader, TypefaceLoader* typefaceLoader, + uint32_t localeListId) : mStyle(style), - mTypefaceLoader(std::move(typefaceLoader)), + mTypefaceLoader(typefaceLoader), + mTypefaceMetadataReader(typefaceMetadataReader), mLocaleListId(localeListId) {} void initTypefaceLocked() const EXCLUSIVE_LOCKS_REQUIRED(mTypefaceMutex); @@ -166,8 +172,10 @@ private: mutable HbFontUniquePtr mBaseFont GUARDED_BY(mTypefaceMutex); mutable std::mutex mTypefaceMutex; - // Non-empty if created by readFrom(). - TypefaceLoader mTypefaceLoader; + // Non-null if created by readFrom(). + TypefaceLoader* mTypefaceLoader; + // Non-null if created by readFrom(). + BufferReader mTypefaceMetadataReader; uint32_t mLocaleListId; diff --git a/libs/minikin/Font.cpp b/libs/minikin/Font.cpp index ba42b2c..c2e74b7 100644 --- a/libs/minikin/Font.cpp +++ b/libs/minikin/Font.cpp @@ -69,7 +69,7 @@ const HbFontUniquePtr& Font::baseFont() const { void Font::initTypefaceLocked() const { if (mTypeface) return; MINIKIN_ASSERT(mTypefaceLoader, "mTypefaceLoader should not be empty when mTypeface is null"); - mTypeface = mTypefaceLoader(); + mTypeface = mTypefaceLoader(mTypefaceMetadataReader); } // static diff --git a/tests/util/FreeTypeMinikinFontForTest.cpp b/tests/util/FreeTypeMinikinFontForTest.cpp index bed6b4e..1be466a 100644 --- a/tests/util/FreeTypeMinikinFontForTest.cpp +++ b/tests/util/FreeTypeMinikinFontForTest.cpp @@ -116,9 +116,14 @@ void writeFreeTypeMinikinFontForTest(BufferWriter* writer, const MinikinFont* ty writer->writeString(typeface->GetFontPath()); } -Font::TypefaceLoader readFreeTypeMinikinFontForTest(BufferReader* reader) { - std::string fontPath(reader->readString()); - return [fontPath]() { return std::make_shared<FreeTypeMinikinFontForTest>(fontPath); }; +std::shared_ptr<MinikinFont> loadFreeTypeMinikinFontForTest(BufferReader reader) { + std::string fontPath(reader.readString()); + return std::make_shared<FreeTypeMinikinFontForTest>(fontPath); +} + +Font::TypefaceLoader* readFreeTypeMinikinFontForTest(BufferReader* reader) { + reader->skipString(); // fontPath + return &loadFreeTypeMinikinFontForTest; } } // namespace minikin diff --git a/tests/util/FreeTypeMinikinFontForTest.h b/tests/util/FreeTypeMinikinFontForTest.h index 4f63638..4cdb6d8 100644 --- a/tests/util/FreeTypeMinikinFontForTest.h +++ b/tests/util/FreeTypeMinikinFontForTest.h @@ -66,7 +66,7 @@ private: void writeFreeTypeMinikinFontForTest(BufferWriter* writer, const MinikinFont* typeface); -Font::TypefaceLoader readFreeTypeMinikinFontForTest(BufferReader* reader); +Font::TypefaceLoader* readFreeTypeMinikinFontForTest(BufferReader* reader); } // namespace minikin |