| OLD | NEW |
| 1 Test that layers can be nicely added or removed from a squashed layer, without u
nnecessary repaints on any layer. Click anywhere to test interactively; keep cli
cking to proceed through the test. | 1 Test that layers can be nicely added or removed from a squashed layer, without u
nnecessary repaints on any layer. Click anywhere to test interactively; keep cli
cking to proceed through the test. |
| 2 | 2 |
| 3 CASE 1, original layer tree with overlap1 and overlap2: | 3 CASE 1, original layer tree with overlap1 and overlap2: |
| 4 { | 4 { |
| 5 "layers": [ | 5 "layers": [ |
| 6 { | 6 { |
| 7 "name": "LayoutView #document", | 7 "name": "LayoutView #document", |
| 8 "bounds": [800, 600], | 8 "bounds": [800, 600], |
| 9 "contentsOpaque": true, | 9 "contentsOpaque": true, |
| 10 "drawsContent": true | 10 "drawsContent": true |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 }, | 52 }, |
| 53 { | 53 { |
| 54 "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positione
d) DIV id='A' class='overlap1')", | 54 "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positione
d) DIV id='A' class='overlap1')", |
| 55 "position": [140, 140], | 55 "position": [140, 140], |
| 56 "bounds": [260, 260], | 56 "bounds": [260, 260], |
| 57 "drawsContent": true, | 57 "drawsContent": true, |
| 58 "paintInvalidations": [ | 58 "paintInvalidations": [ |
| 59 { | 59 { |
| 60 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 60 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 61 "rect": [160, 160, 100, 100], | 61 "rect": [160, 160, 100, 100], |
| 62 "reason": "layoutObject insertion" | 62 "reason": "appeared" |
| 63 } | 63 } |
| 64 ] | 64 ] |
| 65 } | 65 } |
| 66 ], | 66 ], |
| 67 "objectPaintInvalidations": [ | 67 "objectPaintInvalidations": [ |
| 68 { | 68 { |
| 69 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 69 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 70 "reason": "subtree" | 70 "reason": "subtree" |
| 71 }, | 71 }, |
| 72 { | 72 { |
| 73 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 73 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 74 "reason": "layoutObject insertion" | 74 "reason": "appeared" |
| 75 } | 75 } |
| 76 ] | 76 ] |
| 77 } | 77 } |
| 78 CASE 3, overlap2 gets removed. Since this does not resize the layer, there shoul
d only be a repaint of overlap2: | 78 CASE 3, overlap2 gets removed. Since this does not resize the layer, there shoul
d only be a repaint of overlap2: |
| 79 { | 79 { |
| 80 "layers": [ | 80 "layers": [ |
| 81 { | 81 { |
| 82 "name": "LayoutView #document", | 82 "name": "LayoutView #document", |
| 83 "bounds": [800, 600], | 83 "bounds": [800, 600], |
| 84 "contentsOpaque": true, | 84 "contentsOpaque": true, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 98 }, | 98 }, |
| 99 { | 99 { |
| 100 "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positione
d) DIV id='A' class='overlap1')", | 100 "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positione
d) DIV id='A' class='overlap1')", |
| 101 "position": [140, 140], | 101 "position": [140, 140], |
| 102 "bounds": [260, 260], | 102 "bounds": [260, 260], |
| 103 "drawsContent": true, | 103 "drawsContent": true, |
| 104 "paintInvalidations": [ | 104 "paintInvalidations": [ |
| 105 { | 105 { |
| 106 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 106 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 107 "rect": [80, 80, 100, 100], | 107 "rect": [80, 80, 100, 100], |
| 108 "reason": "layoutObject removal" | 108 "reason": "disappeared" |
| 109 } | 109 } |
| 110 ] | 110 ] |
| 111 } | 111 } |
| 112 ], | 112 ], |
| 113 "objectPaintInvalidations": [ | 113 "objectPaintInvalidations": [ |
| 114 { | 114 { |
| 115 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 115 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 116 "reason": "layoutObject removal" | 116 "reason": "disappeared" |
| 117 } | 117 } |
| 118 ] | 118 ] |
| 119 } | 119 } |
| 120 CASE 4, overlap1 gets removed: | 120 CASE 4, overlap1 gets removed: |
| 121 { | 121 { |
| 122 "layers": [ | 122 "layers": [ |
| 123 { | 123 { |
| 124 "name": "LayoutView #document", | 124 "name": "LayoutView #document", |
| 125 "bounds": [800, 600], | 125 "bounds": [800, 600], |
| 126 "contentsOpaque": true, | 126 "contentsOpaque": true, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 145 "drawsContent": true, | 145 "drawsContent": true, |
| 146 "paintInvalidations": [ | 146 "paintInvalidations": [ |
| 147 { | 147 { |
| 148 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 148 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 149 "rect": [160, 160, 100, 100], | 149 "rect": [160, 160, 100, 100], |
| 150 "reason": "subtree" | 150 "reason": "subtree" |
| 151 }, | 151 }, |
| 152 { | 152 { |
| 153 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", | 153 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", |
| 154 "rect": [0, 0, 100, 100], | 154 "rect": [0, 0, 100, 100], |
| 155 "reason": "layoutObject removal" | 155 "reason": "disappeared" |
| 156 }, | 156 }, |
| 157 { | 157 { |
| 158 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 158 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 159 "rect": [0, 0, 100, 100], | 159 "rect": [0, 0, 100, 100], |
| 160 "reason": "compositing update" | 160 "reason": "compositing update" |
| 161 } | 161 } |
| 162 ] | 162 ] |
| 163 } | 163 } |
| 164 ], | 164 ], |
| 165 "objectPaintInvalidations": [ | 165 "objectPaintInvalidations": [ |
| 166 { | 166 { |
| 167 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", | 167 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", |
| 168 "reason": "layoutObject removal" | 168 "reason": "disappeared" |
| 169 }, | 169 }, |
| 170 { | 170 { |
| 171 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 171 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 172 "reason": "subtree" | 172 "reason": "subtree" |
| 173 }, | 173 }, |
| 174 { | 174 { |
| 175 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 175 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 176 "reason": "compositing update" | 176 "reason": "compositing update" |
| 177 } | 177 } |
| 178 ] | 178 ] |
| (...skipping 26 matching lines...) Expand all Loading... |
| 205 "drawsContent": true, | 205 "drawsContent": true, |
| 206 "paintInvalidations": [ | 206 "paintInvalidations": [ |
| 207 { | 207 { |
| 208 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 208 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 209 "rect": [80, 80, 100, 100], | 209 "rect": [80, 80, 100, 100], |
| 210 "reason": "compositing update" | 210 "reason": "compositing update" |
| 211 }, | 211 }, |
| 212 { | 212 { |
| 213 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 213 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 214 "rect": [0, 0, 100, 100], | 214 "rect": [0, 0, 100, 100], |
| 215 "reason": "layoutObject insertion" | 215 "reason": "appeared" |
| 216 }, | 216 }, |
| 217 { | 217 { |
| 218 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 218 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 219 "rect": [0, 0, 100, 100], | 219 "rect": [0, 0, 100, 100], |
| 220 "reason": "subtree" | 220 "reason": "subtree" |
| 221 } | 221 } |
| 222 ] | 222 ] |
| 223 } | 223 } |
| 224 ], | 224 ], |
| 225 "objectPaintInvalidations": [ | 225 "objectPaintInvalidations": [ |
| 226 { | 226 { |
| 227 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 227 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 228 "reason": "subtree" | 228 "reason": "subtree" |
| 229 }, | 229 }, |
| 230 { | 230 { |
| 231 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 231 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 232 "reason": "subtree" | 232 "reason": "subtree" |
| 233 }, | 233 }, |
| 234 { | 234 { |
| 235 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 235 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 236 "reason": "subtree" | 236 "reason": "subtree" |
| 237 }, | 237 }, |
| 238 { | 238 { |
| 239 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 239 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 240 "reason": "layoutObject insertion" | 240 "reason": "appeared" |
| 241 }, | 241 }, |
| 242 { | 242 { |
| 243 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 243 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 244 "reason": "compositing update" | 244 "reason": "compositing update" |
| 245 } | 245 } |
| 246 ] | 246 ] |
| 247 } | 247 } |
| 248 CASE 6, overlap1 gets added back, and overlap3 gets removed: | 248 CASE 6, overlap1 gets added back, and overlap3 gets removed: |
| 249 { | 249 { |
| 250 "layers": [ | 250 "layers": [ |
| (...skipping 22 matching lines...) Expand all Loading... |
| 273 "drawsContent": true, | 273 "drawsContent": true, |
| 274 "paintInvalidations": [ | 274 "paintInvalidations": [ |
| 275 { | 275 { |
| 276 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 276 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 277 "rect": [80, 80, 100, 100], | 277 "rect": [80, 80, 100, 100], |
| 278 "reason": "compositing update" | 278 "reason": "compositing update" |
| 279 }, | 279 }, |
| 280 { | 280 { |
| 281 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 281 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 282 "rect": [80, 80, 100, 100], | 282 "rect": [80, 80, 100, 100], |
| 283 "reason": "layoutObject removal" | 283 "reason": "disappeared" |
| 284 }, | 284 }, |
| 285 { | 285 { |
| 286 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", | 286 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", |
| 287 "rect": [0, 0, 100, 100], | 287 "rect": [0, 0, 100, 100], |
| 288 "reason": "layoutObject insertion" | 288 "reason": "appeared" |
| 289 }, | 289 }, |
| 290 { | 290 { |
| 291 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 291 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 292 "rect": [0, 0, 100, 100], | 292 "rect": [0, 0, 100, 100], |
| 293 "reason": "subtree" | 293 "reason": "subtree" |
| 294 } | 294 } |
| 295 ] | 295 ] |
| 296 } | 296 } |
| 297 ], | 297 ], |
| 298 "objectPaintInvalidations": [ | 298 "objectPaintInvalidations": [ |
| 299 { | 299 { |
| 300 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", | 300 "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", |
| 301 "reason": "layoutObject removal" | 301 "reason": "disappeared" |
| 302 }, | 302 }, |
| 303 { | 303 { |
| 304 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", | 304 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", |
| 305 "reason": "subtree" | 305 "reason": "subtree" |
| 306 }, | 306 }, |
| 307 { | 307 { |
| 308 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 308 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 309 "reason": "subtree" | 309 "reason": "subtree" |
| 310 }, | 310 }, |
| 311 { | 311 { |
| 312 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 312 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 313 "reason": "subtree" | 313 "reason": "subtree" |
| 314 }, | 314 }, |
| 315 { | 315 { |
| 316 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", | 316 "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", |
| 317 "reason": "layoutObject insertion" | 317 "reason": "appeared" |
| 318 }, | 318 }, |
| 319 { | 319 { |
| 320 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", | 320 "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", |
| 321 "reason": "compositing update" | 321 "reason": "compositing update" |
| 322 } | 322 } |
| 323 ] | 323 ] |
| 324 } | 324 } |
| 325 | 325 |
| OLD | NEW |