Changeset 205186 in webkit
- Timestamp:
- Aug 30, 2016 10:57:43 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r205185 r205186 1 2016-08-30 Zalan Bujtas <zalan@apple.com> 2 3 ASSERTION FAILED: opportunitiesInRun <= expansionOpportunityCount in WebCore::computeExpansionForJustifiedText 4 https://bugs.webkit.org/show_bug.cgi?id=139393 5 <rdar://problem/27704243> 6 7 Reviewed by Myles C. Maxfield. 8 9 * fast/text/assert-on-expansion-opportunity-expected.txt: Added. 10 * fast/text/assert-on-expansion-opportunity.html: Added. 11 1 12 2016-08-30 Ryan Haddad <ryanhaddad@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r205184 r205186 1 2016-08-30 Zalan Bujtas <zalan@apple.com> 2 3 ASSERTION FAILED: opportunitiesInRun <= expansionOpportunityCount in WebCore::computeExpansionForJustifiedText 4 https://bugs.webkit.org/show_bug.cgi?id=139393 5 <rdar://problem/27704243> 6 7 Reviewed by Myles C. Maxfield. 8 9 This patch ensures that we always remove a valid 'after expansion' opportunity (even when the last entry 10 in the opportunities list is 0). 11 12 Test: fast/text/assert-on-expansion-opportunity.html 13 14 * rendering/RenderBlockLineLayout.cpp: 15 (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment): 16 1 17 2016-08-30 Wenson Hsieh <wenson_hsieh@apple.com> 2 18 -
trunk/Source/WebCore/platform/graphics/FontCascade.cpp
r204400 r205186 959 959 } 960 960 961 std::pair<unsigned, bool> FontCascade::expansionOpportunityCountInternal(const LChar* characters, size_tlength, TextDirection direction, ExpansionBehavior expansionBehavior)961 std::pair<unsigned, bool> FontCascade::expansionOpportunityCountInternal(const LChar* characters, unsigned length, TextDirection direction, ExpansionBehavior expansionBehavior) 962 962 { 963 963 unsigned count = 0; … … 968 968 } 969 969 if (direction == LTR) { 970 for ( size_ti = 0; i < length; ++i) {970 for (unsigned i = 0; i < length; ++i) { 971 971 if (treatAsSpace(characters[i])) { 972 972 count++; … … 976 976 } 977 977 } else { 978 for ( size_ti = length; i > 0; --i) {978 for (unsigned i = length; i > 0; --i) { 979 979 if (treatAsSpace(characters[i - 1])) { 980 980 count++; … … 988 988 isAfterExpansion = true; 989 989 } else if (isAfterExpansion && (expansionBehavior & TrailingExpansionMask) == ForbidTrailingExpansion) { 990 ASSERT(count); 990 991 --count; 991 992 isAfterExpansion = false; … … 994 995 } 995 996 996 std::pair<unsigned, bool> FontCascade::expansionOpportunityCountInternal(const UChar* characters, size_tlength, TextDirection direction, ExpansionBehavior expansionBehavior)997 std::pair<unsigned, bool> FontCascade::expansionOpportunityCountInternal(const UChar* characters, unsigned length, TextDirection direction, ExpansionBehavior expansionBehavior) 997 998 { 998 999 static bool expandAroundIdeographs = canExpandAroundIdeographsInComplexText(); … … 1004 1005 } 1005 1006 if (direction == LTR) { 1006 for ( size_ti = 0; i < length; ++i) {1007 for (unsigned i = 0; i < length; ++i) { 1007 1008 UChar32 character = characters[i]; 1008 1009 if (treatAsSpace(character)) { … … 1025 1026 } 1026 1027 } else { 1027 for ( size_ti = length; i > 0; --i) {1028 for (unsigned i = length; i > 0; --i) { 1028 1029 UChar32 character = characters[i - 1]; 1029 1030 if (treatAsSpace(character)) { … … 1050 1051 isAfterExpansion = true; 1051 1052 } else if (isAfterExpansion && (expansionBehavior & TrailingExpansionMask) == ForbidTrailingExpansion) { 1053 ASSERT(count); 1052 1054 --count; 1053 1055 isAfterExpansion = false; -
trunk/Source/WebCore/platform/graphics/FontCascade.h
r204466 r205186 240 240 void adjustSelectionRectForComplexText(const TextRun&, LayoutRect& selectionRect, unsigned from, unsigned to) const; 241 241 242 static std::pair<unsigned, bool> expansionOpportunityCountInternal(const LChar*, size_tlength, TextDirection, ExpansionBehavior);243 static std::pair<unsigned, bool> expansionOpportunityCountInternal(const UChar*, size_tlength, TextDirection, ExpansionBehavior);242 static std::pair<unsigned, bool> expansionOpportunityCountInternal(const LChar*, unsigned length, TextDirection, ExpansionBehavior); 243 static std::pair<unsigned, bool> expansionOpportunityCountInternal(const UChar*, unsigned length, TextDirection, ExpansionBehavior); 244 244 245 245 friend struct WidthIterator; -
trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp
r204654 r205186 854 854 BidiRun* previousRun = nullptr; 855 855 for (; run; run = run->next()) { 856 auto computeExpansionOpportunities = [&expansionOpportunities, &expansionOpportunityCount, textAlign, &isAfterExpansion] (RenderBlockFlow& block, 857 InlineTextBox& textBox, BidiRun* previousRun, BidiRun* nextRun, const StringView& stringView, TextDirection direction) 858 { 859 if (stringView.isEmpty()) { 860 // Empty runs should still produce an entry in expansionOpportunities list so that the number of items matches the number of runs. 861 expansionOpportunities.append(0); 862 return; 863 } 864 ExpansionBehavior expansionBehavior = expansionBehaviorForInlineTextBox(block, textBox, previousRun, nextRun, textAlign, isAfterExpansion); 865 applyExpansionBehavior(textBox, expansionBehavior); 866 unsigned opportunitiesInRun; 867 std::tie(opportunitiesInRun, isAfterExpansion) = FontCascade::expansionOpportunityCount(stringView, direction, expansionBehavior); 868 expansionOpportunities.append(opportunitiesInRun); 869 expansionOpportunityCount += opportunitiesInRun; 870 }; 856 871 if (!run->box() || run->renderer().isOutOfFlowPositioned() || run->box()->isLineBreak()) { 857 872 continue; // Positioned objects are only participating to figure out their … … 880 895 } 881 896 882 if (textAlign == JUSTIFY && run != trailingSpaceRun) { 883 ExpansionBehavior expansionBehavior = expansionBehaviorForInlineTextBox(*this, textBox, previousRun, run->next(), textAlign, isAfterExpansion); 884 applyExpansionBehavior(textBox, expansionBehavior); 885 unsigned opportunitiesInRun; 886 std::tie(opportunitiesInRun, isAfterExpansion) = FontCascade::expansionOpportunityCount(renderText.stringView(run->m_start, run->m_stop), run->box()->direction(), expansionBehavior); 887 expansionOpportunities.append(opportunitiesInRun); 888 expansionOpportunityCount += opportunitiesInRun; 889 } 897 if (textAlign == JUSTIFY && run != trailingSpaceRun) 898 computeExpansionOpportunities(*this, textBox, previousRun, run->next(), renderText.stringView(run->m_start, run->m_stop), run->box()->direction()); 890 899 891 900 if (unsigned length = renderText.textLength()) { … … 907 916 if (!is<InlineTextBox>(*leafChild)) 908 917 continue; 909 auto& textBox = downcast<InlineTextBox>(*leafChild);910 918 encounteredJustifiedRuby = true; 911 auto& renderText = downcast<RenderText>(leafChild->renderer()); 912 ExpansionBehavior expansionBehavior = expansionBehaviorForInlineTextBox(*rubyBase, textBox, nullptr, nullptr, textAlign, isAfterExpansion); 913 applyExpansionBehavior(textBox, expansionBehavior); 914 unsigned opportunitiesInRun; 915 std::tie(opportunitiesInRun, isAfterExpansion) = FontCascade::expansionOpportunityCount(renderText.stringView(), leafChild->direction(), expansionBehavior); 916 expansionOpportunities.append(opportunitiesInRun); 917 expansionOpportunityCount += opportunitiesInRun; 919 computeExpansionOpportunities(*rubyBase, downcast<InlineTextBox>(*leafChild), nullptr, nullptr, 920 downcast<RenderText>(leafChild->renderer()).stringView(), leafChild->direction()); 918 921 } 919 922 } … … 937 940 938 941 if (isAfterExpansion && !expansionOpportunities.isEmpty()) { 939 expansionOpportunities.last()--; 940 expansionOpportunityCount--; 942 // FIXME: see <webkit.org/b/139393#c11> 943 int lastValidExpansionOpportunitiesIndex = expansionOpportunities.size() - 1; 944 while (lastValidExpansionOpportunitiesIndex >= 0 && !expansionOpportunities.at(lastValidExpansionOpportunitiesIndex)) 945 --lastValidExpansionOpportunitiesIndex; 946 if (lastValidExpansionOpportunitiesIndex >= 0) { 947 ASSERT(expansionOpportunities.at(lastValidExpansionOpportunitiesIndex)); 948 expansionOpportunities.at(lastValidExpansionOpportunitiesIndex)--; 949 expansionOpportunityCount--; 950 } 941 951 } 942 952
Note: See TracChangeset
for help on using the changeset viewer.