From 63e02d38982fc48b0b9598528bb53dac6ef1953c Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Wed, 22 Dec 2021 15:48:46 +0100 Subject: [PATCH 1/2] Only provide frame damage to rasterizer if partial repaint is enabled --- shell/common/rasterizer.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/shell/common/rasterizer.cc b/shell/common/rasterizer.cc index ad5644c45f986..3ae7a30725a75 100644 --- a/shell/common/rasterizer.cc +++ b/shell/common/rasterizer.cc @@ -560,22 +560,24 @@ RasterStatus Rasterizer::DrawToSurfaceUnsafe( external_view_embedder_ && (!raster_thread_merger_ || raster_thread_merger_->IsMerged()); - FrameDamage damage; + std::unique_ptr damage; if (!disable_partial_repaint && frame->framebuffer_info().existing_damage) { - damage.SetPreviousLayerTree(last_layer_tree_.get()); - damage.AddAdditonalDamage(*frame->framebuffer_info().existing_damage); + damage = std::make_unique(); + damage->SetPreviousLayerTree(last_layer_tree_.get()); + damage->AddAdditonalDamage(*frame->framebuffer_info().existing_damage); } RasterStatus raster_status = - compositor_frame->Raster(layer_tree, false, &damage); + compositor_frame->Raster(layer_tree, false, damage.get()); if (raster_status == RasterStatus::kFailed || raster_status == RasterStatus::kSkipAndRetry) { return raster_status; } SurfaceFrame::SubmitInfo submit_info; - submit_info.frame_damage = damage.GetFrameDamage(); - submit_info.buffer_damage = damage.GetBufferDamage(); + submit_info.frame_damage = damage ? damage->GetFrameDamage() : std::nullopt; + submit_info.buffer_damage = + damage ? damage->GetBufferDamage() : std::nullopt; frame->set_submit_info(submit_info); From d45882853aa2f92f77816550d1c7ddf3b9f2576b Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Wed, 22 Dec 2021 15:51:13 +0100 Subject: [PATCH 2/2] Use if check around assignment instead --- shell/common/rasterizer.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/shell/common/rasterizer.cc b/shell/common/rasterizer.cc index 3ae7a30725a75..403fcc91de2ee 100644 --- a/shell/common/rasterizer.cc +++ b/shell/common/rasterizer.cc @@ -575,9 +575,10 @@ RasterStatus Rasterizer::DrawToSurfaceUnsafe( } SurfaceFrame::SubmitInfo submit_info; - submit_info.frame_damage = damage ? damage->GetFrameDamage() : std::nullopt; - submit_info.buffer_damage = - damage ? damage->GetBufferDamage() : std::nullopt; + if (damage) { + submit_info.frame_damage = damage->GetFrameDamage(); + submit_info.buffer_damage = damage->GetBufferDamage(); + } frame->set_submit_info(submit_info);