From eee74044ff3b4182f9dece46aeafabb979bc728b Mon Sep 17 00:00:00 2001 From: Luke De Feo Date: Tue, 18 Apr 2023 08:01:50 -0700 Subject: [PATCH] Start sending parent id Summary: Since subtree update is effectively a frame dump its a lot easier to send the parent ID. This will save having figure it out on the client which is somewhat expensive and is needed for bloks Reviewed By: lblasa Differential Revision: D45048023 fbshipit-source-id: 90c4888df063de0aa69c9b93c86d9891e30becbe --- .../flipper/plugins/uidebugger/model/Node.kt | 1 + .../traversal/PartialLayoutTraversal.kt | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt index b6083ea15..05995895a 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Node.kt @@ -12,6 +12,7 @@ import com.facebook.flipper.plugins.uidebugger.descriptors.Id @kotlinx.serialization.Serializable data class Node( val id: Id, + val parent: Id?, val qualifiedName: String, val name: String, val attributes: Map, diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt index b86e21cab..bd9a81b80 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/traversal/PartialLayoutTraversal.kt @@ -36,13 +36,14 @@ class PartialLayoutTraversal( val visited = mutableListOf>() val observableRoots = mutableListOf() - val stack = mutableListOf() - stack.add(root) + // cur and parent Id + val stack = mutableListOf>() + stack.add(Pair(root, null)) val shallow = mutableSetOf() while (stack.isNotEmpty()) { - val node = stack.removeLast() + val (node, parentId) = stack.removeLast() try { // If we encounter a node that has it own observer, don't traverse @@ -53,11 +54,13 @@ class PartialLayoutTraversal( val descriptor = descriptorRegister.descriptorForClassUnsafe(node::class.java).asAny() + val curId = descriptor.getId(node) if (shallow.contains(node)) { visited.add( Immediate( Node( - descriptor.getId(node), + curId, + parentId, descriptor.getQualifiedName(node), descriptor.getName(node), emptyMap(), @@ -86,7 +89,7 @@ class PartialLayoutTraversal( children.forEach { child -> val childDescriptor = descriptorRegister.descriptorForClassUnsafe(child.javaClass) childrenIds.add(childDescriptor.getId(child)) - stack.add(child) + stack.add(Pair(child, curId)) // If there is an active child then don't traverse it if (activeChild != null && activeChild != child) { shallow.add(child) @@ -99,7 +102,8 @@ class PartialLayoutTraversal( visited.add( attributes.map { attrs -> Node( - descriptor.getId(node), + curId, + parentId, descriptor.getQualifiedName(node), descriptor.getName(node), attrs,