Open Bug 1790201 Opened 2 years ago Updated 2 years ago

Calculating baseline of text-combine-upright text with scrollframe sibling triggers assertion.

Categories

(Core :: Layout: Block and Inline, task)

task

Tracking

()

People

(Reporter: emilio, Unassigned)

References

Details

Attachments

(1 file)

Attached file Reduced test-case.

Bug 1789191 got backed out because of some assertions like:

[rr 57284 167102][Child 57284, Main Thread] ###!!! ASSERTION: frame must not be dirty: '!IsSubtreeDirty()', file /home/emilio/src/moz/gecko-2/layout/generic/nsIFrame.cpp:2100
#01: NS_DebugBreak (/home/emilio/src/moz/gecko-2/xpcom/base/nsDebugImpl.cpp:0)
#02: nsIFrame::GetLogicalBaseline(mozilla::WritingMode) const (/home/emilio/src/moz/gecko-2/layout/generic/nsIFrame.cpp:2103)
#03: nsHTMLScrollFrame::GetLogicalBaseline(mozilla::WritingMode) const (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.cpp:0)
#04: nsHTMLScrollFrame::GetVerticalAlignBaseline(mozilla::WritingMode, int*) const (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.h:990)
#05: nsBlockFrame::GetNaturalBaselineBOffset(mozilla::WritingMode, mozilla::BaselineSharingGroup, int*) const (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:623)
#06: nsBlockFrame::GetLogicalBaseline(mozilla::WritingMode) const (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:602)
#07: nsTextFrame::GetLogicalBaseline(mozilla::WritingMode) const (/home/emilio/src/moz/gecko-2/layout/generic/nsTextFrame.cpp:10512)
#08: nsTextFrame::GetTextDecorations(nsPresContext*, nsTextFrame::TextDecorationColorResolution, nsTextFrame::TextDecorations&) (/home/emilio/src/moz/gecko-2/layout/generic/nsTextFrame.cpp:5208)
#09: nsTextFrame::UnionAdditionalOverflow(nsPresContext*, nsIFrame*, nsTextFrame::PropertyProvider&, nsRect*, bool, bool) (/home/emilio/src/moz/gecko-2/layout/generic/nsTextFrame.cpp:5695)
#10: nsTextFrame::RecomputeOverflow(nsIFrame*, bool) (/home/emilio/src/moz/gecko-2/layout/generic/nsTextFrame.cpp:10101)
#11: nsLineLayout::RelativePositionFrames(nsLineLayout::PerSpanData*, mozilla::OverflowAreas&) (/home/emilio/src/moz/gecko-2/layout/generic/nsLineLayout.cpp:3307)
#12: nsBlockFrame::PlaceLine(mozilla::BlockReflowState&, nsLineLayout&, nsLineList_iterator, nsFloatManager::SavedState*, nsFlowAreaRect&, int&, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:5086)
#13: nsBlockFrame::DoReflowInlineFrames(mozilla::BlockReflowState&, nsLineLayout&, nsLineList_iterator, nsFlowAreaRect&, int&, nsFloatManager::SavedState*, bool*, LineReflowStatus*, bool) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:0)
#14: nsBlockFrame::ReflowInlineFrames(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:4326)
#15: nsBlockFrame::ReflowLine(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:3310)
#16: nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowState&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:2833)
#17: nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:1483)
#18: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) (/home/emilio/src/moz/gecko-2/layout/generic/nsContainerFrame.cpp:0)
#19: nsColumnSetFrame::ReflowColumns(mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&, nsColumnSetFrame::ReflowConfig const&, bool) (/home/emilio/src/moz/gecko-2/layout/generic/nsColumnSetFrame.cpp:664)
#20: nsColumnSetFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsColumnSetFrame.cpp:1200)
#21: nsBlockReflowContext::ReflowBlock(mozilla::LogicalRect const&, bool, nsCollapsingMargin&, int, nsLineBox*, mozilla::ReflowInput&, nsReflowStatus&, mozilla::BlockReflowState&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockReflowContext.cpp:291)
#22: nsBlockFrame::ReflowBlockFrame(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:0)
#23: nsBlockFrame::ReflowLine(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:0)
#24: nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowState&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:2833)
#25: nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:1483)
#26: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) (/home/emilio/src/moz/gecko-2/layout/generic/nsContainerFrame.cpp:0)
#27: nsHTMLScrollFrame::ReflowScrolledFrame(mozilla::ScrollReflowInput&, bool, bool, mozilla::ReflowOutput*) (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.cpp:838)
#28: nsHTMLScrollFrame::ReflowContents(mozilla::ScrollReflowInput&, mozilla::ReflowOutput const&) (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.cpp:996)
#29: nsHTMLScrollFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.cpp:1401)
#30: nsBlockReflowContext::ReflowBlock(mozilla::LogicalRect const&, bool, nsCollapsingMargin&, int, nsLineBox*, mozilla::ReflowInput&, nsReflowStatus&, mozilla::BlockReflowState&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockReflowContext.cpp:291)
#31: nsBlockFrame::ReflowFloat(mozilla::BlockReflowState&, mozilla::ReflowInput&, nsIFrame*, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:6697)
#32: mozilla::BlockReflowState::FlowAndPlaceFloat(nsIFrame*, mozilla::Maybe<int>) (/home/emilio/src/moz/gecko-2/layout/generic/BlockReflowState.cpp:0)
#33: mozilla::BlockReflowState::AddFloat(nsLineLayout*, nsIFrame*, int) (/home/emilio/src/moz/gecko-2/layout/generic/BlockReflowState.cpp:586)
#34: nsLineLayout::ReflowFrame(nsIFrame*, nsReflowStatus&, mozilla::ReflowOutput*, bool&) (/home/emilio/src/moz/gecko-2/layout/generic/nsLineLayout.cpp:0)
#35: nsBlockFrame::ReflowInlineFrame(mozilla::BlockReflowState&, nsLineLayout&, nsLineList_iterator, nsIFrame*, LineReflowStatus*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:4643)
#36: nsBlockFrame::DoReflowInlineFrames(mozilla::BlockReflowState&, nsLineLayout&, nsLineList_iterator, nsFlowAreaRect&, int&, nsFloatManager::SavedState*, bool*, LineReflowStatus*, bool) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:4443)
#37: nsBlockFrame::ReflowInlineFrames(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:4326)
#38: nsBlockFrame::ReflowLine(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:3310)
#39: nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowState&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:2833)
#40: nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:1483)
#41: nsBlockReflowContext::ReflowBlock(mozilla::LogicalRect const&, bool, nsCollapsingMargin&, int, nsLineBox*, mozilla::ReflowInput&, nsReflowStatus&, mozilla::BlockReflowState&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockReflowContext.cpp:291)
#42: nsBlockFrame::ReflowBlockFrame(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:0)
#43: nsBlockFrame::ReflowLine(mozilla::BlockReflowState&, nsLineList_iterator, bool*) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:0)
#44: nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowState&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:2833)
#45: nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsBlockFrame.cpp:1483)
#46: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) (/home/emilio/src/moz/gecko-2/layout/generic/nsContainerFrame.cpp:0)
#47: nsCanvasFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsCanvasFrame.cpp:794)
#48: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) (/home/emilio/src/moz/gecko-2/layout/generic/nsContainerFrame.cpp:0)
#49: nsHTMLScrollFrame::ReflowScrolledFrame(mozilla::ScrollReflowInput&, bool, bool, mozilla::ReflowOutput*) (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.cpp:838)
#50: nsHTMLScrollFrame::ReflowContents(mozilla::ScrollReflowInput&, mozilla::ReflowOutput const&) (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.cpp:996)
#51: nsHTMLScrollFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/nsGfxScrollFrame.cpp:1401)
#52: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, int, int, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) (/home/emilio/src/moz/gecko-2/layout/generic/nsContainerFrame.cpp:0)
#53: mozilla::ViewportFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) (/home/emilio/src/moz/gecko-2/layout/generic/ViewportFrame.cpp:375)
#54: mozilla::PresShell::DoReflow(nsIFrame*, bool, mozilla::OverflowChangedTracker*) (/home/emilio/src/moz/gecko-2/layout/base/PresShell.cpp:0)
#55: mozilla::PresShell::ProcessReflowCommands(bool) (/home/emilio/src/moz/gecko-2/layout/base/PresShell.cpp:9813)
#56: mozilla::PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush) (/home/emilio/src/moz/gecko-2/layout/base/PresShell.cpp:4409)
#57: mozilla::dom::Document::FlushPendingNotifications(mozilla::ChangesToFlush) (/home/emilio/src/moz/gecko-2/dom/base/Document.cpp:10702)
#58: nsIContent::GetPrimaryFrame(mozilla::FlushType) (/home/emilio/src/moz/gecko-2/dom/base/Element.cpp:256)
#59: mozilla::dom::Element::GetBoundingClientRect() (/home/emilio/src/moz/gecko-2/dom/base/Element.cpp:1118)
#60: mozilla::dom::Element_Binding::getBoundingClientRect(JSContext*, JS::Handle<JSObject*>, void*, JSJitMethodCallArgs const&) (/home/emilio/src/moz/gecko-2/obj-debug/dom/bindings/ElementBinding.cpp:3297)
#61: bool mozilla::dom::binding_detail::GenericMethod<mozilla::dom::binding_detail::NormalThisPolicy, mozilla::dom::binding_detail::ThrowExceptions>(JSContext*, unsigned int, JS::Value*) (/home/emilio/src/moz/gecko-2/dom/bindings/BindingUtils.cpp:3289)

However, it is a pre-existing bug, triggered only by the fact that now the element is in a container and we need to lay it out in order to to style it.

The following patch triggers the bug as well without bug 1789191:

diff --git a/layout/style/test/test_revert.html b/layout/style/test/test_revert.html
index 48897a75ca4c6..480ea61b0c295 100644
--- a/layout/style/test/test_revert.html
+++ b/layout/style/test/test_revert.html
@@ -22,6 +22,7 @@ const kResetDiv = document.getElementById("nonInherited");
 const kNoAuthorStylesDiv = document.getElementById("noAuthorStyleApplied");
 
 function computedValue(node, property) {
+  node.getBoundingClientRect();
   return get_computed_value(getComputedStyle(node), property);
 }
 

So I'm not blocking landing that bug on fixing this test, but we should investigate why we can ask for the baseline of a scroll frame that isn't reflowed yet, feels pretty odd.

Relevant frame dump is:

p mParent->mParent->mParent->mParent->DumpFrameTreeLimited()
HTMLScroll(div id=inheritanceParent)(0)@7f882ac3a4c0 parent=7f882ac39e30 (x=1980, y=1980, w=1800, h=1800) wm=v-lr-ltr logical-size=((1800 x 1800)) ink-overflow=(x=-20579, y=-13975, w=42427, h=42427) scr-overflow=(x=-12094, y=-5490, w=25457, h=25457) normal-position=(60,60) transformed perspective [content=7f882d813ca0] [cs=7f882a977118] <
  Box(resizer)(-1)@7f882ac3a750 parent=7f882ac3a4c0 next=7f882ac3a8a0 (x=1176, y=1176, w=576, h=576) parent-wm=v-lr-ltr cs=((1800 x 1800)) logical-rect=(1176,1176,576,576) [content=7f882d80d160] [cs=7f882f2e37a8] <
  >
  ColumnSetWrapper(div id=inheritanceParent)(0)@7f882ac3a8a0 parent=7f882ac3a4c0 (x=48, y=48, w=1704, h=1704) wm=v-lr-ltr logical-size=((1704 x 1704)) parent-wm=v-lr-ltr cs=((1800 x 1800)) logical-rect=(48,48,1704,1704) ink-overflow=(x=0, y=0, w=1704, h=3348) scr-overflow=(x=0, y=0, w=1704, h=3348) [content=7f882d813ca0] [cs=7f882a9777a8:-moz-scrolled-content] <
    line@7f882ac3a330 count=1 state=block,clean,prevmarginclean,not-impacted,not-wrapped,before:nobr,after:nobr[0x48] (x=60, y=60, w=1584, h=3288) wm=v-lr-ltr cs=((1704 x 1704)) logical-rect=(60,60,3288,1584) ink-overflow=(x=-498, y=60, w=2142, h=3288) scr-overflow=(x=60, y=60, w=1584, h=3288) <
      ColumnSet(div id=inheritanceParent)(0)@7f882ac3a970 parent=7f882ac3a8a0 (x=60, y=60, w=1584, h=3288) wm=v-lr-ltr logical-size=((3288 x 1584)) parent-wm=v-lr-ltr cs=((1704 x 1704)) logical-rect=(60,60,3288,1584) ink-overflow=(x=-558, y=0, w=2142, h=3288) scr-overflow=(x=0, y=0, w=1584, h=3288) [content=7f882d813ca0] [cs=7f882a977b68:-moz-column-set] <
        Block(div id=inheritanceParent)(0)@7f882ac39ef8 parent=7f882ac3a970 next=7f882ac3ace8 next-in-flow=7f882ac3ace8 (x=0, y=0, w=1584, h=1584) wm=v-lr-ltr logical-size=((1584 x 1584)) parent-wm=v-lr-ltr cs=((1584 x 3288)) logical-rect=(0,0,1584,1584) ink-overflow=(x=-558, y=0, w=2142, h=3102) scr-overflow=(x=0, y=0, w=1584, h=2808) [content=7f882d813ca0] [cs=7f882a977e38:-moz-column-content] <
          line@7f882ac3a088 count=1 state=inline,clean,prevmarginclean,not-impacted,not-wrapped,before:nobr,after:nobr[0x0] (x=0, y=0, w=1080, h=2808) wm=v-lr-ltr cs=((0 x 1584)) logical-rect=(0,0,2808,1080) ink-overflow=(x=-558, y=0, w=1638, h=3102) scr-overflow=(x=0, y=0, w=1080, h=2808) <
            Text(0)"\n  "@7f882ac3aa18 parent=7f882ac39ef8 next=7f882a9951e8 (x=264, y=2160, w=552, h=648) wm=h-rtl logical-size=((552 x 648)) parent-wm=v-lr-ltr cs=((1584 x 1584)) logical-rect=(2160,264,648,552) ink-overflow=(x=-822, y=-174, w=1548, h=1116) scr-overflow=(x=0, y=0, w=552, h=648) bidi(1,2,255) [content=7f882d80fa80] [cs=7f882a977a78:-moz-text] [run=7f882ac44580][0,3,T] 
          >
          line@7f882ac3a3d0 count=1 state=block,dirty,prevmarginclean,not-impacted,not-wrapped,before:nobr,after:nobr[0x9] (x=0, y=0, w=0, h=0) <
            HTMLScroll(div id=inherited)(1)@7f882a9951e8 parent=7f882ac39ef8 (x=0, y=0, w=0, h=0) wm=v-lr-ltr logical-size=((0 x 0)) parent-wm=v-lr-ltr cs=((1584 x 1584)) logical-rect=(0,0,0,0) bidi(1,2,255) [content=7f882d813d30] [cs=7f882a9776b8] <
              ScrollbarFrame(scrollbar)(-1)@7f882a995478 parent=7f882a9951e8 next=7f882a995780 (x=0, y=0, w=0, h=0) parent-wm=v-lr-ltr cs=((0 x 0)) logical-rect=(0,0,0,0) [content=7f882d815af0] [cs=7f882a977208] <
                SliderFrame(slider)(-1)@7f882a995598 parent=7f882a995478 (x=0, y=0, w=0, h=0) [content=7f882d815ca0] [cs=7f882a977898] <
                  ButtonBoxFrame(thumb)(0)@7f882a9956a0 parent=7f882a995598 (x=0, y=0, w=0, h=0) [content=7f882d815d30] [cs=7f882a977988] <
                  >
                >
              >
              ScrollbarFrame(scrollbar)(-1)@7f882a995780 parent=7f882a9951e8 next=7f882a995a88 (x=0, y=0, w=0, h=0) parent-wm=v-lr-ltr cs=((0 x 0)) logical-rect=(0,0,0,0) [content=7f882d815b80] [cs=7f882a9772f8] <
                SliderFrame(slider)(-1)@7f882a9958a0 parent=7f882a995780 (x=0, y=0, w=0, h=0) [content=7f882d815dc0] [cs=7f882a977c58] <
                  ButtonBoxFrame(thumb)(0)@7f882a9959a8 parent=7f882a9958a0 (x=0, y=0, w=0, h=0) [content=7f882d815e50] [cs=7f882a977d48] <
                  >
                >
              >
              Box(scrollcorner)(-1)@7f882a995a88 parent=7f882a9951e8 next=7f882ac39fc0 (x=0, y=0, w=0, h=0) parent-wm=v-lr-ltr cs=((0 x 0)) logical-rect=(0,0,0,0) [content=7f882d815c10] [cs=7f882a9774d8] <
              >
              Block(div id=inherited)(1)@7f882ac39fc0 parent=7f882a9951e8 (x=0, y=0, w=0, h=0) wm=v-lr-ltr logical-size=((0 x 0)) parent-wm=v-lr-ltr cs=((0 x 0)) logical-rect=(0,0,0,0) [content=7f882d813d30] [cs=7f882a977f28:-moz-scrolled-content] <
              >
            >
          >
        >
        Block(div id=inheritanceParent)(0)@7f882ac3ace8 parent=7f882ac3a970 prev-in-flow=7f882ac39ef8 (x=0, y=1704, w=1080, h=1584) wm=v-lr-ltr logical-size=((1584 x 1080)) parent-wm=v-lr-ltr cs=((1584 x 3288)) logical-rect=(1704,0,1584,1080) ink-overflow=(x=-186, y=0, w=1266, h=1584) scr-overflow=(x=0, y=0, w=1080, h=1584) [content=7f882d813ca0] [cs=7f882a977e38:-moz-column-content] <
          line@7f882ac3aba8 count=1 state=inline,clean,prevmarginclean,not-impacted,not-wrapped,before:nobr,after:nobr[0x100] (x=0, y=468, w=1080, h=648) wm=v-lr-ltr cs=((0 x 1584)) logical-rect=(468,0,648,1080) ink-overflow=(x=-186, y=0, w=1266, h=1410) scr-overflow=(x=0, y=0, w=1080, h=1116) <
            Text(2)"\n"@7f882ac3aab8 parent=7f882ac3ace8 (x=427, y=468, w=226, h=648) wm=h-rtl logical-size=((226 x 648)) parent-wm=v-lr-ltr cs=((1080 x 1584)) logical-rect=(468,427,648,226) ink-overflow=(x=-613, y=-174, w=1013, h=1116) scr-overflow=(x=0, y=0, w=226, h=648) bidi(1,1,255) [content=7f882d80fb00] [cs=7f882a977a78:-moz-text] [run=0][0,1,T] 
          >
        >
      >
    >
  >
>

So the relevant text-node we're computing the baseline of is:

Text(0)"\n  "@7f882ac3aa18 parent=7f882ac39ef8 next=7f882a9951e8 (x=264, y=2160, w=552, h=648) wm=h-rtl logical-size=((552 x 648)) parent-wm=v-lr-ltr cs=((1584 x 1584)) logical-rect=(2160,264,648,552) ink-overflow=(x=-822, y=-174, w=1548, h=1116) scr-overflow=(x=0, y=0, w=552, h=648) bidi(1,2,255) [content=7f882d80fa80] [cs=7f882a977a78:-moz-text] [run=7f882ac44580][0,3,T]

And somehow that has a writing mode orthogonal to its parent frame, which seems rather odd?

I guess the only way to get to this situation is via text-combine-upright, which is also in use:

https://searchfox.org/mozilla-central/rev/4c1cf5698ce2253f1371b48f8a3fa58122d8f5ee/servo/components/style/style_adjuster.rs#304-342

So, while I wrote this, I came up with a minimal test-case, see attachment.

cc'ing xidorn since he's familiar with text-combine.

You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: