Make PrecomputedText Spannable for supporting selection
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
Loading
Please register or sign in to comment