Bug 738192 follow-up. Re-enable layout/reftests/svg/dynamic-text-04.svg after fixing MarkDirtyBitsOnDescendants. r=me.

This commit is contained in:
Jonathan Watt 2012-06-24 18:02:23 +01:00
Родитель b101abb1ed
Коммит 80beda3ba7
2 изменённых файлов: 7 добавлений и 5 удалений

Просмотреть файл

@ -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-01.svg dynamic-text-01-ref.svg
== dynamic-text-02.svg dynamic-text-02-ref.svg == dynamic-text-02.svg dynamic-text-02-ref.svg
== dynamic-text-03.svg dynamic-text-03-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-05.svg pass.svg
== dynamic-text-06.svg pass.svg == dynamic-text-06.svg pass.svg
== dynamic-text-07.svg dynamic-text-07-ref.svg == dynamic-text-07.svg dynamic-text-07-ref.svg

Просмотреть файл

@ -278,15 +278,17 @@ nsSVGTextFrame::GetCanvasTM()
static void static void
MarkDirtyBitsOnDescendants(nsIFrame *aFrame) MarkDirtyBitsOnDescendants(nsIFrame *aFrame)
{ {
if (aFrame->GetStateBits() & (NS_FRAME_IS_DIRTY | NS_FRAME_FIRST_REFLOW)) { // Do not skip marking of aFrame or any of its descendants if they have
// Nothing to do if we're already dirty, or if the outer-<svg> // the NS_FRAME_IS_DIRTY set, because some of their descendants may not
// hasn't yet had its initial reflow. // have it set, and we need all descendants to be dirty.
if (aFrame->GetStateBits() & (NS_FRAME_FIRST_REFLOW)) {
// Nothing to do if our outer-<svg> hasn't yet had its initial reflow.
return; return;
} }
nsIFrame* kid = aFrame->GetFirstPrincipalChild(); nsIFrame* kid = aFrame->GetFirstPrincipalChild();
while (kid) { while (kid) {
nsISVGChildFrame* svgkid = do_QueryFrame(kid); nsISVGChildFrame* svgkid = do_QueryFrame(kid);
if (svgkid && !(kid->GetStateBits() & NS_FRAME_IS_DIRTY)) { if (svgkid) {
MarkDirtyBitsOnDescendants(kid); MarkDirtyBitsOnDescendants(kid);
kid->AddStateBits(NS_FRAME_IS_DIRTY); kid->AddStateBits(NS_FRAME_IS_DIRTY);
} }