Change of outline near left edge of block causes the whole block to be invalidated

RESOLVED FIXED

Status

()

Core
Layout: Block and Inline
RESOLVED FIXED
9 years ago
6 years ago

People

(Reporter: stechz, Unassigned)

Tracking

({testcase})

Trunk
testcase
Points:
---
Dependency tree / graph
Bug Flags:
blocking1.9.2 -
wanted-fennec1.0 +

Firefox Tracking Flags

(blocking2.0 -, fennec1.0-)

Details

Attachments

(2 attachments)

(Reporter)

Description

9 years ago
Created attachment 403369 [details]
Test case

See screenshot.  The entire table is invalidated, as well as an arbitrary area below the table.
(Reporter)

Comment 1

9 years ago
Created attachment 403370 [details]
Screenshot of invalidated area
(Reporter)

Updated

9 years ago
Summary: Change of outline causes large invalidation area → Change of outline inside table causes large invalidation area
(Reporter)

Updated

9 years ago
Component: General → General
Product: Fennec → Core
QA Contact: general → general
The reason the big area (outside the table bounds) is invalidated is that after reflowing the first line of the <body> (or the <html>; same thing) we have:

(gdb) p oldCombinedArea
$95 = {
  x = 0, 
  y = 0, 
  width = 47760, 
  height = 28488
}
(gdb) p lineCombinedArea
$96 = {
  x = -180, 
  y = 0, 
  width = 47940, 
  height = 28488
}

and then we go on to invalidate the union of the combined areas.

And the reason for that -180 is that the outer table has overflow poking 180 units out its left.  The rowgroup has the same but 300 units, and same for the table row and cell.  The table cell's block has the same but 360 units.  And of course the thing overflowing to the left is the outline.

The table is completely irrelevant; if I replace it with a div, or just have the <a> as a direct child of the div that's a child of the body, I get the same effect.  If the nesting is deeper we just invalidate the big area more times.

There's some table-specific invalidation going on here too, in that we invalidate the entire row if the cell's position changed, I think, but I figure we can worry about that once the block issue is fixed and it's not confounding things here.
Component: General → Layout: Block and Inline
QA Contact: general → layout.block-and-inline
Summary: Change of outline inside table causes large invalidation area → Change of outline near left edge of block causes the whole block to be invalidated
(Reporter)

Updated

9 years ago
tracking-fennec: --- → ?
(Reporter)

Updated

9 years ago
Blocks: 515696
(Reporter)

Updated

9 years ago
Flags: blocking1.9.2?

Comment 3

9 years ago
Would it be possible to get this in for 1.9.2?
Flags: wanted-fennec1.0+
I don't see an easy fix here.
Not blocking, I don't think, but we'll try for 1.9.3
blocking2.0: --- → ?
tracking-fennec: ? → 1.0-
Flags: blocking1.9.2? → blocking1.9.2-
Keywords: testcase
Michael's patch to reimplement reflow invalidation would fix this, or make it much easier to fix.
Depends on: 539356
Fixed by bug 539356 - We now only invalidate the text/border area.
Status: NEW → RESOLVED
Last Resolved: 6 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.