Skip to content

Commit f884627

Browse files
committed
cdp: sent setchildnodes once per node
1 parent 9373cf9 commit f884627

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

src/cdp/Node.zig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const Node = @This();
2929

3030
id: Id,
3131
_node: *parser.Node,
32+
set_child_nodes_event: bool,
3233

3334
// Whenever we send a node to the client, we register it here for future lookup.
3435
// We maintain a node -> id and id -> node lookup.
@@ -85,6 +86,7 @@ pub const Registry = struct {
8586
node.* = .{
8687
._node = n,
8788
.id = id,
89+
.set_child_nodes_event = false,
8890
};
8991

9092
node_lookup_gop.value_ptr.* = node;

src/cdp/domains/dom.zig

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ fn performSearch(cmd: anytype) !void {
8989
// dispatchSetChildNodes send the setChildNodes event for the whole DOM tree
9090
// hierarchy of each nodes.
9191
// We dispatch event in the reverse order: from the top level to the direct parents.
92-
// TODO we should dispatch a node only if it has never been sent.
92+
// We should dispatch a node only if it has never been sent.
9393
fn dispatchSetChildNodes(cmd: anytype, nodes: []*parser.Node) !void {
9494
const arena = cmd.arena;
9595
const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded;
@@ -103,6 +103,7 @@ fn dispatchSetChildNodes(cmd: anytype, nodes: []*parser.Node) !void {
103103

104104
// Register the node.
105105
const node = try bc.node_registry.register(p);
106+
if (node.set_child_nodes_event) break;
106107
try parents.append(arena, node);
107108
n = p;
108109
}
@@ -111,14 +112,13 @@ fn dispatchSetChildNodes(cmd: anytype, nodes: []*parser.Node) !void {
111112
const plen = parents.items.len;
112113
if (plen == 0) return;
113114

114-
var uniq: std.AutoHashMapUnmanaged(Node.Id, bool) = .{};
115115
var i: usize = plen;
116116
while (i > 0) {
117117
i -= 1;
118118
const node = parents.items[i];
119+
if (node.set_child_nodes_event) continue;
119120

120-
if (uniq.contains(node.id)) continue;
121-
try uniq.putNoClobber(arena, node.id, true);
121+
node.set_child_nodes_event = true;
122122

123123
// If the node has no parent, it's the root node.
124124
// We don't dispatch event for it because we assume the root node is

0 commit comments

Comments
 (0)