Closed Bug 1854892 Opened 9 months ago Closed 9 months ago

Use logical coordinates in nsVideoFrame::Reflow()

Categories

(Core :: Layout: Images, Video, and HTML Frames, task)

task

Tracking

()

RESOLVED FIXED
120 Branch
Tracking Status
firefox120 --- fixed

People

(Reporter: TYLin, Assigned: TYLin)

References

(Blocks 1 open bug)

Details

Attachments

(1 file)

Also, in nsVideoFrame::Reflow(), convert the caller of nsContainerFrame::ReflowChild and nsContainerFrame::FinishReflowChild to logical version.

This patch doesn't change user-perceivable behavior.

Note: before this patch, when reflowing poster frame, kidReflowInput was
initialized with cbSize of value (0,0), which is bogus since Size in
aMetrics has not been set yet. Removing the bogus code uncovers the following
assertions

ASSERTION: Our containing block must not have unconstrained inline-size!

in a 944909-1.html, which has bogus large sizes.

Pushed by aethanyc@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/5c3542fc6cc8
Simplify nsVideoFrame::Reflow() and switch it to logical coordinates. r=emilio

Backed out for causing failures on 944909-1.html

[task 2023-09-26T19:27:48.016Z] 19:27:48     INFO - [Child 3521, Main Thread] ###!!! ASSERTION: Our containing block must not have unconstrained inline-size!: 'aCBSize.ISize(aWM) != NS_UNCONSTRAINEDSIZE', file /builds/worker/checkouts/gecko/layout/generic/nsContainerFrame.cpp:2408
[task 2023-09-26T19:27:48.017Z] 19:27:48     INFO - #01: NS_DebugBreak [xpcom/base/nsDebugImpl.cpp:0]
[task 2023-09-26T19:27:48.017Z] 19:27:48     INFO - #02: nsContainerFrame::ComputeSizeWithIntrinsicDimensions(gfxContext*, mozilla::WritingMode, mozilla::IntrinsicSize const&, mozilla::AspectRatio const&, mozilla::LogicalSize const&, mozilla::LogicalSize const&, mozilla::LogicalSize const&, mozilla::StyleSizeOverrides const&, mozilla::EnumSet<mozilla::ComputeSizeFlag, unsigned char>) [layout/generic/nsContainerFrame.cpp:2291]
[task 2023-09-26T19:27:48.018Z] 19:27:48     INFO - #03: nsImageFrame::ComputeSize(gfxContext*, mozilla::WritingMode, mozilla::LogicalSize const&, int, mozilla::LogicalSize const&, mozilla::LogicalSize const&, mozilla::StyleSizeOverrides const&, mozilla::EnumSet<mozilla::ComputeSizeFlag, unsigned char>) [layout/generic/nsImageFrame.cpp:0]
[task 2023-09-26T19:27:48.019Z] 19:27:48     INFO - #04: mozilla::ReflowInput::InitConstraints(nsPresContext*, mozilla::Maybe<mozilla::LogicalSize> const&, mozilla::Maybe<mozilla::LogicalMargin> const&, mozilla::Maybe<mozilla::LogicalMargin> const&, mozilla::LayoutFrameType) [layout/generic/ReflowInput.cpp:2403]
[task 2023-09-26T19:27:48.019Z] 19:27:48     INFO - #05: mozilla::ReflowInput::Init(nsPresContext*, mozilla::Maybe<mozilla::LogicalSize> const&, mozilla::Maybe<mozilla::LogicalMargin> const&, mozilla::Maybe<mozilla::LogicalMargin> const&) [layout/generic/ReflowInput.cpp:379]
[task 2023-09-26T19:27:48.020Z] 19:27:48     INFO - #06: mozilla::ReflowInput::ReflowInput(nsPresContext*, mozilla::ReflowInput const&, nsIFrame*, mozilla::LogicalSize const&, mozilla::Maybe<mozilla::LogicalSize> const&, mozilla::EnumSet<mozilla::ReflowInput::InitFlag, unsigned char>, mozilla::StyleSizeOverrides const&, mozilla::EnumSet<mozilla::ComputeSizeFlag, unsigned char>) [layout/generic/ReflowInput.cpp:0]
[task 2023-09-26T19:27:48.021Z] 19:27:48     INFO - #07: nsVideoFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) [layout/generic/nsVideoFrame.cpp:246]
[task 2023-09-26T19:27:48.022Z] 19:27:48     INFO - #08: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) [layout/generic/nsContainerFrame.cpp:0]
[task 2023-09-26T19:27:48.022Z] 19:27:48     INFO - #09: nsFlexContainerFrame::ReflowFlexItem(nsFlexContainerFrame::FlexboxAxisTracker const&, mozilla::ReflowInput const&, nsFlexContainerFrame::FlexItem const&, mozilla::LogicalPoint const&, mozilla::LogicalSize const&, nsSize const&) [layout/generic/nsFlexContainerFrame.cpp:5984]
[task 2023-09-26T19:27:48.023Z] 19:27:48     INFO - #10: nsFlexContainerFrame::ReflowChildren(mozilla::ReflowInput const&, nsSize const&, mozilla::LogicalSize const&, mozilla::LogicalMargin const&, nsFlexContainerFrame::FlexboxAxisTracker const&, nsFlexContainerFrame::FlexLayoutResult&, nsFlexContainerFrame::PerFragmentFlexData&) [layout/generic/nsFlexContainerFrame.cpp:5563]
[task 2023-09-26T19:27:48.023Z] 19:27:48     INFO - #11: nsFlexContainerFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) [layout/generic/nsFlexContainerFrame.cpp:4658]
[task 2023-09-26T19:27:48.024Z] 19:27:48     INFO - #12: nsBlockReflowContext::ReflowBlock(mozilla::LogicalRect const&, bool, nsCollapsingMargin&, int, nsLineBox*, mozilla::ReflowInput&, nsReflowStatus&, mozilla::BlockReflowState&) [layout/generic/nsBlockReflowContext.cpp:291]
[task 2023-09-26T19:27:48.025Z] 19:27:48     INFO - #13: nsBlockFrame::ReflowBlockFrame(mozilla::BlockReflowState&, nsLineList_iterator, bool*) [layout/generic/nsBlockFrame.cpp:0]
[task 2023-09-26T19:27:48.025Z] 19:27:48     INFO - #14: nsBlockFrame::ReflowLine(mozilla::BlockReflowState&, nsLineList_iterator, bool*) [layout/generic/nsBlockFrame.cpp:3460]
[task 2023-09-26T19:27:48.026Z] 19:27:48     INFO - #15: nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowState&) [layout/generic/nsBlockFrame.cpp:0]
[task 2023-09-26T19:27:48.027Z] 19:27:48     INFO - #16: nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) [layout/generic/nsBlockFrame.cpp:1517]
[task 2023-09-26T19:27:48.028Z] 19:27:48     INFO - #17: nsBlockReflowContext::ReflowBlock(mozilla::LogicalRect const&, bool, nsCollapsingMargin&, int, nsLineBox*, mozilla::ReflowInput&, nsReflowStatus&, mozilla::BlockReflowState&) [layout/generic/nsBlockReflowContext.cpp:291]
[task 2023-09-26T19:27:48.028Z] 19:27:48     INFO - #18: nsBlockFrame::ReflowBlockFrame(mozilla::BlockReflowState&, nsLineList_iterator, bool*) [layout/generic/nsBlockFrame.cpp:0]
[task 2023-09-26T19:27:48.029Z] 19:27:48     INFO - #19: nsBlockFrame::ReflowLine(mozilla::BlockReflowState&, nsLineList_iterator, bool*) [layout/generic/nsBlockFrame.cpp:3460]
[task 2023-09-26T19:27:48.030Z] 19:27:48     INFO - #20: nsBlockFrame::ReflowDirtyLines(mozilla::BlockReflowState&) [layout/generic/nsBlockFrame.cpp:0]
[task 2023-09-26T19:27:48.030Z] 19:27:48     INFO - #21: nsBlockFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) [layout/generic/nsBlockFrame.cpp:1517]
[task 2023-09-26T19:27:48.031Z] 19:27:48     INFO - #22: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) [layout/generic/nsContainerFrame.cpp:0]
[task 2023-09-26T19:27:48.032Z] 19:27:48     INFO - #23: nsCanvasFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) [layout/generic/nsCanvasFrame.cpp:760]
[task 2023-09-26T19:27:48.033Z] 19:27:48     INFO - #24: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, mozilla::WritingMode const&, mozilla::LogicalPoint const&, nsSize const&, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) [layout/generic/nsContainerFrame.cpp:0]
[task 2023-09-26T19:27:48.033Z] 19:27:48     INFO - #25: nsHTMLScrollFrame::ReflowScrolledFrame(mozilla::ScrollReflowInput&, bool, bool, mozilla::ReflowOutput*) [layout/generic/nsGfxScrollFrame.cpp:939]
[task 2023-09-26T19:27:48.034Z] 19:27:48     INFO - #26: nsHTMLScrollFrame::ReflowContents(mozilla::ScrollReflowInput&, mozilla::ReflowOutput const&) [layout/generic/nsGfxScrollFrame.cpp:1108]
[task 2023-09-26T19:27:48.035Z] 19:27:48     INFO - #27: nsHTMLScrollFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) [layout/generic/nsGfxScrollFrame.cpp:1512]
[task 2023-09-26T19:27:48.035Z] 19:27:48     INFO - #28: nsContainerFrame::ReflowChild(nsIFrame*, nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, int, int, nsIFrame::ReflowChildFlags, nsReflowStatus&, nsOverflowContinuationTracker*) [layout/generic/nsContainerFrame.cpp:0]
[task 2023-09-26T19:27:48.036Z] 19:27:48     INFO - #29: mozilla::ViewportFrame::Reflow(nsPresContext*, mozilla::ReflowOutput&, mozilla::ReflowInput const&, nsReflowStatus&) [layout/generic/ViewportFrame.cpp:386]
[task 2023-09-26T19:27:48.037Z] 19:27:48     INFO - #30: mozilla::PresShell::DoReflow(nsIFrame*, bool, mozilla::OverflowChangedTracker*) [layout/base/PresShell.cpp:9687]
[task 2023-09-26T19:27:48.037Z] 19:27:48     INFO - #31: mozilla::PresShell::ProcessReflowCommands(bool) [layout/base/PresShell.cpp:9859]
[task 2023-09-26T19:27:48.038Z] 19:27:48     INFO - #32: mozilla::PresShell::DoFlushPendingNotifications(mozilla::ChangesToFlush) [layout/base/PresShell.cpp:4362]
[task 2023-09-26T19:27:48.038Z] 19:27:48     INFO - #33: mozilla::dom::Document::FlushPendingNotifications(mozilla::ChangesToFlush) [dom/base/Document.cpp:10915]
[task 2023-09-26T19:27:48.039Z] 19:27:48     INFO - #34: nsDocLoader::DocLoaderIsEmpty(bool, mozilla::Maybe<nsresult> const&) [uriloader/base/nsDocLoader.cpp:741]
[task 2023-09-26T19:27:48.040Z] 19:27:48     INFO - #35: nsDocLoader::OnStopRequest(nsIRequest*, nsresult) [uriloader/base/nsDocLoader.cpp:679]
[task 2023-09-26T19:27:48.040Z] 19:27:48     INFO - #36: nsDocShell::OnStopRequest(nsIRequest*, nsresult) [docshell/base/nsDocShell.cpp:0]
[task 2023-09-26T19:27:48.041Z] 19:27:48     INFO - #37: mozilla::net::nsLoadGroup::NotifyRemovalObservers(nsIRequest*, nsresult) [netwerk/base/nsLoadGroup.cpp:631]
[task 2023-09-26T19:27:48.041Z] 19:27:48     INFO - #38: mozilla::net::nsLoadGroup::RemoveRequest(nsIRequest*, nsISupports*, nsresult) [netwerk/base/nsLoadGroup.cpp:0]
[task 2023-09-26T19:27:48.042Z] 19:27:48     INFO - #39: mozilla::dom::Document::DoUnblockOnload() [dom/base/Document.cpp:11700]
[task 2023-09-26T19:27:48.042Z] 19:27:48     INFO - #40: mozilla::dom::Document::DispatchContentLoadedEvents() [dom/base/Document.cpp:8152]
[task 2023-09-26T19:27:48.043Z] 19:27:48     INFO - #41: mozilla::detail::RunnableMethodImpl<mozilla::dom::Document*, void (mozilla::dom::Document::*)(), true, (mozilla::RunnableKind)0, >::Run() [xpcom/threads/nsThreadUtils.h:1213]
[task 2023-09-26T19:27:48.043Z] 19:27:48     INFO - #42: mozilla::RunnableTask::Run() [xpcom/threads/TaskController.cpp:560]
[task 2023-09-26T19:27:48.044Z] 19:27:48     INFO - #43: mozilla::TaskController::DoExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) [xpcom/threads/TaskController.cpp:0]
[task 2023-09-26T19:27:48.045Z] 19:27:48     INFO - #44: mozilla::TaskController::ExecuteNextTaskOnlyMainThreadInternal(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&) [xpcom/threads/TaskController.cpp:0]
[task 2023-09-26T19:27:48.045Z] 19:27:48     INFO - #45: mozilla::TaskController::ProcessPendingMTTask(bool) [xpcom/threads/TaskController.cpp:495]
[task 2023-09-26T19:27:48.045Z] 19:27:48     INFO - #46: mozilla::detail::RunnableFunction<mozilla::TaskController::TaskController()::$_0>::Run() [xpcom/threads/nsThreadUtils.h:549]
[task 2023-09-26T19:27:48.046Z] 19:27:48     INFO - #47: nsThread::ProcessNextEvent(bool, bool*) [xpcom/threads/nsThread.cpp:1203]
[task 2023-09-26T19:27:48.046Z] 19:27:48     INFO - #48: NS_ProcessNextEvent(nsIThread*, bool) [xpcom/threads/nsThreadUtils.cpp:480]
[task 2023-09-26T19:27:48.047Z] 19:27:48     INFO - #49: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) [ipc/glue/MessagePump.cpp:85]
[task 2023-09-26T19:27:48.047Z] 19:27:48     INFO - #50: MessageLoop::Run() [ipc/chromium/src/base/message_loop.cc:346]
[task 2023-09-26T19:27:48.048Z] 19:27:48     INFO - #51: nsBaseAppShell::Run() [widget/nsBaseAppShell.cpp:150]
[task 2023-09-26T19:27:48.049Z] 19:27:48     INFO - #52: nsAppShell::Run() [widget/cocoa/nsAppShell.mm:870]
[task 2023-09-26T19:27:48.049Z] 19:27:48     INFO - #53: XRE_RunAppShell() [toolkit/xre/nsEmbedFunctions.cpp:721]
[task 2023-09-26T19:27:48.050Z] 19:27:48     INFO - #54: mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) [ipc/glue/MessagePump.cpp:235]
[task 2023-09-26T19:27:48.050Z] 19:27:48     INFO - #55: MessageLoop::Run() [ipc/chromium/src/base/message_loop.cc:346]
[task 2023-09-26T19:27:48.051Z] 19:27:48     INFO - #56: XRE_InitChildProcess(int, char**, XREChildData const*) [toolkit/xre/nsEmbedFunctions.cpp:0]
[task 2023-09-26T19:27:48.052Z] 19:27:48     INFO - #57: main [ipc/app/MozillaRuntimeMain.cpp:90]
[task 2023-09-26T19:27:48.071Z] 19:27:48     INFO - REFTEST TEST-PASS | layout/generic/crashtests/944909-1.html | (LOAD ONLY)
[task 2023-09-26T19:27:48.071Z] 19:27:48     INFO - REFTEST TEST-END | layout/generic/crashtests/944909-1.html
[task 2023-09-26T19:27:48.084Z] 19:27:48     INFO - REFTEST TEST-UNEXPECTED-FAIL | layout/generic/crashtests/944909-1.html | assertion count 3 is more than expected 2 assertions
Flags: needinfo?(aethanyc)

It is expected that 944909-1.html can trigger assertions after applying my patch. However, the assertion count on macOS is 3 rather than 2. It's strange that my try run didn't show this https://treeherder.mozilla.org/jobs?repo=try&revision=0672b5ca0e7e8c61dd3aaf6553f3cd7dbeb26396&selectedTaskRun=XguBx3rQSwmwAafnALj5QQ.0

Flags: needinfo?(aethanyc)
Pushed by aethanyc@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/56b301fd8155
Simplify nsVideoFrame::Reflow() and switch it to logical coordinates. r=emilio
Status: NEW → RESOLVED
Closed: 9 months ago
Resolution: --- → FIXED
Target Milestone: --- → 120 Branch
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: