From 78e84a0cc3cf4cea930a5f32d94a2e935a1393ec Mon Sep 17 00:00:00 2001 From: Luke De Feo Date: Thu, 29 Sep 2022 05:31:18 -0700 Subject: [PATCH] added metrics for snapshot Reviewed By: lblasa Differential Revision: D39886448 fbshipit-source-id: b229f6947d199026c6e4bdc89def6ac0a0fa9d0a --- .../plugins/uidebugger/core/NativeScanScheduler.kt | 1 + .../flipper/plugins/uidebugger/model/Events.kt | 1 + .../plugins/uidebugger/observers/TreeObserver.kt | 13 +++++++++++-- .../uidebugger/observers/TreeObserverManager.kt | 2 ++ .../public/ui-debugger/components/PerfStats.tsx | 9 ++++++++- .../ui-debugger/components/Visualization2D.tsx | 1 + desktop/plugins/public/ui-debugger/types.tsx | 1 + 7 files changed, 25 insertions(+), 3 deletions(-) diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/NativeScanScheduler.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/NativeScanScheduler.kt index 9fa5a10ee..2a3b1e6a0 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/NativeScanScheduler.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/core/NativeScanScheduler.kt @@ -66,6 +66,7 @@ class NativeScanScheduler(val context: Context) : Scheduler.Task { input.txId, "FullScan", input.scanStart, + input.scanStart, input.scanEnd, input.scanEnd, serializationEnd, diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Events.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Events.kt index 6b1b08120..57b8f6920 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Events.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/model/Events.kt @@ -43,6 +43,7 @@ data class PerfStatsEvent( val observerType: String, val start: Long, val traversalComplete: Long, + val snapshotComplete: Long, val queuingComplete: Long, val serializationComplete: Long, val socketComplete: Long, diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserver.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserver.kt index 23162820c..16ea5a776 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserver.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserver.kt @@ -81,6 +81,8 @@ abstract class TreeObserver { Log.d(LogTag, "For Observer ${this.type} Sending ${visitedNodes.size}") + val traversalCompleteTime = System.currentTimeMillis() + if (snapshotBitmap != null) { @Suppress("unchecked_cast") val descriptor = @@ -89,10 +91,17 @@ abstract class TreeObserver { descriptor.getSnapshot(root, snapshotBitmap.bitmap) } - val endTimestamp = System.currentTimeMillis() + val snapshotCompleteTime = System.currentTimeMillis() + context.treeObserverManager.enqueueUpdate( SubtreeUpdate( - type, root.nodeId(), visitedNodes, startTimestamp, endTimestamp, snapshotBitmap)) + type, + root.nodeId(), + visitedNodes, + startTimestamp, + traversalCompleteTime, + snapshotCompleteTime, + snapshotBitmap)) } fun cleanUpRecursive() { diff --git a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserverManager.kt b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserverManager.kt index d09babb98..3bfa2655d 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserverManager.kt +++ b/android/src/main/java/com/facebook/flipper/plugins/uidebugger/observers/TreeObserverManager.kt @@ -31,6 +31,7 @@ data class SubtreeUpdate( val nodes: List, val startTime: Long, val traversalCompleteTime: Long, + val snapshotComplete: Long, val snapshot: BitmapPool.ReusableBitmap? ) @@ -104,6 +105,7 @@ class TreeObserverManager(val context: Context) { observerType = treeUpdate.observerType, start = treeUpdate.startTime, traversalComplete = treeUpdate.traversalCompleteTime, + snapshotComplete = treeUpdate.snapshotComplete, queuingComplete = onWorkerThread, serializationComplete = serializationEnd, socketComplete = socketEnd, diff --git a/desktop/plugins/public/ui-debugger/components/PerfStats.tsx b/desktop/plugins/public/ui-debugger/components/PerfStats.tsx index 1064764c6..3743f243b 100644 --- a/desktop/plugins/public/ui-debugger/components/PerfStats.tsx +++ b/desktop/plugins/public/ui-debugger/components/PerfStats.tsx @@ -49,11 +49,18 @@ const columns: DataTableColumn[] = [ return formatDiff(row.start, row.traversalComplete); }, }, + { + key: 'snapshotComplete', + title: 'Snapshot time (Main thread)', + onRender: (row: PerfStatsEvent) => { + return formatDiff(row.traversalComplete, row.snapshotComplete); + }, + }, { key: 'queuingComplete', title: 'Queuing time', onRender: (row: PerfStatsEvent) => { - return formatDiff(row.traversalComplete, row.queuingComplete); + return formatDiff(row.snapshotComplete, row.queuingComplete); }, }, { diff --git a/desktop/plugins/public/ui-debugger/components/Visualization2D.tsx b/desktop/plugins/public/ui-debugger/components/Visualization2D.tsx index f1db53c73..84107517e 100644 --- a/desktop/plugins/public/ui-debugger/components/Visualization2D.tsx +++ b/desktop/plugins/public/ui-debugger/components/Visualization2D.tsx @@ -164,6 +164,7 @@ function Visualization2DNode({ top: toPx(bounds.y), width: toPx(bounds.width), height: toPx(bounds.height), + opacity: isSelected || isHovered ? 0.5 : 1, backgroundColor: isSelected ? theme.primaryColor : isHovered diff --git a/desktop/plugins/public/ui-debugger/types.tsx b/desktop/plugins/public/ui-debugger/types.tsx index 8ae6a3c4b..773bd8c24 100644 --- a/desktop/plugins/public/ui-debugger/types.tsx +++ b/desktop/plugins/public/ui-debugger/types.tsx @@ -26,6 +26,7 @@ export type PerfStatsEvent = { observerType: string; start: number; traversalComplete: number; + snapshotComplete: number; serializationComplete: number; queuingComplete: number; socketComplete: number;