Closed Bug 783064 Opened 11 years ago Closed 6 years ago

New tab performance analysis

Categories

(Firefox :: General, defect)

defect
Not set
normal

Tracking

()

RESOLVED INCOMPLETE

People

(Reporter: enndeakin, Unassigned)

References

Details

(Keywords: meta, Whiteboard: [Snappy:P1])

The following is a log I made of reflows or marks for reflow that get made when a new opens. Tab animation causes a lot but that is a separate bug and not shown in this log.

--- start opening tab
<tab> inserted
 - mark box for reflow after insert into <box>
<notification> inserted
 - mark box for reflow after insert into <tabpanels>
 - flush style (due to getting docshell from containerBoxObject)
stop() is called within loadOneTab
 - flush layout (due to stop request, nsDocLoader::OnStopRequest)
 - reflow root box
 - flush child document style (due to stop request, nsDocLoader::OnStopRequest)
onLocationChange() called
 - mark block for reflow after remove <div>
 - mark block for reflow after insert into <div>
onSecurityChange() called
 - flush style (due to getting popup state)
 - mark for reflow after style change
 - mark box for reflow after remove <image>
 - mark box for reflow after insert <box>
 - mark box for reflow after remove <image>
 - mark box for reflow after insert <box>
isElementVisible() within focusAndSelectUrlBar() called
 - flush layout (get box object height)
 - reflow root box
 - flush layout (get box object width)
focus() within focusAndSelectUrlBar() called
 - flush interruptable layout (due to scroll into view)
select() within focusAndSelectUrlBar() called
 - flush style (due to select all)
 - mark for reflow after style change on <textbox>
--- end opening tab, the remainder is after a setTimeout
adjustTabstrip() called
 - flush layout (due to call to getBoundingClientRect())
 - mark box for reflow after insert <hbox>
 - mark box for reflow after insert <hbox>
 - reflow root box
adjustTabstrip() called (again) but within handleNewTab
 - flush layout (due to call to getBoundingClientRect())
 - mark box for reflow after style change <tab>
 - reflow root box
_fillTrailingGap() called
 - flush layout (due to call to get scrollLeft)
flush style from refresh driver
flush interruptable layout from refresh driver
flush interruptable layout from esm flush pending events
flush interruptable layout from willpaint
flush layout from scrollintoview
flush layout from querytextcontent
flush layout from scrollintoview
flush style from refresh driver
flush interruptable layout from willpaint
 - mark for reflow <textbox>?
 - reflow root box?
flush layout from stop request, nsDocLoader::OnStopRequest
flush child document style from stop request, nsDocLoader::OnStopRequest
flush child document style from load complete, DocumentViewerImpl::LoadComplete
 - reflow root box
flush child document interruptable layout from refresh driver
flush child document interruptable layout from esm flush pending events (DispatchSynthMouseMove)
flush interruptable layout from willpaint
flush child document interruptable layout from willpaint
flush interruptable layout from willpaint
flush child document interruptable layout from willpaint
flush layout from getting window.outerWidth
flush interruptable layout from willpaint
flush child document interruptable layout from willpaint
flush interruptable layout from willpaint
flush child document interruptable layout from willpaint
flush child document interruptable layout from esm flush pending events
flush layout from getting window.mozInnerScreenX
flush child document interruptable layout from esm flush pending events (mouseMoved)
flush child document interruptable layout from esm flush pending events (mouseMoved)
flush child document interruptable layout from esm flush pending events (mouseMoved)
flush interruptable layout from willpaint
flush child document interruptable layout from willpaint
Depends on: 783103
(In reply to Neil Deakin from comment #0)
> select() within focusAndSelectUrlBar() called
>  - flush style (due to select all)

I suppose this style flush is in the input field's anonymous document, so it's probably not a big deal. We could however avoid this by calling select() only if the value is non-empty. Should we make this change?
Depends on: 792297
Depends on: 792390
Whiteboard: [Snappy]
Component: Tabbed Browser → General
OS: Mac OS X → All
Hardware: x86 → All
Whiteboard: [Snappy] → [Snappy:P1]
FYI, possibly related, I filed bug 837535 (tabstrip-tab and newtab-button paint few gradients, possibly should paint only one). This affects tab animation as on each frame we might be painting more than we're hoping to.
We got rid of the browser.stop() call and its consequences in bug 878747. Bug 876374 removed one of the sync reflows caused by adjustTabstrip() before addTab() finishes.
Depends on: 878747, 876374
Keywords: meta
This is likely way outdated now.
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.