233 Commits

Author SHA1 Message Date
Seigo Nonaka
410f1e69a7 Merge "Fix lock assertion failures in unit test." 2016-01-07 03:14:25 +00:00
Dan Austin
c3a7ec8af1 Enable integer sanitization in libminikin am: da13d5e835
am: 7521326d4f

* commit '7521326d4fcd3bfda5aaa02a2b54122cce6fcadd':
  Enable integer sanitization in libminikin
2016-01-06 20:44:58 +00:00
Dan Austin
7521326d4f Enable integer sanitization in libminikin
am: da13d5e835

* commit 'da13d5e835bf4657246e2410dcf29c0b4a61887b':
  Enable integer sanitization in libminikin
2016-01-06 20:42:47 +00:00
Dan Austin
da13d5e835 Enable integer sanitization in libminikin
Enable signed and unsigned integer sanitization in libminikin.

Bug: 25884483
Change-Id: I98905827174d16138d20bb443fe2e1d7228ea1a3
2016-01-06 12:30:12 -08:00
Dan Austin
1854e6c2df Revert "Enable integer sanitization in libminikin." am: 2ffc286102
am: 8c5fc9931f

* commit '8c5fc9931fec0ccaff1181ff82f4965236f17036':
  Revert "Enable integer sanitization in libminikin."
2016-01-06 18:38:18 +00:00
Dan Austin
8c5fc9931f Revert "Enable integer sanitization in libminikin."
am: 2ffc286102

* commit '2ffc28610290d221109105ba17969db83b317ca1':
  Revert "Enable integer sanitization in libminikin."
2016-01-06 18:36:33 +00:00
Dan Austin
2ffc286102 Revert "Enable integer sanitization in libminikin."
This reverts commit 147ce0acb9ccb2c7594e47512ac0f5d68eafb580.

Change-Id: Iecd1f61a5fdf5955d871a920cb243553857d46ff
2016-01-06 18:31:38 +00:00
Dan Austin
1d362de4cc Enable integer sanitization in libminikin. am: 147ce0acb9
am: ea647a237d

* commit 'ea647a237d8ded834b585f5556b98509e2221ca1':
  Enable integer sanitization in libminikin.
2016-01-06 17:08:33 +00:00
Dan Austin
ea647a237d Enable integer sanitization in libminikin.
am: 147ce0acb9

* commit '147ce0acb9ccb2c7594e47512ac0f5d68eafb580':
  Enable integer sanitization in libminikin.
2016-01-06 17:06:22 +00:00
Seigo Nonaka
02345a5e8f Fix lock assertion failures in unit test.
The assertion for the lock state has now activated by
I9c4b1e1f09c6793e387fbdb8bb654cc0a13c65d5.
This CL fixes the assertion failure in the unit tests by acquiring
lock before calling the functions.

Change-Id: I6a6afefb4de01e8610c2abfe6c779afa9442cc67
2016-01-06 22:49:33 +09:00
Seigo Nonaka
ce3b0ada93 Merge "Fix race condition in Paint.hasGlyph()" 2016-01-06 06:00:38 +00:00
Seigo Nonaka
5f7e7e239e Fix race condition in Paint.hasGlyph()
The caller of FontFamily::hasVariationSelector needs to acquire the
lock before calling it, but FontCollection::hasVariationSelector
didn't acquire the lock. This caused a race condition.
This CL fixes this race condition.

Also, it turned out that assertMinikinLocked didn't assert even on
eng or userdebug device. This CL enables assertion on eng and userdebug
device since this assertion must be treated as bug.

BUG: 26323806

Change-Id: I9c4b1e1f09c6793e387fbdb8bb654cc0a13c65d5
2016-01-06 03:21:37 +00:00
Dan Austin
147ce0acb9 Enable integer sanitization in libminikin.
Enable signed and unsigned integer sanitization in libminikin.

Bug: 25884483
Change-Id: I53abf6affea8e2bb3a5abd381a9f19003a306b36
2016-01-05 17:36:31 -08:00
Roozbeh Pournader
ce6d478f39 Merge "Replace Qaae script with Zsye" 2016-01-05 21:54:29 +00:00
Seigo Nonaka
9d30380ce9 Replace Qaae script with Zsye
The emoji variant script "Zsye" is registered in ISO 15924.

Bug: 26226285
Change-Id: Ibc2bc740d57c48f99b6f66b1ad7595bfa8c3cff4
2016-01-05 05:05:57 +00:00
Seigo Nonaka
5bacbeb514 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
2016-01-05 14:00:32 +09:00
Raph Levien
9b120f1134 Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE am: d40c0c59e4 -s ours am: 3871933e15 -s ours
am: d86eba7db1  -s ours

* commit 'd86eba7db180d8f77bcf3951b8a50d50d1f97aa7':
2015-12-23 18:11:56 -08:00
Bart Sears
89ddae5f59 Merge "Revert "Save all kind of script tags into FontLanguage."" 2015-12-22 09:07:09 +00:00
Bart Sears
40c8b088bd Revert "Save all kind of script tags into FontLanguage."
This reverts commit bb5c10092c3ec3246a9f4c52cd6b620e86fa5bd8.

Change-Id: I761e0e41906742fbe3d3ac34170af3101e18042a
2015-12-22 09:06:03 +00:00
Seigo Nonaka
bc11d65c44 Merge "Save all kind of script tags into FontLanguage." 2015-12-22 04:01:19 +00:00
Seigo Nonaka
bb5c10092c 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
2015-12-22 09:34:04 +09:00
Seigo Nonaka
e745083812 No op build should not build minikin_tests
Previous CL[1] adds module names into LOCAL_ADDITIONAL_DEPENDENCIES, but
it was wrong. LOCAL_ADDITIONAL_DEPENDENCIES only accepts file path.

However, BUILD_PREBUILT doesn't provide a file path of the installed
font. So use custom tool and LOCAL_GENERATED_SOURCES instead.

Confirmed no-op build doesn't built minikin_tests and
continuous_native_tests.zip contains all necessary files.

[1]: I7d83abc077bce4e38fd93c7d607bc7e1f7871e6b

BUG: 26197092
Change-Id: I90e80036248ae72e0e0f9c6144a259f5f96ec9ce
2015-12-15 16:11:21 -08:00
Dan Austin
d41c16fb7e Refactored unsigned long negations am: 10fbe684fb
am: 6dc8b89df4

* commit '6dc8b89df4ef861937d308301683ea30da0645eb':
  Refactored unsigned long negations
2015-12-14 09:30:20 -08:00
Dan Austin
6dc8b89df4 Refactored unsigned long negations
am: 10fbe684fb

* commit '10fbe684fbabfb51112bcd44e7f2a80d5c9807cb':
  Refactored unsigned long negations
2015-12-14 09:12:42 -08:00
Dan Austin
10fbe684fb Refactored unsigned long negations
Replaced two instances of negating an unsigned long, which was
resulting in aborts from unsigned integer sanitization with the
equivalent logical not-add 1.

Bug: 25884483
Change-Id: Ic7498e0af638dcd438ce69803021d3cdc3acd4f6
2015-12-11 16:33:23 -08:00
Seigo Nonaka
eb3ba19800 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
2015-12-10 18:41:03 -08:00
Seigo Nonaka
01c7dcc124 Copy test font files into data directory.
To work native tests with additional font related files, copy
the files into /data/nativetest/minikin_tests/.
This copy only happens when the minikin_tests is built.
It is not an expected to copy the font files into the product image.

Change-Id: I7d83abc077bce4e38fd93c7d607bc7e1f7871e6b
2015-12-09 14:44:12 -08:00
Seigo Nonaka
091810c32b Introduce FontLanguageListCache.
FontLanguageListCache is an intentionally leaky singleton and its
internal cache won't be purged.

BUG: 25122318

Change-Id: I272097e979fe44b83fd86822235350e12eda8f51
2015-12-08 18:49:18 -08:00
Seigo Nonaka
4248406195 Merge "Select emoji font based on variation selectors." 2015-12-08 21:29:42 +00:00
Raph Levien
4d95cc5f8e Avoid integer overflows in parsing fonts am: 1fd1c39021 am: fa84e49423 am: 47e7a9b486 am: e275a0a2bd am: bc9873b55a am: 4b48ea9558
am: 10cd33807c

* commit '10cd33807c4c654c46e42802274106d14bce7795':
  Avoid integer overflows in parsing fonts
2015-12-08 19:58:04 +00:00
Raph Levien
10cd33807c Avoid integer overflows in parsing fonts am: 1fd1c39021 am: fa84e49423 am: 47e7a9b486 am: e275a0a2bd am: bc9873b55a
am: 4b48ea9558

* commit '4b48ea95580e818840c8d39439575aeed50e2239':
  Avoid integer overflows in parsing fonts
2015-12-08 19:54:42 +00:00
Raph Levien
4b48ea9558 Avoid integer overflows in parsing fonts am: 1fd1c39021 am: fa84e49423 am: 47e7a9b486 am: e275a0a2bd
am: bc9873b55a

* commit 'bc9873b55a20b2ae64260add695e4b1a81014ce6':
  Avoid integer overflows in parsing fonts
2015-12-08 11:36:58 -08:00
Raph Levien
bc9873b55a Avoid integer overflows in parsing fonts am: 1fd1c39021 am: fa84e49423 am: 47e7a9b486
am: e275a0a2bd

* commit 'e275a0a2bdd2c06b84e154a3c2c34b8a133048ff':
  Avoid integer overflows in parsing fonts
2015-12-08 19:33:14 +00:00
Raph Levien
e275a0a2bd Avoid integer overflows in parsing fonts am: 1fd1c39021 am: fa84e49423
am: 47e7a9b486

* commit '47e7a9b48626fcc5d15f18994f0382c7b490fd9b':
  Avoid integer overflows in parsing fonts
2015-12-08 11:29:31 -08:00
Raph Levien
47e7a9b486 Avoid integer overflows in parsing fonts am: 1fd1c39021
am: fa84e49423

* commit 'fa84e494232565cf5141bfb6736652fca6c710c2':
  Avoid integer overflows in parsing fonts
2015-12-08 19:22:49 +00:00
Raph Levien
fa84e49423 Avoid integer overflows in parsing fonts
am: 1fd1c39021

* commit '1fd1c390217da22a54b49e9a91bc79b0323e6a73':
  Avoid integer overflows in parsing fonts
2015-12-08 19:17:40 +00:00
Seigo Nonaka
c047506ec2 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
2015-12-07 16:49:16 -08:00
Raph Levien
1fd1c39021 Avoid integer overflows in parsing fonts
A malformed TTF can cause size calculations to overflow. This patch
checks the maximum reasonable value so that the total size fits in 32
bits. It also adds some explicit casting to avoid possible technical
undefined behavior when parsing sized unsigned values.

Bug: 25645298
Change-Id: Id4716132041a6f4f1fbb73ec4e445391cf7d9616
(cherry picked from commit 371e5dbb3f61fbfb653eed4fa2e452f8978419ff)
2015-12-07 17:58:12 +00:00
Raph Levien
371e5dbb3f Avoid integer overflows in parsing fonts
A malformed TTF can cause size calculations to overflow. This patch
checks the maximum reasonable value so that the total size fits in 32
bits. It also adds some explicit casting to avoid possible technical
undefined behavior when parsing sized unsigned values.

Bug: 25645298
Change-Id: Id4716132041a6f4f1fbb73ec4e445391cf7d9616
2015-11-30 15:08:41 -08:00
Seigo Nonaka
ff9d1a5484 Merge "Search all families instead of using mRanges for variation sequence." 2015-11-20 05:46:31 +00:00
Seigo Nonaka
abdea9d96d Merge "Introduce FontCollection::hasVariationSelector method." 2015-11-20 05:45:27 +00:00
Seigo Nonaka
3700f23508 Search all families instead of using mRanges for variation sequence.
To optimize the font family search, mRanges is used for narrowing down
the search range. However, mRanges is constructed from format 4 or
format 12 entries. So, if the font supports a variation sequence but doesn't
support the base character of the sequence, the font may not be listed in
mRanges.

The proper way to fix this issue is using format 14 subtable information
for mRanges construction. However, this is not a trivial work since currently
we rely on HarfBuzz for variation sequence lookup and it doesn't provide any
API for retrieving coverage information.

Thus, as the quick fix, iterate all font families in font fallback chain if
the variation sequence is specified.

Change-Id: I278da84be8fb8f553590e2e42ed450b7e4a34eca
2015-11-19 17:14:59 +09:00
Seigo Nonaka
77476fc5b9 Introduce FontCollection::hasVariationSelector method.
To implement Paint.hasGlyph(), we need a new method to ask the
FontCollection if it has a glyph for the code point and variation
selector pair.

Bug: 11256006
Change-Id: Ie4185c91bcaa4d01aee6beb97784b1f9d2a88f12
2015-11-19 17:01:46 +09:00
Raph Levien
abbb307682 Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE am: d40c0c59e4 -s ours am: 3871933e15 -s ours
am: 7aee6297e4  -s ours

* commit '7aee6297e42d6da44babd3c78f41247f54e117f3':
  Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE
2015-11-19 05:46:01 +00:00
Raph Levien
41fc0db12e Accept variation selector in emoji sequences - DO NOT MERGE am: 6e98debfaf -s ours am: 29af616a2b -s ours
am: 16698c880e  -s ours

* commit '16698c880e3edebb58deaefe05ee536607256e77':
  Accept variation selector in emoji sequences - DO NOT MERGE
2015-11-19 05:45:59 +00:00
Raph Levien
7aee6297e4 Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE am: d40c0c59e4 -s ours
am: 3871933e15  -s ours

* commit '3871933e1542292598e2ffdb88ac770342093d63':
  Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE
2015-11-18 19:59:22 +00:00
Raph Levien
d86eba7db1 Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE am: d40c0c59e4 -s ours
am: 3871933e15  -s ours

* commit '3871933e1542292598e2ffdb88ac770342093d63':
  Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE
2015-11-18 19:59:21 +00:00
Raph Levien
16698c880e Accept variation selector in emoji sequences - DO NOT MERGE am: 6e98debfaf -s ours
am: 29af616a2b  -s ours

* commit '29af616a2b4b07cfd2cb6b02c9d887b665a82a3f':
  Accept variation selector in emoji sequences - DO NOT MERGE
2015-11-18 19:59:17 +00:00
Raph Levien
3871933e15 Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE
am: d40c0c59e4  -s ours

* commit 'd40c0c59e446196c0beff54968913205f7f6fe28':
  Suppress linebreaks in emoji ZWJ sequences - DO NOT MERGE
2015-11-18 19:52:27 +00:00
Raph Levien
29af616a2b Accept variation selector in emoji sequences - DO NOT MERGE
am: 6e98debfaf  -s ours

* commit '6e98debfaf50ad0d301fef2d2b656ba175b2e02c':
  Accept variation selector in emoji sequences - DO NOT MERGE
2015-11-18 19:52:21 +00:00