722841005f805a5023fd7edefc4016968d1fae10 |
|
18-Mar-2017 |
Seigo Nonaka <nona@google.com> |
Compute SparseBitSet for cmap format 14 subtables. By computing cmap format 14 subtables similar to cmap format 4 or 12, there are following benefits: - FontCollection::hasVariationSelector becomes 70x faster for the worst case, 10x faster for the normal case. - FontFamily::hasGlyph becomes lock-free. - FontCollection::itemize becomes 2x faster than before for some cases. On the other hand, following negative things happen: - Initial FontFamily construction takes 2.5x longer than before, but this only happens in Zygote and should not happen at application launch time. - FontFamily construction from buffer takes longer time than before but it is still around 800µs. - Consumes additionally memory (about 30kB for NotoSansCJK-Regular.ttc of ttc index 0, 2.5kB for NotoColorEmoji.ttf), but this is shared across all applications. No additional memory is necessary if the font doesn't support variation sequences. Bug: 36401726 Test: minikin_tests passed Test: minikin_stress_tests passed Test: android.graphics.cts.PaintTest passed Change-Id: I3ebc9ad5050fb9ab6283810d31ae8d13af168ec5
/frameworks/minikin/include/minikin/FontFamily.h
|
dff5e5d5a1d0f17a1b5d2fd197b5a6389bc41e28 |
|
22-Mar-2017 |
Seigo Nonaka <nona@google.com> |
Remove unused functions. This CL is essentially reverting following changes: - "Serialize and deserialize supported axes." I4086fb887e13f872390b533584bce6f1d5598ea0 - "Make SparseBitSet serializable." I0463138adcf234739bb3ce1cdadf382021921f3e Bug: 36232655 Test: N/A Change-Id: I25c701e1805e92b01034142147a9925f86533819
/frameworks/minikin/include/minikin/FontFamily.h
|
1adbccfd0f40ef416e4f76ea16cbc0bae549d669 |
|
15-Mar-2017 |
Seigo Nonaka <nona@google.com> |
Serialize and deserialize supported axes. To avoid reading font files during FontFamily construction, serialize and deserialize supported axes and cmap coverage at the same time. Bug: 36232655 Test: ran minikin_tests Change-Id: I4086fb887e13f872390b533584bce6f1d5598ea0
/frameworks/minikin/include/minikin/FontFamily.h
|
fd4124c53399581dd94eac5a9749bc07b474a294 |
|
14-Mar-2017 |
Seigo Nonaka <nona@google.com> |
Revert "Use std::mutex instead of android::Mutex" This reverts commit 62ad565335d4774bc5b31ced462e92566b48d197. Bug: 36208043 Test: N/A Change-Id: I165ab7a0718ea50a8034adb6277809e271fd762c
/frameworks/minikin/include/minikin/FontFamily.h
|
44075ee9fa0e1c64defe1c2534d6ce1ff0f775a2 |
|
14-Mar-2017 |
TreeHugger Robot <treehugger-gerrit@google.com> |
Merge "Make SparseBitSet serializable."
|
fbbc5a6b361c623e47a433f83e7200b4e2ba3501 |
|
05-Jan-2017 |
Seigo Nonaka <nona@google.com> |
Make SparseBitSet serializable. To share the calculated coverage information across the processes, make SparseBitSet serializable. Bug: 34042446 Test: minikin_tests passes Change-Id: I0463138adcf234739bb3ce1cdadf382021921f3e
/frameworks/minikin/include/minikin/FontFamily.h
|
62ad565335d4774bc5b31ced462e92566b48d197 |
|
21-Feb-2017 |
Seigo Nonaka <nona@google.com> |
Use std::mutex instead of android::Mutex This CL includes: - Stop using utils/Mutex and use std::mutex instead. - Stop using utils/Singleton. Test: minikin_tests passed Change-Id: Ib3f75b83397a546472bb5f91e066e44506e78263
/frameworks/minikin/include/minikin/FontFamily.h
|
dfbc6e374259f9d81940b5195ac013b02429af27 |
|
10-Feb-2017 |
Seigo Nonaka <nona@google.com> |
Remove MinikinRefCounted and use shared_ptr instead Let's use shared_ptr since manual ref counting can be a bug-prone and using the global mutex inside destructor is not useful for some time. To remove raw pointer manipulation, needed to change Layout constructors. Layout is no longer copyable and need to pass FontCollection to constructor. Bug: 28119474 Test: minikin_tests passed Test: hwui_unit_tests passed Test: No performance regression in minikin_perftest. Change-Id: I8824593206ecba74cbc9731e298f045e1ae442a3
/frameworks/minikin/include/minikin/FontFamily.h
|
065c46a665d562c93ffa82fda10dee52a16ac23b |
|
22-Nov-2016 |
Seigo Nonaka <nona@google.com> |
Introduce createCollectionWithVariation. This is 2nd attempt of I08e9b74192f8af1d045f1276498fa4e60d73863e. The original CL was reverted due to conflicting with another CL submitted before. Here is the original commit message of reverted change. This lays the groundwork for variation settings support. Since we should regard different variations of a font as different fonts, we need to create new typefaces. To reuse the same instance of MinikinFont, as much as possible, FontFamily::createFamilyWithVariation now reuses an existence instance, while incrementing the reference count. Test: minikin_tests Bug: 33062398 Change-Id: Ib25bf1bb5a5191e15a6523954146521464c91906
/frameworks/minikin/include/minikin/FontFamily.h
|
41718c770d0ae12133270a4ee4a8dbd27851480d |
|
28-Dec-2016 |
Seigo Nonaka <nona@google.com> |
Remove FontFamily.addFont and make FontFamily immutable. This is 2nd attempt of 41e02e96131c1ec66d013e4615348be013518dc4 The difference is adding clearElementsEithLock to Font class which is necessary to delete Fonts object outside of minikin. This method should be removed once http://b/28119474 is fixed. Here is original commit message of reverted change. This lays the groundwork for making SparseBitSet serializable. FontFamily.addFont is only used when the FontFamily is constructed. Thus, instead of calling FontFamily.addFont multiple time, passes Font list to the constructor. By this change, FontFamily can be immutable now. By making FontFamily immutable, We can create FontFamily with pre-calculated SparseBitSet. Bug: 34042446 Bug: 28119474 Bug: 34378805 Test: minikin_tests has passed Change-Id: Ice433931196f5ae79a1a7ee0c98020f914aeb5f2
/frameworks/minikin/include/minikin/FontFamily.h
|
cc0352cc677e4ecea6ae12f734a010d290734e86 |
|
20-Jan-2017 |
Siyamed Sinir <siyamed@google.com> |
Revert "Remove FontFamily.addFont and make FontFamily immutable." This reverts commit 41e02e96131c1ec66d013e4615348be013518dc4. Bug: 34378805 Change-Id: I8f1ee00b365c8b17c6140e9e286fbea082e31364
/frameworks/minikin/include/minikin/FontFamily.h
|
1c7b0261542f8a54e7b3e52236070f62d073e17f |
|
20-Jan-2017 |
Siyamed Sinir <siyamed@google.com> |
Revert "Introduce createCollectionWithVariation." This reverts commit 90e6b1885d44c33b1da9477a85dc7dd066acd33f. Bug: 34378805 Change-Id: I22b683f774813724f220b1b8584ab188f3cf4fa7
/frameworks/minikin/include/minikin/FontFamily.h
|
90e6b1885d44c33b1da9477a85dc7dd066acd33f |
|
22-Nov-2016 |
Seigo Nonaka <nona@google.com> |
Introduce createCollectionWithVariation. This lays the groundwork for variation settings support. Since we should regard different variations of a font as different fonts, we need to create new typefaces. To reuse the same instance of MinikinFont, as much as possible, FontFamily::createFamilyWithVariation now reuses an existence instance, while incrementing the reference count. Test: minikin_tests Bug: 33062398 Change-Id: I08e9b74192f8af1d045f1276498fa4e60d73863e
/frameworks/minikin/include/minikin/FontFamily.h
|
41e02e96131c1ec66d013e4615348be013518dc4 |
|
28-Dec-2016 |
Seigo Nonaka <nona@google.com> |
Remove FontFamily.addFont and make FontFamily immutable. This lays the groundwork for making SparseBitSet serializable. FontFamily.addFont is only used when the FontFamily is constructed. Thus, instead of calling FontFamily.addFont multiple time, passes Font list to the constructor. By this change, FontFamily can be immutable now. By making FontFamily immutable, We can create FontFamily with pre-calculated SparseBitSet. Bug: 34042446 Test: minikin_tests has passed Change-Id: I2576789fba6cb27687e920e2488e8bedbcf7d36f
/frameworks/minikin/include/minikin/FontFamily.h
|
47b905f6840ea6776d6f6778915e7408a1ff8be4 |
|
15-Aug-2016 |
Chih-Hung Hsieh <chh@google.com> |
Fix google-explicit-constructor warnings in minikin * Add explicit keyword to conversion constructors, or add NOLINT(implicit) for implicit converters. Bug: 28341362 Test: build with WITH_TIDY=1 Change-Id: I0c7b90f9bb953a9f2e4f0fb2032fa65ac604b9ca
/frameworks/minikin/include/minikin/FontFamily.h
|
14e2d136aaef271ba131f917cf5f27baa31ae5ad |
|
09-Jun-2016 |
Seigo Nonaka <nona@google.com> |
Always use minikin namespace. Here is a new policy of the namespace of minikin. - All components should be in minikin namespace. - All tests are also in minikin namespace and no anonymous namespace. Bug: 29233740 Change-Id: I71a8a35049bb8d624f7a78797231e90fed1e2b8c
/frameworks/minikin/include/minikin/FontFamily.h
|
994aa84f7b18466806fe552ea57da1852b909f24 |
|
08-Mar-2016 |
Seigo Nonaka <nona@google.com> |
Returns hasVariationSelector true for VS15/VS16 Minikin has a special font fallback for VS15/VS16, so hasVariationSelector for emojis with VS15/VS16 should always return true. Bug: 27531970 Change-Id: Ieebd58f48b135b6ec50d999df68dcc09b1284606
/frameworks/minikin/include/minikin/FontFamily.h
|
6b1c227da6492a435f0341d7fe95d9992669920e |
|
02-Feb-2016 |
Seigo Nonaka <nona@google.com> |
Improve Paint.measureText and Paint.hasGlyph for variation sequences. Before this patch, the font fallback chain iterated all installed font families if a variation selector was specified. This CL narrows down the range of iteration. To decide the font family for the variation sequence, we need to search for both the variation sequence and its base code point. The new range of the iteration is a union of them. With this change, the running time of Paint.hasGlyph for the variation sequence improves 50% and the running time of Paint.measureText for the variation sequence improves 40% for the large text case on Nexus 6 userdebug. Bug: 26784699 Bug: 11750374 Change-Id: Iced1349e3ca750821d8882c551551f65bb569794
/frameworks/minikin/include/minikin/FontFamily.h
|
89e80237bc27af084c9ff316d4f47abf426eced8 |
|
03-Feb-2016 |
Seigo Nonaka <nona@google.com> |
Improve Paint.hasGlyph performance by caching hb_font_t It turned out that hb_font_t creation is not a lightweight operation. Especially, Paint.hasGlyph creates hb_font_t for all existing fonts every time. To improve the performance, cache hb_font_t instead of hb_face_t. Note that to calculate horizontal advance, MinikinPaint needs to be associated with hb_font_t by calling hb_font_set_funcs. With this patch, hb_font_set_funcs may be called multiple times for the same hb_font_t object. However this is not an issue since MinikinPaint is unique during layout. Bug: 26784699 Change-Id: I516498ae9f0127d700fc9829327e9789845a1416
/frameworks/minikin/include/minikin/FontFamily.h
|
198b46f1fea3f47ef8eb6317799c0d77aaec52f6 |
|
15-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Save all kind of script tags into FontLanguage. This is 2nd attempt of I8df992a6851021903478972601a9a5c9424b100c. The main purpose of this CL is expanding FontLanguage to be able to save full script tag. Previously, FontLangauge kept only limited script tags. With this CL, FontLanguage keeps all script tags. This CL contains the following changes: - FontLanguage changes: -- Moved to private directory not to be instantiated outside of Minikin. -- Removed bool(), bits(), FontLanguage(uint32_t) methods which are no longer used. -- Change the FontLanguage internal data structure. -- Introduces script match logic. - FontLanguages changes: -- Moved to private directory not to be instantiated outside of Minikin. -- This is now std::vector<FontLanguage> - FontLanguageListCache changes: -- Now FontLanguageListCache::getId through FontStyle::registerLanguageList is the only way to instantiate the FontLanguage. -- Normalize input to be BCP47 compliant identifier by ICU. Bug: 26168983 Change-Id: I431b3f361a7635497c05b85e8ecbeb48d9aef63e
/frameworks/minikin/include/minikin/FontFamily.h
|
6c4c098cbd37eccef483ab1986127250b4d2ddf2 |
|
22-Dec-2015 |
Bart Sears <bsears@google.com> |
Revert "Save all kind of script tags into FontLanguage." This reverts commit 5e995fb850c2b32631914c3815dfb421855fba9b. Change-Id: I761e0e41906742fbe3d3ac34170af3101e18042a
/frameworks/minikin/include/minikin/FontFamily.h
|
5e995fb850c2b32631914c3815dfb421855fba9b |
|
15-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Save all kind of script tags into FontLanguage. The main purpose of this CL is expanding FontLanguage to be able to save full script tag. Previously, FontLangauge kept only limited script tags. With this CL, FontLanguage keeps all script tags. This CL contains the following changes: - FontLanguage changes: -- Moved to private directory not to be instantiated outside of Minikin. -- Removed bool(), bits(), FontLanguage(uint32_t) methods which are no longer used. -- Change the FontLanguage internal data structure. -- Introduces script match logic. - FontLanguages changes: -- Moved to private directory not to be instantiated outside of Minikin. -- This is now std::vector<FontLanguage> - FontLanguageListCache changes: -- Now FontLanguageListCache::getId through FontStyle::registerLanguageList is the only way to instantiate the FontLanguage. -- Normalize input to be BCP47 compliant identifier by ICU. Bug: 26168983 Change-Id: I8df992a6851021903478972601a9a5c9424b100c
/frameworks/minikin/include/minikin/FontFamily.h
|
43bb9743ca91a761b9723674ac862660dd2be834 |
|
10-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Remove script matching score from the font selection fallback. Removing the extra score of 2 for the script matching from the font fallback score calculation. If the two langauges have different scripts, we should treat them as different languages. Change-Id: Ie0d6f27bd1086248895935a7bd01b5d404044ad0
/frameworks/minikin/include/minikin/FontFamily.h
|
6d9dcd2cf3d3ed26a886e02d94c907311e7b1f83 |
|
02-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Introduce FontLanguageListCache. FontLanguageListCache is an intentionally leaky singleton and its internal cache won't be purged. BUG: 25122318 Change-Id: I272097e979fe44b83fd86822235350e12eda8f51
/frameworks/minikin/include/minikin/FontFamily.h
|
369d2d44cb09ac4346cdd9e3b131bb173d764f88 |
|
29-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Select emoji font based on variation selectors. If U+FE0E is appended to the emoji code point, the glyph should have a text presentation. On the other hand, if U+FE0F is appended to the emoji code point, the glyph should have an emoji presentation. Bug: 11256006 Change-Id: I5187d44500b13a138e7ffbcf2c72e2da06374c8c
/frameworks/minikin/include/minikin/FontFamily.h
|
4b723bf22b1bbc5fcdaa9bd96178c921199905d5 |
|
20-Oct-2015 |
Roozbeh Pournader <roozbeh@google.com> |
Basic scaffolding for handling a language list. The behavior hasn't changed much yet: all languages are ignored for rendering text, except the very first supported language. Change-Id: I1695fb985927ae5e28e4f59c1b531e4993af8688
/frameworks/minikin/include/minikin/FontFamily.h
|
0f2a025d135f9ca52cc3cf917fffc29d6c126094 |
|
24-Sep-2015 |
Seigo Nonaka <nona@google.com> |
Introduce FontFamily::hasVariationSelector This CL introduces new method hasVariationSelector into FontFamily but it is not used in production code. So no behavior changes are expected. This CL contains the following changes: - Introduce hasVariationSelector which returns true if the corresponding font has a glyph for a code point and variation selector pair. - Introduce purgeHbFontCache since hb_face_t won't be released by keeping hb_font_t. - Introduce unit tests with self-built font. Change-Id: I659a6d03d9ec446b409e1fba2758452abb9f44fa
/frameworks/minikin/include/minikin/FontFamily.h
|
71ec97055357b6ccb13a2697a56254bb19f43ae9 |
|
08-Aug-2015 |
Roozbeh Pournader <roozbeh@google.com> |
Support three-letter language codes in FontLanguage. Also handle the case of weird language code that we don't understand properly better, by treating them not equal to each other. Change-Id: Iaccb251fa38d700932f6eadac254d3d1fa09b3ea
/frameworks/minikin/include/minikin/FontFamily.h
|
cb20a2f0b366bfc16db3a489a60156dec7a9fe21 |
|
25-Nov-2014 |
Andreas Gampe <agampe@google.com> |
Minikin: Remove unused variables, fix init order For build-system CFLAGS clean-up, fix unused variables. Reorder initializer list to initialize in the order of member declarations. Change-Id: I64358b2dcf0e39d0f4e18fdc3473de867f84fcba
/frameworks/minikin/include/minikin/FontFamily.h
|
13f1aae02bacd475722bc8ea3fc2cf6abc1a82e3 |
|
29-Oct-2014 |
Raph Levien <raph@google.com> |
Move coverage bitmap from FontCollection to FontFamily This will significantly reduce memory usage and also speed the creation of new font families. In particular, the coverage bitmaps for the fonts in the fallback stack will be computed once in the Zygote, rather than separately in each app process. Bug: 17756900 Change-Id: I66f5706bddd4658d78fe5b709f7251ca9d2ff4f8
/frameworks/minikin/include/minikin/FontFamily.h
|
a5bb91190edbea0be0e78a8511b3c920b6e99c4e |
|
25-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Towards CSS removal Extract language from FontStyle during shaping. Don't attach CSS to LayoutContext. Change-Id: Ie621d3415410178d0d15fa7b810eb8e412342ab6
/frameworks/minikin/include/minikin/FontFamily.h
|
9a5f713add8cfb91ac2c9ed5c917309053201ab6 |
|
07-Jun-2014 |
Raph Levien <raph@google.com> |
Support for fake bold and italics This patch adds support for computing when fake bold and fake italics are needed (because the styles are requested but not provided by the matching FontFamily), and providing them as part of the layout result. Part of the fix for bug 15436379 Fake bold doesn't fully work (Minikin) Change-Id: I180c034b559837943673b5c272c8e890178dff0d
/frameworks/minikin/include/minikin/FontFamily.h
|
7b221d97b7b64dc5ce457e19666d55d042e22e62 |
|
27-May-2014 |
Raph Levien <raph@google.com> |
Language and variant selection This patch adds a "lang" pseudo-CSS property and uses it both to select an appropriate font and control the "locl" OpenType feature to get the most appropriate rendering for the langauge and script. In addition, the "-minikin-variant" property selects between "compact" and "elegant" variants of a font, as the former is needed for vertically cramped spaces. This is part of the fix for bug 15179652 "Japanese font isn't shown on LMP". Change-Id: I7fab23c12d4c797a6d339a16e497b79a3afe9df1
/frameworks/minikin/include/minikin/FontFamily.h
|
4d4e6bc8118d15542f1f2a9218f0f7a91a29474f |
|
21-May-2014 |
Raph Levien <raph@google.com> |
Caching for layouts and harfbuzz faces This patch adds caching for both layouts and for HarfBuzz face objects. The granularity of the cache for layouts is words, so it splits the input string at word boundaries (using a heuristic). There are is also some refactoring to reduce the amount of allocation and copying, and movement towards properly supporting contexts. The size of the caches is a fixed number of entries; thus, it is possible to consume a large amount of memory by filling the cache with lots of large strings. This should be refined towards a scheme that bounds the total memory used by the cache. This patch fixes bug 15237293 "Regression: Measure performance is significantly slower with minikin". Change-Id: Ie8176857e2d78656ce5479a7c04969819ef2718d
/frameworks/minikin/include/minikin/FontFamily.h
|
c31e3883456e018d742e9f29815ba5ff8b315ea1 |
|
19-May-2014 |
Raph Levien <raph@google.com> |
Fix incomplete refcounting and locking These changes were supposed to be committed in the previous patch "Better refcounting and locking" but seem to have gotten lost in a rebase. It fixes a memory leak and some possible race conditions. Change-Id: I54ca1e37500ec49756fe317cc6d6d03da9911501
/frameworks/minikin/include/minikin/FontFamily.h
|
b80c1f19c58b927820a8a24bf2218e5645724608 |
|
06-May-2014 |
Raph Levien <raph@google.com> |
Better refcounting and locking All major externally accessible objects (especially FontFamily and FontCollection) are now reference counted. In addition, there is a global lock intended to make operations thread-safe. WIP notice: in this version of the patch, not all external API entry points are protected by the lock. That should be fixed. Change-Id: I14106196e99eb101e8bf1bcb4b81359759d2086c
/frameworks/minikin/include/minikin/FontFamily.h
|
bcc3dc5a2591a95a57e379e27cbad69c18e91e67 |
|
23-May-2013 |
Raph Levien <raph@google.com> |
Introduce MinikinFont abstraction This commit removes the direct dependency on FreeType and replaces it with a MinikinFont abstraction, which is designed to support both FreeType and Skia fonts (and possibly others in the future). Also adds a "total advance" to the Layout, with an API for retrieving it. Change-Id: If20f92db9a43fd15b0fe9794b761ba00fb21338c
/frameworks/minikin/include/minikin/FontFamily.h
|
9cc9bbe1461f359f0b27c5e7645c17dda001ab1d |
|
24-Apr-2013 |
Raph Levien <raph@google.com> |
Initial commit of Minikin library This is the initial draft of Minikin, a library intended to perform text layout functions. This version does basic weight selection and font runs for scripts, and also has a simple renderer for drawing into bitmaps, but is lacking measurement, line breaking, and a number of other important features. It also lacks caching and other performance refinements. Change-Id: I789a2e47d11d71202dc84b4751b51a5e2cd9c451
/frameworks/minikin/include/minikin/FontFamily.h
|