diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-16 01:07:39 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2021-06-16 01:07:39 +0000 |
commit | 6816c3856cd0ff46dfec461e36ba3ecfa7f4ce64 (patch) | |
tree | ec5bc1c91ca33edd214357b76698c03f0f128600 | |
parent | 636c0baa7f69c001397a6a1a28719f48893fb013 (diff) | |
parent | 25d7e8ade85983b1a474530b81c2eee677cef0ff (diff) | |
download | minikin-android12L-s1-release.tar.gz |
Snap for 7460045 from 25d7e8ade85983b1a474530b81c2eee677cef0ff to sc-v2-releaseandroid-vts-12.1_r9android-vts-12.1_r8android-vts-12.1_r7android-vts-12.1_r6android-vts-12.1_r5android-vts-12.1_r4android-vts-12.1_r3android-vts-12.1_r2android-vts-12.1_r10android-vts-12.1_r1android-platform-12.1.0_r9android-platform-12.1.0_r8android-platform-12.1.0_r7android-platform-12.1.0_r6android-platform-12.1.0_r5android-platform-12.1.0_r4android-platform-12.1.0_r3android-platform-12.1.0_r2android-platform-12.1.0_r1android-cts-12.1_r9android-cts-12.1_r8android-cts-12.1_r7android-cts-12.1_r6android-cts-12.1_r5android-cts-12.1_r4android-cts-12.1_r3android-cts-12.1_r2android-cts-12.1_r10android-cts-12.1_r1android-12.1.0_r6android-12.1.0_r5android-12.1.0_r4android-12.1.0_r3android-12.1.0_r27android-12.1.0_r2android-12.1.0_r1android12L-tests-releaseandroid12L-s1-releaseandroid12L-release
Change-Id: I7f67e757a037496d2fce9292456903b837536a78
-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 |