376 Commits

Author SHA1 Message Date
Seigo Nonaka
1946f48e84 Treat U+2695, U+2640, U+2642 as emoji characters.
Bug: 29885295
Change-Id: I1bf191a46d05e7099265d863bae0523c50817d0b
2016-07-11 15:27:05 +09:00
Seigo Nonaka
435076ff2e Add some gender balanced components in to the sticky whitelist.
FEMALE SIGN(U+2640), MALE SIGN(U+2642), StAFF OF AESCULAPIUS(U+2695)
will be used as the ZWJ sequenced in gender balanced emoji sequence.
To be in the same run with ZWJ, mark these emoji as sticky chracters.

With this fix, Female police officer sequence will be shown correctly
regardless of VS16.

Bug: 30026374
Change-Id: I503fc061eaa943d45208bb69e885151610c430ce
2016-07-08 15:49:50 +09:00
Adam Buchbinder
6a0900bf65 Merge "Fix a leaked file in HyphTool.cpp." 2016-07-07 20:51:08 +00:00
Seigo Nonaka
524369b0c6 Fix build failure of minikin_perftest
stat.st_size is off_t not size_t, so need to cast to size_t before
compare it.

Change-Id: I6b742746fbb9f254701fc91e515c293f93f912c5
2016-06-28 09:37:17 +00:00
Seigo Nonaka
5e6bc85d69 Introduce FontCollection perftest
This CL introduces performance tests for FontCollection.

To support TTC file in /system/fonts, this CL also extends FontTestUtils

Bug:29142734
Change-Id: I9d8ad24ca55f61031b85623ab7c26234239e4f41
2016-06-28 08:52:35 +00:00
Seigo Nonaka
0ca4fb6d44 Add more native perf tests to minikin.
This CL introduces performance tests for following three modules:
- Hyphenator
- WordBreaker
- GraphemeBreak

During using UnicodeUtils, need to decouple it from gtest since
perftest doesn't have gtest dependencies.

Bug:29142734
Change-Id: I700c662fa7d0a52f19d8e93150ad1a85dc28769f
2016-06-28 16:55:42 +09:00
Seigo Nonaka
81c79d6e1e Fix test utilities
This fixes following three memory leaks in test utilities.
There is no problem in production code and this CL doesn't affect
any production behaviors.

- SkTypeface leaks due to forget calling SkSafeUnref in dtor.
- MinikinFontForTest leaks during constructing FontCollection.
- FontCollection leaks due to unnecessary AddRef.

Change-Id: I22e1e0307f1b2499296acb1aacc3ef66076a36e9
2016-06-21 16:47:25 +09:00
Seigo Nonaka
14e2d136aa 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
2016-06-11 00:11:17 +09:00
Seigo Nonaka
c970b3da26 Merge "Introduce initial minikin perftest" 2016-06-09 03:31:45 +00:00
Seigo Nonaka
c38b249ef7 Reconstruct the directory structure of minikin tests.
To add perftests and reuse some utility classes, reconstruct
test directory structure.

- Move unit tests from minikin/tests to minikin/tests/unittests
- Extract utilitiy classes to minikin/tests/utils which will be
  used by perftests eventually.

Change-Id: I5026b177934e72ae67d362ee888302037da2f808
2016-06-09 03:25:03 +00:00
Seigo Nonaka
08bfef04af Introduce initial minikin perftest
Bug: 28992567
Change-Id: Id14cc86761d6c5b408262fe8684e2b293a420a4f
2016-06-08 13:01:55 +09:00
Roozbeh Pournader
9ea660349c Do not break after Myanmar viramas am: 74b56175e5 am: 8614b0420c
am: b11b991fe7

* commit 'b11b991fe7397a083e45ff267f632d1a866bcc23':

Change-Id: I0a3d24fcffb1d0533970058b4a3498d45e794f36
2016-05-26 02:56:56 +00:00
Roozbeh Pournader
b000ca61bb Do not break after Myanmar viramas am: 74b56175e5 am: 00de2cc363
am: b4bbae3202

* commit 'b4bbae320244d949d1f7766916919cbb3a6e72f3':
  Do not break after Myanmar viramas

Change-Id: I69972aed4fe1c1b956c0b65af18e1a4f1c739bf4
2016-05-26 02:56:55 +00:00
Roozbeh Pournader
b11b991fe7 Do not break after Myanmar viramas am: 74b56175e5
am: 8614b0420c

* commit '8614b0420cef56449c0db72f5098360c31867b06':

Change-Id: I4437e1206de2a45593e69956d8bcdf85a64b0f32
2016-05-26 02:31:31 +00:00
Roozbeh Pournader
b4bbae3202 Do not break after Myanmar viramas am: 74b56175e5
am: 00de2cc363

* commit '00de2cc3631df7ee3d755956bbf4ec6812d5517f':
  Do not break after Myanmar viramas

Change-Id: I2e240fab84a49c73165056ee5ff18dbfca0faeec
2016-05-26 02:21:28 +00:00
Roozbeh Pournader
8614b0420c Do not break after Myanmar viramas
am: 74b56175e5

* commit '74b56175e5d41c1c1dc992208842b5576973d452':
  Do not break after Myanmar viramas

Change-Id: Idb9303889ac87853a730cdb25fba7faaaf352b93
2016-05-26 01:44:33 +00:00
Roozbeh Pournader
00de2cc363 Do not break after Myanmar viramas
am: 74b56175e5

* commit '74b56175e5d41c1c1dc992208842b5576973d452':
  Do not break after Myanmar viramas

Change-Id: I13297120c3c3789c03b860c9e72b3a04922ab9fa
2016-05-26 01:44:33 +00:00
Roozbeh Pournader
74b56175e5 Do not break after Myanmar viramas
This is to work around a bug in ICU's line breaker, which thinks
there is a valid line break between a Myanmar kinzi and a consonant.
See http://bugs.icu-project.org/trac/ticket/12561 for the ICU bug.

Bug: 28964845
Change-Id: I076ac15077e5627cbccf6732900bcc60d8596dda
2016-05-25 16:46:56 -07:00
Adam Buchbinder
7739573616 Fix a leaked file in HyphTool.cpp.
This addresses the following cppcheck reports:
[frameworks/minikin/app/HyphTool.cpp:30]: (error) Resource leak: f
[frameworks/minikin/app/HyphTool.cpp:32]: (error) Resource leak: f

Change-Id: I5113e0a7268bd3a45bf1498fd023042d9dfe2b87
2016-05-23 13:16:13 -07:00
Seigo Nonaka
4c4b6220f1 Do not break before and after ZWJ. am: 77f4883 am: f9783b1
am: bf94219

* commit 'bf94219d636cb137284032a124d8286335e33060':

Change-Id: I022dd9f9f800851fc7941dcdc4ebd0a9aca0f0bf
2016-04-19 18:55:22 +00:00
Seigo Nonaka
f0beb61515 Do not break before and after ZWJ. am: 77f4883 am: 3bee494
am: 8010ad4

* commit '8010ad473b88233f2fcacd869ac22cb775e60228':
  Do not break before and after ZWJ.

Change-Id: I5cdc475d6b525aac29b8433e675d2ad2feb68722
2016-04-19 18:55:22 +00:00
Seigo Nonaka
bf94219d63 Do not break before and after ZWJ. am: 77f4883
am: f9783b1

* commit 'f9783b1322800306d83d853e8a2de3322213313a':

Change-Id: I5a637871133d3e45c47c5b6dc8407bda946dbd62
2016-04-19 18:46:15 +00:00
Seigo Nonaka
8010ad473b Do not break before and after ZWJ. am: 77f4883
am: 3bee494

* commit '3bee494eead989500c38d98f7f863986e95e25e0':
  Do not break before and after ZWJ.

Change-Id: If1fe6c6192aae09bab68a00bc94aba3e768dd445
2016-04-19 18:42:30 +00:00
Seigo Nonaka
f9783b1322 Do not break before and after ZWJ.
am: 77f4883

* commit '77f488345316fba46c271fc04bea470819ae1712':
  Do not break before and after ZWJ.

Change-Id: Ic476d9048b44b84c69fd185b76108c961d8e8545
2016-04-19 18:39:03 +00:00
Seigo Nonaka
3bee494eea Do not break before and after ZWJ.
am: 77f4883

* commit '77f488345316fba46c271fc04bea470819ae1712':
  Do not break before and after ZWJ.

Change-Id: I00a0e31c19dd5b2fbe2ffb389bec4001dec5d6c1
2016-04-19 18:38:59 +00:00
Seigo Nonaka
77f4883453 Do not break before and after ZWJ.
The emoji list is generated from external/unicode/emoji-data.txt

Bug: 28248662
Change-Id: Ie49b3782505665d62c24371ca23d317ae5e9c5f7
2016-04-19 14:09:38 +00:00
Seigo Nonaka
b2b218470f Returns hasVariationSelector true for VS15/VS16 am: 994aa84
am: 34c784e

* commit '34c784e5ef4f93ddc54d84727b3d50e186da5056':
  Returns hasVariationSelector true for VS15/VS16

Change-Id: I14b0971a3ff50572e594a0814a26e10113fe7c1c
2016-04-15 15:38:18 +00:00
Seigo Nonaka
34c784e5ef Returns hasVariationSelector true for VS15/VS16
am: 994aa84

* commit '994aa84f7b18466806fe552ea57da1852b909f24':
  Returns hasVariationSelector true for VS15/VS16

Change-Id: Iff3953948c8457e2a85e5859559411511a326f33
2016-04-15 15:31:59 +00:00
Seigo Nonaka
994aa84f7b 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
2016-04-15 12:45:04 +09:00
Raph Levien
c3aa6114d7 Merge "Clear mLineWidths in LineBreaker::finish()" into nyc-dev am: b1203b6
am: 4d42baf

* commit '4d42baffd1e488da1aa691c241cb1f060d0deb42':
  Clear mLineWidths in LineBreaker::finish()

Change-Id: I59606b706f78eda015da28f0ce6201b445086cbe
2016-04-13 16:25:06 +00:00
Raph Levien
4d42baffd1 Merge "Clear mLineWidths in LineBreaker::finish()" into nyc-dev
am: b1203b6

* commit 'b1203b648acb109fddd537f8d76d168b7f70103e':
  Clear mLineWidths in LineBreaker::finish()

Change-Id: I968a1584b9f2d2242725b8ab7047091ca9ecd6ee
2016-04-13 16:21:38 +00:00
Raph Levien
b1203b648a Merge "Clear mLineWidths in LineBreaker::finish()" into nyc-dev 2016-04-13 16:11:56 +00:00
Raph Levien
879e8a3a47 Clear mLineWidths in LineBreaker::finish()
There was the possibility of stale indents from previous invocations
persisting in the mLineWidths across multiple invocations. This patch
clears them.

Bug: 28090810
Change-Id: I3621dfbe983512046289373711709aeade52eab4
2016-04-12 15:27:17 -07:00
Seigo Nonaka
ba8a54685d Fix minikin_unittests am: 6c60831
am: af36413

* commit 'af36413cd85c478bb471ffa9ec84a0a8bee0bce9':
  Fix minikin_unittests

Change-Id: Ibac5c54ae165d96811238a4e8d2e9612d1192eaf
2016-04-11 21:09:46 +00:00
Seigo Nonaka
af36413cd8 Fix minikin_unittests
am: 6c60831

* commit '6c60831cfce24b0749f50f37231e0a56d8fd4b85':
  Fix minikin_unittests

Change-Id: I865dd495ed60b0bbace0ba77b2071dac058887e9
2016-04-11 21:01:14 +00:00
Seigo Nonaka
6c60831cfc Fix minikin_unittests
This CL fixes following test cases in minikin_tests
- FontFamilyTest.hasVariationSelectorTest
- HbFontCacheTest.getHbFontLockedTest
- HbFontCacheTest.purgeCacheTest

For the fix of FontFamilyTest.hasVariationSelectorTest, removing virtual
from GetUniqueId() in MinikinFont.  After [1], MinikinFont's destructor
started calling purgeHbCache() which calls virtual method,
MinikinFont::GetUniqueId().  Fortunately, the SkTypeface::uniqueID()
returns just internal value, so we can store it at the construction time
and use it instead of calling SkTypeface::uniqueID() every time.

This patch also changes purgeHbFont to purgeHbFontLocked, as all uses of
it were already under global mutex. This change avoids deadlock on
explicit unref, as when invoked by a Java finalizer from the Java object
that holds a reference to the font.

Some of the tests needed to change to using the ref counting protocol
rather than explicitly destructing font objects, as well.

[1] 9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd

Bug: 28105730
Bug: 28105688
Change-Id: Ie5983c4869147dacabdca81af1605066cd680b3f
2016-04-11 13:33:35 -07:00
Raph Levien
f76186f33e Update minikin/sample code to use new GetTable am: 29abb82
am: bfc161d

* commit 'bfc161d8fa1f1d5d4a2284b3d5beef2045c96176':
  Update minikin/sample code to use new GetTable

Change-Id: Idd6063401cdb1399bac52c975a32a0a0b221652f
2016-04-08 18:10:08 +00:00
Raph Levien
bfc161d8fa Update minikin/sample code to use new GetTable
am: 29abb82

* commit '29abb82198868908ece4600284fa8b7d3ed73f3b':
  Update minikin/sample code to use new GetTable

Change-Id: I5fcae79c42322dcc0533dbd3eb1a51007e089170
2016-04-08 17:55:14 +00:00
Raph Levien
29abb82198 Update minikin/sample code to use new GetTable
We changed the signature of the MinikinFont::GetTable method. This
patch updates the sample code, and fixes the build.

Change-Id: I1977be868bf7636986fc802915f3dd54c418a73a
2016-04-08 10:28:47 -07:00
Raph Levien
46899c5c85 Avoid copying of font table data am: aaa4e34
am: 0b5d3b2

* commit '0b5d3b2bea4bcb59a5d20f54cb4f81e0aa46ebce':
  Avoid copying of font table data

Change-Id: Ie1e0be38e1875702414b7ca005c5837bd60b82d8
2016-04-08 16:57:34 +00:00
Raph Levien
0b5d3b2bea Avoid copying of font table data
am: aaa4e34

* commit 'aaa4e3470270496e6eb80704eadecb2cb7c56bf0':
  Avoid copying of font table data

Change-Id: Idc4074ebf93595fa0420986814462095730f00c2
2016-04-08 16:49:56 +00:00
Raph Levien
aaa4e34702 Avoid copying of font table data
The hb_font_t object holds on to tables of font data, acquired through
the MinikinFont::GetTable interface, which is based on copying data
into caller-owned buffers. Now that we're caching lots of hb_font_t's,
the cost of these buffers is significant.

This patch moves to a different interface, inspired by HarfBuzz's
hb_reference_table API, where the font can provide a pointer to the
actual font data (which will often be mmap'ed, so it doesn't even
consume physical RAM).

Bug: 27860101
Change-Id: Id766ab16a8d342bf7322a90e076e801271d527d4
2016-04-08 08:26:38 -07:00
Raph Levien
ff5e822a7b Purge hb font on Minikin font destruction am: 9afcc6e
am: aa49542

* commit 'aa49542698ca22f2e70418a33d4829ab93e433f2':
  Purge hb font on Minikin font destruction

Change-Id: If40c31c90bf4f12fdd882be4f2c6f9b35ba2d09c
2016-04-07 22:42:46 +00:00
Raph Levien
aa49542698 Purge hb font on Minikin font destruction
am: 9afcc6e

* commit '9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd':
  Purge hb font on Minikin font destruction

Change-Id: Idb2034353407e8b390cc07862803f846d5adea0c
2016-04-07 22:38:47 +00:00
Raph Levien
9afcc6e2bd Purge hb font on Minikin font destruction
This patch eagerly purges the corresponding hb_font_t object from
the HbFontCache when the underlying MinikinFont is destroyed. After
that, the key will no longer be accessed, so having the entry is
wastes memory.

Bug: 27251075
Bug: 27860101
Change-Id: I1b98016133fe3baf6525ac37d970a65ddccadb4f
2016-04-07 13:43:15 -07:00
Seigo Nonaka
27f3bc0b52 Support multiple locales for font language settings. am: f3afe92
am: 5f7df3e

* commit '5f7df3eca54701632ee28733ab2412351e5cddd7':
  Support multiple locales for font language settings.

Change-Id: I27df2a2d6de262599931a16a9a65030149ee8991
2016-04-05 06:45:33 +00:00
Seigo Nonaka
5f7df3eca5 Support multiple locales for font language settings.
am: f3afe92

* commit 'f3afe92def0fff022889fd036d68451223aac146':
  Support multiple locales for font language settings.

Change-Id: Iad60bf1c01f309e70c3b1ad22e28b22afe44b33f
2016-04-05 06:42:58 +00:00
Seigo Nonaka
f3afe92def Support multiple locales for font language settings.
Some fonts support multiple scripts, for example, some fonts for
Korean supports not only "Kore" but also "Jamo".

To select fonts based on their multiple languages, this CL introduces
the following changes:
- Compares all languages of the font family and use the maximum score
  for font selection.
- Even if each language of the font family doesn't support the requested
  language, the font get score of 2 if the requested font is covered by
  all of the languages of the font family. For example, the font for
  "ko-Hang,ko-Hani" gets score of 2 for the requested language "ko-Kore".

Bug: 26687969

Change-Id: I7f13b51464c9b01982bb573251d77052b9ddbd70
2016-04-04 22:31:16 +09:00
Roozbeh Pournader
78768409da Try putting combining marks in the same font run am: 16ed4ef
am: 8559354

* commit '85593542c42d86874e0f21685acb9f77389cd79b':
  Try putting combining marks in the same font run

Change-Id: If298c6d45b48928c7a93ac4866272f78b2f0aedd
2016-03-31 18:28:11 +00:00
Roozbeh Pournader
85593542c4 Try putting combining marks in the same font run
am: 16ed4ef

* commit '16ed4ef07ed8fb2333447b48055633bf8d4f38e4':
  Try putting combining marks in the same font run

Change-Id: I6f76b791acde2dc8209e8d33da02d148a9f790d8
2016-03-31 18:25:12 +00:00