Commit a24f4200 authored by Khushal's avatar Khushal Committed by Commit Bot

viz: Ensure correct pairing of Begin/EndPaint in SoftwareRenderer.

Prior to [1], Begin/EndPaint on the SoftwareOutputDevice always happened
in pairs since it was done in Begin/EndDrawingFrame. But now BeginPaint
is done only if we draw to the root render pass, which can be skipped in
case of an empty swap. Ensure that we only call EndPaint if a BeginPaint
was needed.

[1]: https://chromium-review.googlesource.com/c/chromium/src/+/2026968

R=ccameron@chromium.org

Bug: 1049545
Change-Id: Ib0b27e62051107670852ede5d3ce73371cd3e51e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2042514
Auto-Submit: Khushal <khushalsagar@chromium.org>
Commit-Queue: ccameron <ccameron@chromium.org>
Reviewed-by: default avatarccameron <ccameron@chromium.org>
Cr-Commit-Position: refs/heads/master@{#739455}
parent 38108391
...@@ -94,9 +94,10 @@ void SoftwareRenderer::FinishDrawingFrame() { ...@@ -94,9 +94,10 @@ void SoftwareRenderer::FinishDrawingFrame() {
TRACE_EVENT0("viz", "SoftwareRenderer::FinishDrawingFrame"); TRACE_EVENT0("viz", "SoftwareRenderer::FinishDrawingFrame");
current_framebuffer_canvas_.reset(); current_framebuffer_canvas_.reset();
current_canvas_ = nullptr; current_canvas_ = nullptr;
root_canvas_ = nullptr;
output_device_->EndPaint(); if (root_canvas_)
output_device_->EndPaint();
root_canvas_ = nullptr;
} }
void SoftwareRenderer::SwapBuffers(SwapFrameData swap_frame_data) { void SoftwareRenderer::SwapBuffers(SwapFrameData swap_frame_data) {
...@@ -123,8 +124,12 @@ void SoftwareRenderer::EnsureScissorTestDisabled() { ...@@ -123,8 +124,12 @@ void SoftwareRenderer::EnsureScissorTestDisabled() {
void SoftwareRenderer::BindFramebufferToOutputSurface() { void SoftwareRenderer::BindFramebufferToOutputSurface() {
DCHECK(!output_surface_->HasExternalStencilTest()); DCHECK(!output_surface_->HasExternalStencilTest());
DCHECK(!root_canvas_);
current_framebuffer_canvas_.reset(); current_framebuffer_canvas_.reset();
root_canvas_ = output_device_->BeginPaint(current_frame()->root_damage_rect); root_canvas_ = output_device_->BeginPaint(current_frame()->root_damage_rect);
if (!root_canvas_)
output_device_->EndPaint();
current_canvas_ = root_canvas_; current_canvas_ = root_canvas_;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment