Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Libraries/LibWeb/Painting/DisplayListRecordingContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,17 @@ class WEB_API DisplayListRecordingContext {
bool has_blocking_wheel_event_listeners() const { return m_has_blocking_wheel_event_listeners; }
void set_has_blocking_wheel_event_listeners(bool value) { m_has_blocking_wheel_event_listeners = value; }
bool has_blocking_wheel_event_region_covering_viewport() const { return m_has_blocking_wheel_event_region_covering_viewport; }
bool should_record_wheel_hit_test_targets() const { return m_should_record_wheel_hit_test_targets; }
void set_should_record_wheel_hit_test_targets(bool value) { m_should_record_wheel_hit_test_targets = value; }

Optional<Painting::VisualContextIndex> cached_wheel_hit_test_target_for(Painting::Paintable const& paintable) const
{
return m_wheel_hit_test_target_cache.get(&paintable);
}
void cache_wheel_hit_test_target_for(Painting::Paintable const& paintable, Painting::VisualContextIndex target)
{
m_wheel_hit_test_target_cache.set(&paintable, target);
}

private:
Painting::DisplayListRecorder& m_display_list_recorder;
Expand All @@ -144,6 +155,8 @@ class WEB_API DisplayListRecordingContext {
Painting::ScrollState const* m_async_scrolling_scroll_state { nullptr };
bool m_has_blocking_wheel_event_listeners { false };
bool m_has_blocking_wheel_event_region_covering_viewport { false };
bool m_should_record_wheel_hit_test_targets { false };
HashMap<Painting::Paintable const*, Painting::VisualContextIndex> m_wheel_hit_test_target_cache;
};

}
64 changes: 50 additions & 14 deletions Libraries/LibWeb/Painting/Paintable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -677,27 +677,63 @@ static void record_main_thread_wheel_event_region(Paintable const& paintable_box
});
}

static Optional<VisualContextIndex> wheel_hit_test_target_scroll_node_index_for(Paintable const& paintable_box)
{
if (paintable_box.own_scroll_node_index().value() && paintable_box.could_be_scrolled_by_wheel_event())
return paintable_box.own_scroll_node_index();
if (auto scrollable_ancestor = paintable_box.nearest_scrollable_ancestor())
return scrollable_ancestor->own_scroll_node_index();
if (auto viewport_paintable = paintable_box.document().paintable(); viewport_paintable && viewport_paintable->could_be_scrolled_by_wheel_event())
return viewport_paintable->own_scroll_node_index();
return {};
static VisualContextIndex wheel_hit_test_target_scroll_node_index_for(Paintable const& paintable_box, DisplayListRecordingContext& context)
{
Vector<Paintable const*, 16> paintables_to_cache;
auto target = VisualContextIndex {};
auto const* current = &paintable_box;
while (true) {
if (auto cached_target = context.cached_wheel_hit_test_target_for(*current); cached_target.has_value()) {
target = *cached_target;
break;
}

paintables_to_cache.append(current);
if (current->own_scroll_node_index().value() && current->could_be_scrolled_by_wheel_event()) {
target = current->own_scroll_node_index();
break;
}

auto containing_block = current->containing_block();
if (containing_block && containing_block->is_fixed_position()) {
if (containing_block->own_scroll_node_index().value() && containing_block->could_be_scrolled_by_wheel_event())
target = containing_block->own_scroll_node_index();
if (target.value())
break;
containing_block = nullptr;
}

if (containing_block) {
current = containing_block.ptr();
continue;
}

auto viewport_paintable = current->document().paintable();
if (!viewport_paintable || viewport_paintable.ptr() == current)
break;
current = viewport_paintable.ptr();
}

for (auto const* paintable : paintables_to_cache)
context.cache_wheel_hit_test_target_for(*paintable, target);
return target;
}

static void record_wheel_hit_test_target(Paintable const& paintable_box, DisplayListRecordingContext& context)
{
// OPTIMIZATION: The compositor falls back to the viewport when there are no explicit targets.
// Avoid generating redundant per-box targets when no non-viewport scroller could need one.
if (!context.should_record_wheel_hit_test_targets())
return;

if (!paintable_box.is_visible() || !paintable_box.visible_for_hit_testing())
return;

auto rect = css_rect_to_device_rect(paintable_box.absolute_border_box_rect(), context.device_pixels_per_css_pixel());
if (rect.is_empty())
return;

auto target_scroll_node_index = wheel_hit_test_target_scroll_node_index_for(paintable_box).value_or({});
auto target_scroll_node_index = wheel_hit_test_target_scroll_node_index_for(paintable_box, context);
auto corner_radii = paintable_box.border_radii_data().as_corners(context.device_pixel_converter());
if (corner_radii.has_any_radius()) {
context.display_list_recorder().compositor_wheel_hit_test_target_with_corner_radii({
Expand Down Expand Up @@ -1582,17 +1618,17 @@ bool Paintable::could_be_scrolled_by_wheel_event(ScrollDirection direction) cons
if (is_viewport_paintable())
overflow = overflow_value_applied_to_viewport_for_wheel_scrolling(document(), direction);

if (overflow != CSS::Overflow::Auto && overflow != CSS::Overflow::Scroll)
return false;

auto scrollable_overflow_rect = this->scrollable_overflow_rect();
if (!scrollable_overflow_rect.has_value())
return false;

CSSPixels scrollable_overflow_size = scrollable_overflow_rect->primary_size_for_orientation(orientation);
CSSPixels scrollport_size = absolute_padding_box_rect().primary_size_for_orientation(orientation);

if (overflow == CSS::Overflow::Auto || overflow == CSS::Overflow::Scroll)
return scrollable_overflow_size > scrollport_size;

return false;
return scrollable_overflow_size > scrollport_size;
}

bool Paintable::could_be_scrolled_by_wheel_event() const
Expand Down
10 changes: 10 additions & 0 deletions Libraries/LibWeb/Painting/ViewportPaintable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ void ViewportPaintable::initialize_async_scrolling_metadata_recording(DisplayLis
scroll_state(),
blocking_wheel_event_region_state.has_blocking_wheel_event_listeners,
blocking_wheel_event_region_state.has_blocking_wheel_event_region_covering_viewport);
context.set_should_record_wheel_hit_test_targets(m_has_non_viewport_wheel_scroll_target_candidate);
}

void ViewportPaintable::finalize_async_scrolling_metadata_recording(DisplayListRecordingContext& context, HTML::LocalNavigable& navigable, Gfx::IntRect viewport_rect)
Expand Down Expand Up @@ -218,10 +219,19 @@ void ViewportPaintable::clear_scroll_state()
m_scroll_state.clear();
m_scroll_state_snapshot = {};
m_needs_to_refresh_scroll_state = true;
m_has_non_viewport_wheel_scroll_target_candidate = false;
}

void ViewportPaintable::register_scroll_node(AccumulatedVisualContextTree& visual_context_tree_being_built, VisualContextIndex node_index, Paintable const& paintable_box, VisualContextIndex parent_index)
{
if (!paintable_box.is_viewport_paintable()) {
auto overflow_x = paintable_box.layout_node().overflow_x();
auto overflow_y = paintable_box.layout_node().overflow_y();
if (overflow_x == CSS::Overflow::Auto || overflow_x == CSS::Overflow::Scroll
|| overflow_y == CSS::Overflow::Auto || overflow_y == CSS::Overflow::Scroll)
m_has_non_viewport_wheel_scroll_target_candidate = true;
}

auto slot = m_scroll_state.register_scroll_node(node_index, paintable_box, visual_context_tree_being_built.scroll_state_slot_for_node(parent_index));
visual_context_tree_being_built.node_at(node_index).data.get<ScrollData>().state_slot = slot;
}
Expand Down
1 change: 1 addition & 0 deletions Libraries/LibWeb/Painting/ViewportPaintable.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ class WEB_API ViewportPaintable final : public PaintableWithLines {
ScrollState m_scroll_state;
ScrollStateSnapshot m_scroll_state_snapshot;
bool m_needs_to_refresh_scroll_state { true };
bool m_has_non_viewport_wheel_scroll_target_candidate { false };

Vector<WeakPtr<Paintable>> m_paintable_boxes_with_auto_content_visibility;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x13]
CompositorWheelHitTestTarget@2 target_scroll_node_index=0 rect=[20,20 100x100]
CompositorBlockingWheelEventRegion@2 rect=[20,20 100x100]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[20,160 100x100]
CompositorWheelHitTestTarget@4 target_scroll_node_index=0 rect=[20,160 200x100]
CompositorBlockingWheelEventRegion@4 rect=[20,160 200x100]
Restore@0

Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,8 @@ after routing admission: blocking wheel event listeners
display list:
AccumulatedVisualContext Tree:
[0] transform=[1,0,0,1,0,0] origin=(0,0) (ViewportPaintable(Viewport<#document>))
[1] scroll (PaintableWithLines(BlockContainer<PRE>#out))

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=1 rect=[0,0 800x600]
CompositorScrollNode@0 scroll_node_index=1 parent_scroll_node_index=0 scrollport_rect=[0,0 800x600] min_scroll_offset=[0,0] max_scroll_offset=[0,1413] is_viewport=true
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2013]
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2000]
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2000]
Restore@0

Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,10 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=1 rect=[0,0 800x600]
CompositorScrollNode@0 scroll_node_index=1 parent_scroll_node_index=0 scrollport_rect=[0,0 800x600] min_scroll_offset=[0,0] max_scroll_offset=[0,1413] is_viewport=true
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2013]
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2000]
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2000]
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[40,40 160x120]
CompositorMainThreadWheelEventRegion@1 rect=[40,40 160x120]
Save@1
AddClipRect@1 rect=[40,40 160x120]
DrawCompositedContext@1 dst_rect=[40,40 160x120]
Restore@1
Restore@0

7 changes: 0 additions & 7 deletions Tests/LibWeb/Text/expected/async-scrolling/sticky-areas.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,8 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=1 rect=[0,0 800x600]
CompositorScrollNode@0 scroll_node_index=1 parent_scroll_node_index=0 scrollport_rect=[0,0 800x600] min_scroll_offset=[0,0] max_scroll_offset=[0,1429] is_viewport=true
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2029]
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x2016]
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,16 800x2000]
CompositorWheelHitTestTarget@2 target_scroll_node_index=1 rect=[0,0 800x16]
CompositorStickyArea@2 scroll_node_index=2 parent_scroll_node_index=1 nearest_scrolling_ancestor_index=1 position_relative_to_scroll_ancestor=[0,0] border_box_size=[800x16] scrollport_size=[800x600] containing_block_region=[0,0 800x2016] needs_parent_offset_adjustment=true inset_top=0 inset_right=none inset_bottom=none inset_left=none
CompositorWheelHitTestTarget@3 target_scroll_node_index=1 rect=[0,0 800x16]
CompositorStickyArea@3 scroll_node_index=3 parent_scroll_node_index=2 nearest_scrolling_ancestor_index=1 position_relative_to_scroll_ancestor=[0,0] border_box_size=[800x16] scrollport_size=[800x600] containing_block_region=[0,0 800x16] needs_parent_offset_adjustment=true inset_top=20 inset_right=none inset_bottom=none inset_left=none
DrawGlyphRun@3 rect=[0,0 45x16] translation=[0,12.796875] color=rgb(0, 0, 0)
Restore@0

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
viewport wheel target: viewport
has explicit wheel hit test targets: false
6 changes: 0 additions & 6 deletions Tests/LibWeb/Text/expected/css/text-underline-position.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x37]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x16]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x16]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 27.15625x16]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[43.15625,8 27.640625x16]
DrawGlyphRun@1 rect=[8,8 28x16] translation=[8,20.796875] color=rgb(0, 0, 0)
DrawLine@1 from=[8,24] to=[35,24] color=rgb(0, 0, 0) thickness=2 style=Solid
DrawGlyphRun@1 rect=[35,8 8x16] translation=[35.15625,20.796875] color=rgb(0, 0, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x221]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x200]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 200x200]
CompositorWheelHitTestTarget@7 target_scroll_node_index=0 rect=[8,8 100x100]
FillRect@7 rect=[8,8 100x100] color=rgb(0, 0, 0)
Restore@0

Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x221]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x200]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 200x200]
CompositorWheelHitTestTarget@4 target_scroll_node_index=0 rect=[8,8 100x100]
FillRect@4 rect=[8,8 100x100] color=rgb(0, 0, 0)
Restore@0

Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x121]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x100]
CompositorWheelHitTestTarget@2 target_scroll_node_index=0 rect=[8,8 100x100]
FillRect@2 rect=[8,8 100x100] color=rgb(0, 128, 0)
Restore@0

Expand All @@ -21,10 +17,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x121]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x100]
CompositorWheelHitTestTarget@2 target_scroll_node_index=0 rect=[8,8 100x100]
FillRect@2 rect=[8,8 100x100] color=rgb(0, 128, 0)
Restore@0

Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x213]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x200]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 200x200]
Save@1
AddClipRect@1 rect=[0,0 200x200]
PaintLinearGradient@1 rect=[0,0 200x600]
Expand All @@ -23,10 +19,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x213]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x200]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 200x200]
Save@1
AddClipRect@1 rect=[0,0 200x200]
PaintLinearGradient@2 rect=[0,0 800x600]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,9 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=1 rect=[0,0 800x600]
CompositorScrollNode@0 scroll_node_index=1 parent_scroll_node_index=0 scrollport_rect=[0,0 800x600] min_scroll_offset=[0,0] max_scroll_offset=[0,613] is_viewport=true
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,0 800x1213]
Save@1
PaintLinearGradient@2 rect=[0,0 800x600]
Restore@1
CompositorWheelHitTestTarget@1 target_scroll_node_index=1 rect=[0,13 800x1200]
Restore@0

Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x90]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x80]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x80]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[100,50 50x10]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,3 102x74]
FillPath@1 path_bounding_rect=[0,3 8x14]
FillPath@1 path_bounding_rect=[0,63 8x14]
DrawGlyphRun@1 rect=[2,5 6x10] translation=[2,13] color=rgb(0, 0, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,10 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x271]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x250]
CompositorWheelHitTestTargetWithCornerRadii@1 target_scroll_node_index=0 rect=[8,8 178x120] corner_radii=[40x10,40x10,40x10,40x10]
FillPath@1 path_bounding_rect=[166,12.651531 20x110.696945]
FillPath@1 path_bounding_rect=[11.232849,113 168.56511x15]
FillPath@1 path_bounding_rect=[8,14.061594 8x107.876816]
FillPath@1 path_bounding_rect=[11.232849,7.999998 168.56511x15.000002]
CompositorWheelHitTestTargetWithCornerRadii@1 target_scroll_node_index=0 rect=[8,128 180x130] corner_radii=[10x40,10x40,10x40,10x40]
FillPath@1 path_bounding_rect=[173,134.20204 15.0000305x117.59592]
FillPath@1 path_bounding_rect=[12.651531,238 170.69693x20]
FillPath@1 path_bounding_rect=[7.9999995,134.20204 15x117.59592]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,8 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x41]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x20]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x20]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 105.671875x20]
FillRect@1 rect=[8,8 106x20] color=rgb(212, 208, 200)
FillPath@1 path_bounding_rect=[8,8 106x20]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[13,10 95.671875x16]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[13,10 95.671875x16]
DrawGlyphRun@1 rect=[13,10 96x16] translation=[13,22.796875] color=rgb(0, 0, 0)
DrawLine@1 from=[13,26] to=[109,26] color=rgb(0, 0, 0) thickness=2 style=Solid
Restore@0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x53]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x32]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 784x32]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,8 32x32]
DrawCanvas@1 dst_rect=[8,8 32x32] content_generation=0
Restore@0

Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x21]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[8,13 100x100]
FillRect@1 rect=[8,13 100x100] color=rgb(0, 128, 0)
Restore@0

Expand All @@ -19,9 +16,6 @@ AccumulatedVisualContext Tree:

DisplayList:
SaveLayer@0
CompositorWheelHitTestTarget@0 target_scroll_node_index=0 rect=[0,0 800x600]
CompositorWheelHitTestTarget@1 target_scroll_node_index=0 rect=[0,0 800x21]
CompositorWheelHitTestTarget@2 target_scroll_node_index=0 rect=[8,13 100x100]
FillRect@2 rect=[8,13 100x100] color=rgb(0, 128, 0)
Restore@0

Loading
Loading