322 Commits

Author SHA1 Message Date
Fabrice Di Meglio
a731b082b2 Code cleaning: centralize use of #if USE_TEXT_LAYOUT_CACHE
- also clean some destructors (was not quite compulsory because
they are related to some Singletons)

Change-Id: I3091cac7b38628cda593d72570ba7a5d7ea2a15c
2012-01-27 14:24:46 -08:00
Fabrice Di Meglio
e414613bb8 Merge "Fix bug #5901103 all_source_project_146981_Android - Android ICS LQA Regression:FA, AR, HE and TH - Font Corruption" 2012-01-24 16:57:21 -08:00
Fabrice Di Meglio
3941a22bfd Fix bug #5901103 all_source_project_146981_Android - Android ICS LQA Regression:FA, AR, HE and TH - Font Corruption
- use the first char of the "run" instead of the "string" for the BaseGlyphCount

Change-Id: I647528ec912bb69655cf301bbc73b66dc1a6fc82
2012-01-24 16:44:00 -08:00
Fabrice Di Meglio
bd901dee31 Fix bug #5846413 "phone" keyboard layout is broken on master
- was a subtle regression introduced when fixing bug #5753006
- as we are now using SkPaint::kGlyphID_TextEncoding (glyph encoding)
instead of SkPaint::kUTF16_TextEncoding (UTF16 encoding), we need to
force the UTF16 encoding in some cases that are NOT going thru
the TextLayoutCache / Harfbuzz shaping

- fix also breakText() the same way

- also clean some old comment

- Warning: depends also on a CL from Skia for having getBaseGlyphCount() "const"

Change-Id: I3d1fc87f070884876c679b33541f810fbfb5df3f
2012-01-23 13:34:08 -08:00
Romain Guy
11d06a73df Merge "Fix text encoding when drawing with drawPosText in software" 2012-01-17 14:54:45 -08:00
Romain Guy
62b6eaa7f3 Fix text encoding when drawing with drawPosText in software
Change-Id: I0cd8ee526189c38c50953a1a08b50e0b31c55d8c
2012-01-17 14:53:26 -08:00
Fabrice Di Meglio
c7c09960ff Merge "Fix bug #5870701 Thai text can be clipped when there are more glyphs generated than the initial number of code points" 2012-01-17 11:51:22 -08:00
Fabrice Di Meglio
03e250aefa Fix bug #5870701 Thai text can be clipped when there are more glyphs generated than the initial number of code points
- compute total advances correctly by iterating on the advances array for up to mShaperItem.num_glyphs
- update unit tests

Change-Id: I00af68bef88702215e9222ed80dbffcc81df51a7
2012-01-13 19:49:46 -08:00
Steve Block
3762c31172 Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/#/c/157220

Bug: 5449033
Change-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c
2012-01-08 13:19:13 +00:00
Steve Block
8564c8da81 Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/157065

Bug: 5449033
Change-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69
2012-01-06 10:07:54 +00:00
Fabrice Di Meglio
d4a69b4a1c Merge "Fix bug #5753006 Garbled Labels in Maps" 2012-01-05 15:18:52 -08:00
Steve Block
bd47cac4df Merge "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGE" 2012-01-05 14:07:02 -08:00
Fabrice Di Meglio
c726ff02c7 Merge "Fix bug #5822825 Paint.measureText (char[] text, int index, int count) cannot handle text more than 32K long" 2012-01-05 13:55:01 -08:00
Fabrice Di Meglio
c511bee87c Fix bug #5753006 Garbled Labels in Maps
- it was a regression introduced into this CL: https://android-git.corp.google.com/g/#/c/154240/5
- basically needed to set the GlyphID encoding to the Skia Paint as we are now using glyphID resulting
from the Harfbuzz shaping
- also define GlyphID encoding as the default on the Paint class

Change-Id: Idb7c2c57ac67595425ce3be9421258962690fcdd
2012-01-05 13:30:54 -08:00
Fabrice Di Meglio
bd7cdc32eb Fix bug #5822825 Paint.measureText (char[] text, int index, int count) cannot handle text more than 32K long
- do not clear the smart pointer when the cache entry does not fit the cache size

Change-Id: I49f1aa1e70018bb7d6a8fb076d9269d0ec6a5d98
See: http://code.google.com/p/android/issues/detail?id=23337
2012-01-04 14:25:54 -08:00
Steve Block
6215d3ff4b Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/156801

Bug: 5449033
Change-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea
2012-01-04 20:05:49 +00:00
Steve Block
5baa3a62a9 Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/156016

Bug: 5449033
Change-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298
2012-01-03 22:38:27 +00:00
Fabrice Di Meglio
a4d0770063 Fix bug #5674155 Segmentation issue for Thai
- force Harfbuzz to shape with the Thai font

Change-Id: I3830acae17385b050e2745fca277cf66af103099
2011-12-13 18:52:13 -08:00
Fabrice Di Meglio
65194adc9a Fix bug #5727213 Rendering issues with Bengali in Textview in IML63B
- force Harfbuzz to shape with the Bengali font
- also fix potential returned NULL value from SkTypeface::CreateFromFile(path)

Change-Id: I25be09d06e449b89bb4a62444e27f77e436b77ba
2011-12-13 18:14:49 -08:00
Fabrice Di Meglio
902a5b31c5 TextLayoutCache - fix diacritics composition
- normalize (with ICU) each BiDi run before shaping them

We are normalizing by "chuncks" and starting from the end of the string. Each "chunck"
is composed of the main code point and its associated diacritics.

Fix bug #5738435 TextLayoutCache should be able to take care about diacritics during shaping

Change-Id: I7288027a7fa8eafb8b9f38d449625be60214548a
2011-12-13 15:28:16 -08:00
Fabrice Di Meglio
b02d0ca555 Clean TextLayout code and remove RTL_USE_HARFBUZZ
- remove dependencies on ICU
- use TextLayouCache
- remove RTL_USE_HARFBUZZ define (we *are* using Harfbuzz now)
- also fix compilation warning

Change-Id: I022e11703438d07032e49e42724184f6bf16653e
2011-12-08 15:16:17 -08:00
Jeff Brown
a03bdedbdf Harfbuzz assumes the length of the item is at least 1.
If the length is zero, then it will clobber memory at index -1
into the log_clusters array.

Explicitly handle the cases where the entire string or a single
run might have a length of 0.

Bug: 5705479
Change-Id: Ibbd3a4edcb7e1cad09c34091b42bb315776ea558
2011-12-05 20:33:50 -08:00
Jeff Brown
738ef87eac Ensure log_clusters array is big enough.
Bug: 5714171
Change-Id: I886f1af8af177827f052e6406a192f2fad5c2cec
2011-12-05 20:24:21 -08:00
Fabrice Di Meglio
868d1bdf3c Merge "TextLayoutCache Fix compilation issue" 2011-12-02 16:21:14 -08:00
Fabrice Di Meglio
5448f0378e TextLayoutCache Fix compilation issue
- fix compilation after refactoring and when setting DEBUG_ADVANCES to 1

Change-Id: I8eef7e3c4550c505325459948d3c8eebbdd5215a
2011-12-02 15:56:19 -08:00
Fabrice Di Meglio
2e5e96e9f0 TextLayoutCache Code cleaning
- remove commented code
- fix log

Change-Id: I8495b923c9426e33e645fe85ea04005520716f4e
2011-11-30 20:08:16 -08:00
Fabrice Di Meglio
56e6e54927 Improve TextLayoutCache logging
- make logs more consistent and readable
- add more logs information

Change-Id: Idfe5bb53e9163c4c07a9b4267b66b0d0e164a498
2011-11-30 15:48:18 -08:00
Fabrice Di Meglio
0af10b54bf Improve TextLayoutCache performances
- introduce TextLayoutEngine
- reduce calls to HB_NewFace as they are opening the font files under the cover
- refactor code for removing FontData structure
- fix logging

Change-Id: Id9658fcd454b74c34ecf4e9dfd1bd2201e04b988
2011-11-22 11:16:20 -08:00
Fabrice Di Meglio
a4f5aa87c7 Fix TextLayoutCache Skia Typeface caching
- fix reference passing for globals

Change-Id: I806dd4406d455b98c6be733847419b06b6774ccc
2011-11-18 15:23:53 -08:00
Jeff Brown
bf677de46a Merge "Clean up GenerationCache." 2011-11-14 18:28:59 -08:00
Mathias Agopian
d8fa1ad452 am 738d8cae: am c93a151f: Merge "Define, document, and test the behavior of very large SurfaceTextures" into ics-mr1
* commit '738d8cae2239d194429676f2889cfae3c8f7ba08':
  Define, document, and test the behavior of very large SurfaceTextures
2011-11-14 11:54:38 -08:00
Mathias Agopian
c93a151fde Merge "Define, document, and test the behavior of very large SurfaceTextures" into ics-mr1 2011-11-14 11:49:42 -08:00
Jeff Brown
d9e688cab3 Clean up GenerationCache.
Use const references to keys and values where appropriate to avoid
copying them unnecessarily.

Deleted some dead code.

Simplified a few pieces that were doing unnecessary redundant work.

Change-Id: Ib2145b7094a40db2d679e05dafe050fe1e87b846
2011-11-11 22:14:07 -08:00
Jeff Brown
ad169f49af am 0e4669c8: am f1f0c873: Fix bug in TextLayoutCacheKey handling embedded nulls.
* commit '0e4669c81009cea51d9d7b42b7ff665f44e78aa6':
  Fix bug in TextLayoutCacheKey handling embedded nulls.
2011-11-11 20:37:12 -08:00
Jeff Brown
0e4669c810 am f1f0c873: Fix bug in TextLayoutCacheKey handling embedded nulls.
* commit 'f1f0c873b1d119a19342cb67ca77b59607951659':
  Fix bug in TextLayoutCacheKey handling embedded nulls.
2011-11-11 20:34:48 -08:00
Jeff Brown
6f0464e79d am f1f0c873: Fix bug in TextLayoutCacheKey handling embedded nulls.
* commit 'f1f0c873b1d119a19342cb67ca77b59607951659':
  Fix bug in TextLayoutCacheKey handling embedded nulls.
2011-11-11 19:22:04 -08:00
Mathias Agopian
b89d88f531 Define, document, and test the behavior of very large SurfaceTextures
updateTexImage() now throws a runtime exception when its native
counterpart fails

Bug: 5506633

Change-Id: I151a6f685d465966e7df4df624412ab2da62e95f
2011-11-11 18:44:35 -08:00
Jeff Brown
06daa7b6b2 Improve the logging in TextLayoutCache.
Also deleted some dead code.

Change-Id: I1feb5744177ae751ff1417f49f3c45139a35246b
2011-11-11 15:46:05 -08:00
Jeff Brown
f1f0c873b1 Fix bug in TextLayoutCacheKey handling embedded nulls.
We were not passing the length of the UTF-16 string to
String16::setTo.  As a result, it was copying the contents of
the text up to the first null it found.

First problem, these strings are not typically null terminated!

Second problem, if the string contained a null character, then
we might truncate it.  However, we only truncated the string
when the copy constructor was invoked (say, when we called
get() on the cache) but not in internalTextCopy() (before
adding the key to the cache).

As a result of the second problem, we would first search
the cache for a key that matched a partially copied truncated
string (potentially reading uninitialized memory that followed it).
Finding none, we would add the entry to the cache using
the correct key.

If the cache already had a value associated with the correct key,
then the put would fail, returning false.  Charging ever onwards,
we would add the size of the entry to the cache size.

Proceeding in this manner, it was possible for the cache to
believe it had less remaining space than it really did.  At that
point, it was possible for the cache to evict all entries and
yet still not think it had room to add a new one, so it would
continue trying to make space indefinitely.

Bug: 5576812
Change-Id: I05251594f6b2da0a5dc09f7200f04fe9100ec766
2011-11-11 15:41:40 -08:00
Fabrice Di Meglio
208d4592f6 Fix potential crash when shaping Hebrew with bold
- make code more resilient
- make correct initialization of gHebrewRegularTypeface

Change-Id: I97e98d36b830ad35979184c1459e8c8503eb3d28
2011-11-08 17:13:49 -08:00
Fabrice Di Meglio
e187a2f55f Fix bug #5559439 Bogus tab title in browser
- no need to shigt glyph IDs if we are a "common" script
- also code cleaning (suppress dead code)

Change-Id: I17bcf960f925a897a30894a3c581053f7fe5905f
2011-11-07 19:54:09 -08:00
Fabrice Di Meglio
4f4b83c50c am 07b4b314: am bcf05a69: Fix bug #5553401 TextLayoutCache is too verbose: "computeValuesWithHarfbuzz -- need to force to single run"
* commit '07b4b3145333bc8ece9fdbb68ade726b3d6485cd':
  Fix bug #5553401 TextLayoutCache is too verbose: "computeValuesWithHarfbuzz -- need to force to single run"
2011-11-02 17:50:18 +00:00
Fabrice Di Meglio
07b4b31453 am bcf05a69: Fix bug #5553401 TextLayoutCache is too verbose: "computeValuesWithHarfbuzz -- need to force to single run"
* commit 'bcf05a69090f342d328f1537d1d83406b883290b':
  Fix bug #5553401 TextLayoutCache is too verbose: "computeValuesWithHarfbuzz -- need to force to single run"
2011-11-02 02:17:48 +00:00
Fabrice Di Meglio
bcf05a6909 Fix bug #5553401 TextLayoutCache is too verbose: "computeValuesWithHarfbuzz -- need to force to single run"
- make single run case non verbose

Change-Id: I5c3b87aeb613697233290ddecac3ca00f58f8313
2011-11-01 17:58:00 -07:00
Fabrice Di Meglio
ef9bb3c3ea Fix bug #5438102 Double Arabic harakat overlap instead of stack In TextView
IMPORTANT: this change needs two patches for Harfbuzz:
- one concerning hb_utf16_script_run_prev() which was not returning the correct "previous" script
- one for the "script_properties" table that was missing Arabic code point ranges and declaring
HB_Script_Inherited instead of HB_Script_Arabic

The current change is doing the following:
- pass the correct typeface for Harbuzz shaping (depending on the script of the run)
- offset correctly the glyphIDs returned by Harfbuzz

We need to offset the glyphsID as Harfbuzz will return local glyphIDs (meaning in the
local range of the font used for shapping).

We then cannot use those glyphIDs when we are using a fallback Font (Arabic, Hebrews...)
because the FontRenderer needs glyphIDs in the range of all the Fonts (including the fallbacks)

Change-Id: I494897435bbc59293b02392ee2059cebcdf0e571
2011-11-01 17:16:08 -07:00
Fabrice Di Meglio
904221a342 Fix bug #5504346 Hung in native_getTextRunAdvances - DO NOT MERGE
- better check of ICU returned values
- default to single run if ICU is returning errors

Change-Id: I836818bda4fc72a27b2201f01023cd23c5d99ecb
2011-11-01 12:47:51 -07:00
Fabrice Di Meglio
26e9ee28de Fix bug #5504346 Hung in native_getTextRunAdvances - DO NOT MERGE
- better check of ICU returned values
- default to single run if ICU is returning errors

Change-Id: I836818bda4fc72a27b2201f01023cd23c5d99ecb
2011-11-01 10:49:44 -07:00
Fabrice Di Meglio
ad41b7c0d4 Merge "Fix bug #5504346 Hung in native_getTextRunAdvances" 2011-10-31 15:53:54 -07:00
Fabrice Di Meglio
5beeda08a7 Fix bug #5504346 Hung in native_getTextRunAdvances
- better check of ICU returned values
- default to single run if ICU is returning errors

Change-Id: I836818bda4fc72a27b2201f01023cd23c5d99ecb
2011-10-31 15:26:11 -07:00
Steve Block
71f2cf116a Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF) DO NOT MERGE
See https://android-git.corp.google.com/g/#/c/143865

Bug: 5449033
Change-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a
2011-10-26 09:57:54 +01:00