[Impeller] Check the correct stencil coverage when deciding whether to elide a restore (#39023)
diff --git a/impeller/aiks/aiks_unittests.cc b/impeller/aiks/aiks_unittests.cc index 2485772..dc884f8 100644 --- a/impeller/aiks/aiks_unittests.cc +++ b/impeller/aiks/aiks_unittests.cc
@@ -278,11 +278,11 @@ canvas.Save(); - // Append two clips. First with empty coverage. + // Append two clips, the second resulting in empty coverage. canvas.ClipPath( PathBuilder{}.AddRect(Rect::MakeXYWH(100, 100, 100, 100)).TakePath()); canvas.ClipPath( - PathBuilder{}.AddRect(Rect::MakeXYWH(100, 100, 100, 100)).TakePath()); + PathBuilder{}.AddRect(Rect::MakeXYWH(300, 300, 100, 100)).TakePath()); // Restore to no clips. canvas.Restore();
diff --git a/impeller/entity/entity_pass.cc b/impeller/entity/entity_pass.cc index 5819740..0add3a2 100644 --- a/impeller/entity/entity_pass.cc +++ b/impeller/entity/entity_pass.cc
@@ -460,10 +460,9 @@ element_entity.GetStencilDepth() - stencil_depth_floor; FML_DCHECK(restoration_depth < stencil_stack.size()); - auto restored_coverage = stencil_stack.back().coverage; stencil_stack.resize(restoration_depth + 1); - if (!restored_coverage.has_value()) { + if (!stencil_stack.back().coverage.has_value()) { // Running this restore op won't make anything renderable, so skip it. return true; }