PayloadPresented is not called for no-op composites
Categories
(Core :: Graphics: Layers, defect, P3)
Tracking
()
Tracking | Status | |
---|---|---|
firefox70 | --- | fixed |
People
(Reporter: mstange, Assigned: mstange)
Details
Attachments
(1 file)
Sometimes the compositor will detect that nothing changed on the screen and abort the composite. In that case, PayloadPresented will not be called, and payloads will stick around and their latency will be artificially high.
Conceptually, if a key press or a wheel scroll did not change anything in the onscreen rendering, we should count those no-op composites as a success: We have successfully completed the work that needed to be done in response to those events. So I think we should call PayloadPresented even if there is no compositing. The "presented" part is maybe a bit of a lie, then; it's more like "PayloadHandledToCompletion" in reality.
At the moment, for LayerManagerComposite, LayerManagerComposite::Render()
is what calls PayloadPresented. No-op composites are detected in its caller, LayerManagerComposite::UpdateAndRender()
, so we don't even enter Render()
for no-op composites. We should probably move the call to PayloadPresented into LayerManagerComposite::UpdateAndRender()
.
Assignee | ||
Comment 1•5 years ago
|
||
Alternatively, we could discard all payloads that don't require compositing.
Updated•5 years ago
|
Assignee | ||
Comment 2•5 years ago
|
||
On IRC, Bas agreed that discarding such payloads is probably the right way to go.
Assignee | ||
Comment 3•5 years ago
|
||
Assignee | ||
Comment 4•5 years ago
|
||
This patch fixes LayerManagerComposite. I have not looked at LayerManagerMLGPU or WebRender.
The patch is on top of the patches from bug 1571253.
Assignee | ||
Updated•5 years ago
|
Updated•5 years ago
|
Comment 6•5 years ago
|
||
bugherder |
Description
•