From 80beda3ba70807430238bcec0176e2b761080986 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Sun, 24 Jun 2012 18:02:23 +0100 Subject: [PATCH] Bug 738192 follow-up. Re-enable layout/reftests/svg/dynamic-text-04.svg after fixing MarkDirtyBitsOnDescendants. r=me. --- layout/reftests/svg/reftest.list | 2 +- layout/svg/base/src/nsSVGTextFrame.cpp | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/layout/reftests/svg/reftest.list b/layout/reftests/svg/reftest.list index 5b26409d889c..e4e7c6942929 100644 --- a/layout/reftests/svg/reftest.list +++ b/layout/reftests/svg/reftest.list @@ -98,7 +98,7 @@ fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),1,2) == clipPath-and-shape-re == dynamic-text-01.svg dynamic-text-01-ref.svg == dynamic-text-02.svg dynamic-text-02-ref.svg == dynamic-text-03.svg dynamic-text-03-ref.svg -#random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == dynamic-text-04.svg dynamic-text-04-ref.svg # bug 421587 for WinXP +random-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == dynamic-text-04.svg dynamic-text-04-ref.svg # bug 421587 for WinXP == dynamic-text-05.svg pass.svg == dynamic-text-06.svg pass.svg == dynamic-text-07.svg dynamic-text-07-ref.svg diff --git a/layout/svg/base/src/nsSVGTextFrame.cpp b/layout/svg/base/src/nsSVGTextFrame.cpp index 035a743b9e5e..d596879272ce 100644 --- a/layout/svg/base/src/nsSVGTextFrame.cpp +++ b/layout/svg/base/src/nsSVGTextFrame.cpp @@ -278,15 +278,17 @@ nsSVGTextFrame::GetCanvasTM() static void MarkDirtyBitsOnDescendants(nsIFrame *aFrame) { - if (aFrame->GetStateBits() & (NS_FRAME_IS_DIRTY | NS_FRAME_FIRST_REFLOW)) { - // Nothing to do if we're already dirty, or if the outer- - // hasn't yet had its initial reflow. + // Do not skip marking of aFrame or any of its descendants if they have + // the NS_FRAME_IS_DIRTY set, because some of their descendants may not + // have it set, and we need all descendants to be dirty. + if (aFrame->GetStateBits() & (NS_FRAME_FIRST_REFLOW)) { + // Nothing to do if our outer- hasn't yet had its initial reflow. return; } nsIFrame* kid = aFrame->GetFirstPrincipalChild(); while (kid) { nsISVGChildFrame* svgkid = do_QueryFrame(kid); - if (svgkid && !(kid->GetStateBits() & NS_FRAME_IS_DIRTY)) { + if (svgkid) { MarkDirtyBitsOnDescendants(kid); kid->AddStateBits(NS_FRAME_IS_DIRTY); }