summaryrefslogtreecommitdiff
path: root/core/java/android/text/PrecomputedText.java
Commit message (Collapse)AuthorAgeFilesLines
* Update the text wrapping API.James.cf Lin2022-03-101-31/+9
| | | | | | | | | | | 1) Update the LineBreakConfig class to be immutable. 2) Do not return null in the PrecomputedText.Params#getLineBreaiConfig API Bug: 216638444 Test: atest TextViewTest; atest MeasuredTextTest; atest PrecomputedTextTest; atest TextViewPrecomputedTextTest; atest StaticLayoutLineBreakingVariantsTest Merged-In: I93bcb6ebc35344e34e9bb8a24df375aa7b3a8d81 Merged-In: I07766137ff6639c7d4acaad07dbcf11a2841cdb0 Change-Id: I07766137ff6639c7d4acaad07dbcf11a2841cdb0
* Improve BoringLayout#isBoring for PrecomputedTextSeigo Nonaka2022-02-031-0/+33
| | | | | | | Bug: 216736786 Test: atest PrecomputedTextTest Test: perf score becomes 758,071 -> 110,755 Change-Id: I57d3eb9d1e896ed1c847733c4e96ac52dd97d2c4
* Add line break word style parameter in the LineBreakConfigJames.cf Lin2022-01-221-0/+4
| | | | | | | | The line break word style(lw) provides the phrase-based breaking opportunities. When the line break word style is set, it will be brought to ICU for calculation. Bug: 183780874 Test: atest minikin_tests; atest TextViewTest; atest MeasuredTextTest; atest PrecomputedTextTest Change-Id: Idd851497e46c1fca87ff590230d93f8bb5c9afae
* Add setLineBreakConfig APISeigo Nonaka2022-01-151-14/+79
| | | | | | | | Add new API to allow applications to specify the line break word style. The line break style is one of the locale extension. When the line break style is set, it will be brought to ICU for calculation. Bug: 183780874 Test: atest minikin_tests; atest TextViewTest; atest MeasuredTextTest; atest PrecomputedTextTest Change-Id: Ia9cdb5b83e346f96ae22abbb1bcce05c43207bba
* Implement fast hyphenation algorithmSeigo Nonaka2021-11-101-3/+24
| | | | | | | | | | | | | | | | | | | | | RandomText Balanced Hyphenation ON min: 2,312,291 mean: 2,320,574 median: 2,320,112 RandomText Balanced Hyphenation ON(Fast) min: 985,850 mean: 990,922 median: 986,586 RandomText Balanced Hyphenation OFF min: 909,060 median: 923,585 mean: 930,052 Bug: 201096525 Test: TreeHugger and minikin_tests Change-Id: Ide2d73acb3de85e91018e524c89df2c949235a4e
* Recompute PcT with existing PcT for different directionSeigo Nonaka2018-12-101-16/+105
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The text direction can not be fully determined in detached state. To improve even in that case, compute PrecomputedText from existing PrecomputedText with new direction. Here is the performance difference. According to the perf test result, up to 80% of computation can be recycled from existing PrecomputedText. android.text.StaticLayoutPerfTest (u sec): PrecomputedText Greedy NoHyphenation : 371 -> 371: ( +0, +0.0%) PrecomputedText Greedy NoHyphenation DirDifferent: 6,923 -> 1,437: (-5486, -79.2%) RandomText Greedy NoHyphenation : 6,633 -> 6,627: ( -6, -0.1%) On the other hand, this CL increase the memory usage of the PrecomputedText up to 10%. Here is an reference memory usage. android.text.PrecomputedTextMemoryUsageTest (bytes): MemoryUsage Arabic Hyphenation : 17,135 -> 18,116: ( +981, +5.7%) Arabic NoHyphenation : 17,135 -> 18,116: ( +981, +5.7%) CJK Hyphenation : 29,000 -> 31,584: (+2584, +8.9%) CJK NoHyphenation : 29,000 -> 31,584: (+2584, +8.9%) Latin Hyphenation : 16,526 -> 17,185: ( +659, +4.0%) Latin NoHyphenation : 14,200 -> 14,784: ( +584, +4.1%) Bug: 119312268 Test: atest CtsWidgetTestCases Test: atest CtsTextTestCases Test: atest CtsGraphicsTestCases Test: minikin_tests Change-Id: Ia02c201afac5d7d1c086a45f15696f39a6b2a76c
* Extract native methods into isolated classesSeigo Nonaka2018-07-271-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | StaticLayout/MeasuredParagraph uses native methods which is a pain point of porting TextView to JetPack. To make minimize the dependency to the native methods, extract native methods and put them into a thin wrapper class. The performance impact is limited: android.text.StaticLayoutPerfTest: PrecomputedText Balanced Hyphenation : 602 -> 644: ( +42, +7.0%) PrecomputedText Balanced NoHyphenation: 457 -> 476: ( +19, +4.2%) PrecomputedText Greedy Hyphenation : 397 -> 412: ( +15, +3.8%) PrecomputedText Greedy NoHyphenation : 397 -> 411: ( +14, +3.5%) RandomText Balanced Hyphenation : 17,594 -> 17,715: (+121, +0.7%) RandomText Balanced NoHyphenation : 7,146 -> 7,236: ( +90, +1.3%) RandomText Greedy Hyphenation : 7,125 -> 7,196: ( +71, +1.0%) RandomText Greedy NoHyphenation : 7,099 -> 7,187: ( +88, +1.2%) draw PrecomputedText NoStyle : 614 -> 628: ( +14, +2.3%) PrecomputedText Style : 778 -> 826: ( +48, +6.2%) RandomText NoStyle : 537 -> 540: ( +3, +0.6%) RandomText Style : 786 -> 759: ( -27, -3.4%) Bug: N/A Test: atest CtsWidgetTestCases:EditTextTest CtsWidgetTestCases:TextViewFadingEdgeTest FrameworksCoreTests:TextViewFallbackLineSpacingTest FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest CtsTextTestCases FrameworksCoreTests:android.text CtsWidgetTestCases:TextViewPrecomputedTextTest Change-Id: I976df4db63be241af395dd30dd94182f76bdae53
* Remove unused line in PrecomputedTextSeigo Nonaka2018-07-161-1/+0
| | | | | | Bug: N/A Test: N/A Change-Id: I2456116657d8be893a8c477df14a5de490fbaa37
* Update JNI interface of GetBounds in PrecomputedTextSeigo Nonaka2018-04-041-2/+1
| | | | | | | | | | | | | Bug: 77495049 Test: atest CtsWidgetTestCases:EditTextTest CtsWidgetTestCases:TextViewFadingEdgeTest FrameworksCoreTests:TextViewFallbackLineSpacingTest FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest CtsTextTestCases FrameworksCoreTests:android.text CtsWidgetTestCases:TextViewPrecomputedTextTest Change-Id: I54a70a91f6fba90720b702b52ed6ad430e17c87d
* Make getText hidden and getWidth/getBounds publicSeigo Nonaka2018-04-021-10/+50
| | | | | | | | | | | | | | | | | This is from advice from API review. - make getText() hidden - make getWidth()/getBounds() public. Bug: 76448719 Test: atest CtsWidgetTestCases:EditTextTest CtsWidgetTestCases:TextViewFadingEdgeTest FrameworksCoreTests:TextViewFallbackLineSpacingTest FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest CtsTextTestCases FrameworksCoreTests:android.text CtsWidgetTestCases:TextViewPrecomputedTextTest Change-Id: Ic22a266a932cda60de6d8b37b8bbf5704291b953
* Make PrecomputedText Spannable for supporting selectionSeigo Nonaka2018-03-201-5/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is 2nd attempt of I072dfd70b9a687d9c47e310d8cdb34f988fbb32e The root cause of crashing is unexpected copying of NoCopySpan by SpannableString constructor. To prevent crashing, stop copying NoCopySpan by passing ignoreNoCopySpan=true to SpannableString copy constructor. The original commit message is following: To support selectable TextView, make PrecomputedText spannable. By this change, TextView start using DynamicLayout instead of StaticLayout. DynamicLayout requires boundary rectangle of the text, so this CL also adds getBounds method to PrecomputedText which retrieves measured boundary box from native. By this change, the selectable TextView performance for the precomputed text 10x faster. On the other hand, the performacne for the non-selectable text gets 2.5x slower. However, we concluded that we accept this performance regression since it still 10 times faster than non precomputed text. Here is a precomputed text performance result of TextView. android.widget.TextViewPrecomputedTextPerfTest: newLayout_PrecomputedText : 736,130 -> 1,648,694: (+124.0%) newLayout_PrecomputedText_Selectable: 17,379,765 -> 1,700,146: (-90.2%) onDraw_PrecomputedText : 1,274,921 -> 1,848,076: (+45.0%) onDraw_PrecomputedText_Selectable : 17,367,238 -> 1,399,169: (-91.9%) onMeasure_PrecomputedText : 752,875 -> 1,766,606: (+134.6%) onMeasure_PrecomputedText_Selectable: 17,647,842 -> 1,810,704: (-89.7%) setText_PrecomputedText : 92,894 -> 135,471: (+45.8%) setText_PrecomputedText_Selectable : 145,134 -> 215,757: (+48.7%) Bug: 72998298 Test: atest CtsWidgetTestCases:EditTextTest CtsWidgetTestCases:TextViewFadingEdgeTest FrameworksCoreTests:TextViewFallbackLineSpacingTest FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest CtsTextTestCases FrameworksCoreTests:android.text CtsWidgetTestCases:TextViewPrecomputedTextTest Change-Id: Ie98c75d8b4ba962eaf0a544357b2ff1ade891118
* Stop creating PrecomputedText in StaticLayoutSeigo Nonaka2018-03-201-41/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | No performance regressions are expected android.text.PrecomputedTextPerfTest: create NoStyled Hyphenation : 17,849,966 -> 17,858,570: (+0.0%) create NoStyled Hyphenation WidthOnly : 17,814,338 -> 17,801,205: (-0.1%) create NoStyled NoHyphenation : 7,123,449 -> 7,068,308: (-0.8%) create NoStyled NoHyphenation WidthOnly : 7,108,169 -> 7,074,908: (-0.5%) create Styled Hyphenation : 12,179,203 -> 12,131,020: (-0.4%) create Styled Hyphenation WidthOnly : 12,112,347 -> 12,241,311: (+1.1%) create Styled NoHyphenation : 11,870,126 -> 11,880,442: (+0.1%) create Styled NoHyphenation WidthOnly : 11,836,742 -> 11,860,292: (+0.2%) android.text.StaticLayoutPerfTest: create PrecomputedText Balanced Hyphenation : 697,713 -> 691,148: (-0.9%) create PrecomputedText Balanced NoHyphenation: 517,113 -> 498,106: (-3.7%) create PrecomputedText Greedy Hyphenation : 468,243 -> 455,015: (-2.8%) create PrecomputedText Greedy NoHyphenation : 479,514 -> 461,617: (-3.7%) create RandomText Balanced Hyphenation : 17,183,044 -> 17,049,811: (-0.8%) create RandomText Balanced NoHyphenation : 7,183,745 -> 7,025,070: (-2.2%) create RandomText Greedy Hyphenation : 7,130,841 -> 6,995,785: (-1.9%) create RandomText Greedy NoHyphenation : 7,122,398 -> 7,037,074: (-1.2%) draw PrecomputedText NoStyled : 520,306 -> 551,465: (+6.0%) draw PrecomputedText NoStyled WithoutCache : 545,773 -> 566,956: (+3.9%) draw PrecomputedText Styled : 826,044 -> 838,979: (+1.6%) draw PrecomputedText Styled WithoutCache : 829,958 -> 841,749: (+1.4%) draw RandomText NoStyled : 537,079 -> 545,428: (+1.6%) draw RandomText NoStyled WithoutCache : 6,473,166 -> 6,445,194: (-0.4%) draw RandomText Styled : 995,033 -> 1,015,913: (+2.1%) draw RandomText Styled WithoutCache : 2,725,313 -> 2,770,604: (+1.7%) android.widget.TextViewPrecomputedTextPerfTest: newLayout PrecomputedText : 754,311 -> 718,130: (-4.8%) newLayout PrecomputedText Selectable : 17,716,239 -> 17,484,046: (-1.3%) newLayout RandomText : 16,657,952 -> 16,511,625: (-0.9%) newLayout RandomText Selectable : 17,675,222 -> 17,520,653: (-0.9%) onDraw PrecomputedText : 1,307,123 -> 1,280,009: (-2.1%) onDraw PrecomputedText Selectable : 17,613,031 -> 17,404,379: (-1.2%) onDraw RandomText : 17,369,256 -> 17,295,363: (-0.4%) onDraw RandomText Selectable : 18,207,392 -> 18,077,660: (-0.7%) onMeasure PrecomputedText : 748,537 -> 739,128: (-1.3%) onMeasure PrecomputedText Selectable : 17,842,953 -> 17,784,459: (-0.3%) onMeasure RandomText : 16,633,454 -> 16,549,182: (-0.5%) onMeasure RandomText Selectable : 18,022,286 -> 17,873,919: (-0.8%) setText PrecomputedText : 120,769 -> 119,496: (-1.1%) setText PrecomputedText Selectable : 162,411 -> 150,809: (-7.1%) setText RandomText : 11,096 -> 10,956: (-1.3%) setText RandomText Selectable : 48,852 -> 48,593: (-0.5%) Bug: 72998298 Test: atest CtsWidgetTestCases:EditTextTest CtsWidgetTestCases:TextViewFadingEdgeTest FrameworksCoreTests:TextViewFallbackLineSpacingTest FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest CtsTextTestCases FrameworksCoreTests:android.text CtsWidgetTestCases:TextViewPrecomputedTextTest Change-Id: I3af758ecc5a15975c4e59c6378faf7c14c3bd65b
* Revert "Make PrecomputedText Spannable for supporting selection"Seigo Nonaka2018-03-191-49/+3
| | | | | | | | | Crash on Sheets APp This reverts commit 80ed5a35a90b62b8070d861b9755e230bd679951. Bug: 75652829 Change-Id: I40ddd1b9754e74fbd90d7a029cce9c6a7ede0777 Test: Manual
* Make PrecomputedText Spannable for supporting selectionSeigo Nonaka2018-03-151-3/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To support selectable TextView, make PrecomputedText spannable. By this change, TextView start using DynamicLayout instead of StaticLayout. DynamicLayout requires boundary rectangle of the text, so this CL also adds getBounds method to PrecomputedText which retrieves measured boundary box from native. By this change, the selectable TextView performance for the precomputed text 10x faster. On the other hand, the performacne for the non-selectable text gets 2.5x slower. However, we concluded that we accept this performance regression since it still 10 times faster than non precomputed text. Here is a precomputed text performance result of TextView. android.widget.TextViewPrecomputedTextPerfTest: newLayout_PrecomputedText : 736,130 -> 1,648,694: (+124.0%) newLayout_PrecomputedText_Selectable : 17,379,765 -> 1,700,146: (-90.2%) onDraw_PrecomputedText : 1,274,921 -> 1,848,076: (+45.0%) onDraw_PrecomputedText_Selectable : 17,367,238 -> 1,399,169: (-91.9%) onMeasure_PrecomputedText : 752,875 -> 1,766,606: (+134.6%) onMeasure_PrecomputedText_Selectable : 17,647,842 -> 1,810,704: (-89.7%) setText_PrecomputedText : 92,894 -> 135,471: (+45.8%) setText_PrecomputedText_Selectable : 145,134 -> 215,757: (+48.7%) Verified no effects for other performance metrics: android.widget.TextViewPrecomputedTextPerfTest: newLayout_RandomText : 16,495,200 -> 16,450,483: (-0.3%) newLayout_RandomText_Selectable : 17,482,439 -> 17,534,207: (+0.3%) onDraw_RandomText : 17,224,949 -> 17,228,072: (+0.0%) onDraw_RandomText_Selectable : 18,067,397 -> 17,958,235: (-0.6%) onMeasure_RandomText : 16,435,649 -> 16,516,352: (+0.5%) onMeasure_RandomText_Selectable : 17,724,819 -> 17,879,508: (+0.9%) setText_RandomText : 11,130 -> 11,259: (+1.2%) setText_RandomText_Selectable : 48,900 -> 48,607: (-0.6%) android.text.PrecomputedTextPerfTest: create_NoStyled_Hyphenation : 17,695,377 -> 17,660,233: (-0.2%) create_NoStyled_Hyphenation_WidthOnly : 17,677,423 -> 17,541,823: (-0.8%) create_NoStyled_NoHyphenation : 7,021,486 -> 7,030,069: (+0.1%) create_NoStyled_NoHyphenation_WidthOnly : 7,045,453 -> 7,067,021: (+0.3%) create_Styled_Hyphenation : 12,090,933 -> 12,267,730: (+1.5%) create_Styled_Hyphenation_WidthOnly : 12,105,491 -> 12,277,272: (+1.4%) create_Styled_NoHyphenation : 11,835,249 -> 11,960,278: (+1.1%) create_Styled_NoHyphenation_WidthOnly : 11,871,765 -> 11,912,444: (+0.3%) android.text.StaticLayoutPerfTest: create_PrecomputedText_NoStyled_Balanced_Hyphenation : 709,839 -> 697,134: (-1.8%) create_PrecomputedText_NoStyled_Balanced_NoHyphenation: 527,671 -> 528,928: (+0.2%) create_PrecomputedText_NoStyled_Greedy_Hyphenation : 477,259 -> 481,966: (+1.0%) create_PrecomputedText_NoStyled_Greedy_NoHyphenation : 479,772 -> 482,278: (+0.5%) create_PrecomputedText_Styled_Greedy_NoHyphenation : 639,322 -> 637,790: (-0.2%) create_RandomText_NoStyled_Balanced_Hyphenation : 17,123,681 -> 16,989,227: (-0.8%) create_RandomText_NoStyled_Balanced_NoHyphenation : 7,040,572 -> 7,064,175: (+0.3%) create_RandomText_NoStyled_Greedy_Hyphenation : 7,000,681 -> 7,002,322: (+0.0%) create_RandomText_NoStyled_Greedy_NoHyphenation : 6,997,115 -> 6,996,953: (-0.0%) create_RandomText_Styled_Greedy_NoHyphenation : 11,948,744 -> 12,052,791: (+0.9%) draw_PrecomputedText_NoStyled : 543,623 -> 513,741: (-5.5%) draw_PrecomputedText_NoStyled_WithoutCache : 564,742 -> 541,795: (-4.1%) draw_PrecomputedText_Styled : 838,581 -> 837,438: (-0.1%) draw_PrecomputedText_Styled_WithoutCache : 826,775 -> 850,586: (+2.9%) draw_RandomText_NoStyled : 538,162 -> 533,603: (-0.8%) draw_RandomText_NoStyled_WithoutCache : 6,401,486 -> 6,424,604: (+0.4%) draw_RandomText_Styled : 1,024,683 -> 1,011,575: (-1.3%) draw_RandomText_Styled_WithoutCache : 2,733,204 -> 2,722,828: (-0.4%) Bug: 72998298 Test: atest CtsWidgetTestCases:EditTextTest CtsWidgetTestCases:TextViewFadingEdgeTest FrameworksCoreTests:TextViewFallbackLineSpacingTest FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest CtsTextTestCases FrameworksCoreTests:android.text CtsWidgetTestCases:TextViewPrecomputedTextTest Change-Id: I072dfd70b9a687d9c47e310d8cdb34f988fbb32e
* Throw an exception in case of parameter mismatch of precomputed textSeigo Nonaka2018-03-071-1/+19
| | | | | | | | | | | | | | | | | If the given precomputed text is not compatible with the TextView, reject the text by throwing IllegalArgumentException. Bug: 73091756 Test: atest CtsWidgetTestCases:EditTextTest CtsWidgetTestCases:TextViewFadingEdgeTest FrameworksCoreTests:TextViewFallbackLineSpacingTest FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest CtsTextTestCases FrameworksCoreTests:android.text CtsWidgetTestCases:TextViewPrecomputedTextTest Change-Id: I4fbf89a5f1409e8eefdeb9f208f9a3758220fe1a (cherry picked from commit 3a0787af5e1bb1f615c1dd2192a08464ea3776e3)
* Reorganize MeasuredText API (2nd)Seigo Nonaka2018-02-161-0/+501
| | | | | | | | | | | | | | | | | | | | | | | | This is 2nd attempt of I7db9e2ca4db68a16648cfb8fcf63555f501304c2 This CL changes the MeasuredText API: - Rename MeasuredText to PrecomputedText. - Introduce PrecomputedText.Param which holds all text layout parameters. - Add API to get PrecomputedText.Param from TextView. - Remove MeasuredText.Builder and add PrecomputedText.create method instead. - Remove setRange from MeasuredText since it is not for normal use case. (It can not be used for TextView) Bug: 67504091 Bug: 72861572 Test: bit FrameworksCoreTests:android.text. Test: atest CtsWidgetTestCases:EditTextTest \ CtsWidgetTestCases:TextViewFadingEdgeTest \ FrameworksCoreTests:TextViewFallbackLineSpacingTest \ FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest \ CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest \ CtsTextTestCases Change-Id: Ie73bce52c6c673cda58973ddad04627a7cf2e5e9
* Revert "Reorganize MeasuredText API"Seigo Nonaka2018-02-141-412/+0
| | | | | | | | | | The last change needs more discussion and found some edge cases. Revert and make small step-by-step changes. Bug: 73091756 This reverts commit 7fd36d19e309ea515b4048cfaabb8035ceab7baf. Change-Id: I89ff52a70cf6a5d6c553afa20f83719e1f9eb726
* Reorganize MeasuredText APISeigo Nonaka2018-02-121-0/+412
This CL changes the MeasuredText API: - Rename MeasuredText to PrecomputedText. - PrecomputedText is no longer a Spanned. - Introduce PrecomputedText.Param which holds all text layout parameters. - Add API to get PrecomputedText.Param from TextView. - Remove MeasuredText.Builder and add PrecomputedText.create method instead. - Remove setRange from MeasuredText since it is not for normal use case. (It can not be used for TextView) Here is a performance scores: (median, walleye-userdebug, N=20) StaticLayout creation time (w/o patch -> w/ patch) PrecomputedText Balanced Hyphenation : 743,615 -> 737,145: (-0.9%) PrecomputedText Balanced NoHyphenation: 551,544 -> 542,715: (-1.6%) PrecomputedText Greedy Hyphenation : 500,343 -> 499,601: (-0.1%) PrecomputedText Greedy NoHyphenation : 497,987 -> 492,587: (-1.1%) RandomText Balanced Hyphenation : 19,100,592 -> 19,135,289: (+0.2%) RandomText Balanced NoHyphenation : 8,015,088 -> 7,954,260: (-0.8%) RandomText Greedy Hyphenation : 7,950,915 -> 7,877,424: (-0.9%) RandomText Greedy NoHyphenation : 7,939,337 -> 7,863,471: (-1.0%) PrecomputedText creation time (w/o patch -> w/ patch) NoStyled Hyphenation : 18,935,638 -> 18,925,422: (-0.1%) NoStyled Hyphenation WidthOnly : 18,469,726 -> 18,978,413: (+2.8%) NoStyled NoHyphenation : 7,940,792 -> 7,919,127: (-0.3%) NoStyled NoHyphenation WidthOnly : 7,463,230 -> 7,922,643: (+6.2%) Styled Hyphenation : 14,822,501 -> 14,809,017: (-0.1%) Styled Hyphenation WidthOnly : 13,891,770 -> 14,656,617: (+5.5%) Styled NoHyphenation : 14,511,134 -> 14,301,503: (-1.4%) Styled NoHyphenation WidthOnly : 13,495,345 -> 14,264,314: (+5.7%) StaticLayout draw time (w/o patch -> w/ patch) PrecomputedText NoStyled : 663,974 -> 661,610: (-0.4%) PrecomputedText NoStyled WithoutCache : 648,294 -> 648,766: (+0.1%) PrecomputedText Styled : 879,322 -> 852,770: (-3.0%) PrecomputedText Styled WithoutCache : 1,084,570 -> 1,110,147: (+2.4%) RandomText NoStyled : 565,682 -> 555,435: (-1.8%) RandomText NoStyled WithoutCache : 9,070,533 -> 9,064,825: (-0.1%) RandomText Styled : 2,955,202 -> 2,962,008: (+0.2%) RandomText Styled WithoutCache : 12,242,325 -> 12,228,573: (-0.1%) Bug: 67504091 Bug: 73091756 Test: bit FrameworksCoreTests:android.text. Test: atest CtsWidgetTestCases:EditTextTest \ CtsWidgetTestCases:TextViewFadingEdgeTest \ FrameworksCoreTests:TextViewFallbackLineSpacingTest \ FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest \ CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest \ CtsTextTestCases Change-Id: I7db9e2ca4db68a16648cfb8fcf63555f501304c2