From 86f0b4bd20cdec86dfb5bdb7978d1f6ff4af111a Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Fri, 14 Aug 2026 22:41:54 +0800
Subject: [PATCH] [verified] feat: export performance diagnostics
---
C3.tools/round1-app-column-alignment-fixture-qa.sh | 64 ++++++++++++++++++++++---------
1 files changed, 45 insertions(+), 19 deletions(-)
diff --git a/C3.tools/round1-app-column-alignment-fixture-qa.sh b/C3.tools/round1-app-column-alignment-fixture-qa.sh
index d2432dc..73a3bd5 100755
--- a/C3.tools/round1-app-column-alignment-fixture-qa.sh
+++ b/C3.tools/round1-app-column-alignment-fixture-qa.sh
@@ -28,9 +28,11 @@
aligner_pids_for_current_app() {
ps -axo pid=,args= | while read -r pid command; do
- case "$command" in
- "$APP/Contents/MacOS/Aligner"*) echo "$pid" ;;
- esac
+ if [[ "$command" == "$APP/Contents/MacOS/Aligner"* ]] \
+ || [[ "$command" == "/Applications/Aligner.app/Contents/MacOS/Aligner"* ]] \
+ || [[ "$command" == "$HOME/Applications/Aligner.app/Contents/MacOS/Aligner"* ]]; then
+ echo "$pid"
+ fi
done
}
@@ -56,19 +58,40 @@
stop_current_aligner
}
-keyboard_right_sequence() {
+keyboard_index_sequence() {
local target_index="$1"
- local sequence=""
+ local symbols="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- for ((index = 0; index < target_index; index++)); do
- if [ -n "$sequence" ]; then
- sequence="$sequence,right"
+ if [ "$target_index" -ge "${#symbols}" ]; then
+ fail "keyboard index sequence does not support target index $target_index"
+ fi
+
+ echo "${symbols:$target_index:1}"
+}
+
+normalize_keyboard_sequence() {
+ local sequence="$1"
+ local symbols="1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ local normalized=""
+ local IFS=,
+
+ for raw_part in $sequence; do
+ local part
+ part="$(printf "%s" "$raw_part" | tr '[:lower:]' '[:upper:]')"
+ if [ "${#part}" -eq 1 ] && [[ "$symbols" == *"$part"* ]]; then
+ part="app:$part"
else
- sequence="right"
+ part="$raw_part"
+ fi
+
+ if [ -n "$normalized" ]; then
+ normalized="$normalized,$part"
+ else
+ normalized="$part"
fi
done
- echo "$sequence"
+ echo "$normalized"
}
wait_for_report() {
@@ -194,12 +217,14 @@
elif mode == "keyboard":
require(root.get("keyboardCommandsApplied") == expected_key_sequence, "debug key sequence must be applied in order")
require(root.get("lastKeyboardCommand") == expected_key_sequence[-1], "last keyboard command must match the alignment target")
- require(root.get("selectedAppGroupIndex") == target_app_index, "keyboard focus must select the target appGroupIndex")
- require(item.get("isSelected") is True, "target App Shelf item must expose selected state")
- require("selected" in item.get("visualStates", []), "target App Shelf item must expose selected visual state")
- cards = column.get("cards", [])
- require(cards, "target Waterfall column must include cards")
- require(root.get("selectedWindowID") == cards[0].get("windowID"), "right-arrow focus into target column must select its first window")
+ require(root.get("keyboardFocusedAppGroupIndex") == target_app_index, "keyboard App focus must target the requested App")
+ require(root.get("hoveredAppGroupIndex") == target_app_index, "keyboard App focus must become hovered appGroupIndex")
+ require(root.get("hoverTargetKind") == "app", "keyboard App focus must expose an App hover target")
+ require(root.get("hoverTargetSource") == "keyboard", "keyboard App focus must be reported as keyboard sourced")
+ require(item.get("isHovered") is True, "target App Shelf item must expose hover state")
+ require("hover" in item.get("visualStates", []), "target App Shelf item must expose hover visual state")
+ require(item.get("isSelected") is False, "keyboard App focus must not immediately move selected window")
+ require(root.get("selectionChangedByLastCommand") is False, "keyboard App focus must not change selected window")
require(root.get("lastCommittedWindowID") is None, "keyboard alignment without Enter must not commit a window")
else:
require(False, f"unknown alignment mode {mode!r}")
@@ -254,6 +279,7 @@
local args=(
--round0-skip-permissions
--round01-open-quick-switch
+ --round01-waterfall-view-mode=vertical
--round01-fixture-app-count="$app_count"
--round01-fixture-windows-per-app="$windows_per_app"
--round01-debug-overlay-width="$overlay_width"
@@ -265,7 +291,7 @@
expected_mouse_sequence="$sequence"
args+=(--round01-debug-mouse-sequence="$sequence")
elif [ "$mode" = "keyboard" ]; then
- expected_key_sequence="$sequence"
+ expected_key_sequence="$(normalize_keyboard_sequence "$sequence")"
args+=(--round01-debug-key-sequence="$sequence")
else
fail "unknown fixture mode: $mode"
@@ -305,8 +331,8 @@
REGULAR_RIGHT_INDEX=$((FIXTURE_APP_COUNT - 1))
NARROW_MIDDLE_INDEX=$((NARROW_FIXTURE_APP_COUNT / 2))
NARROW_RIGHT_INDEX=$((NARROW_FIXTURE_APP_COUNT - 1))
-REGULAR_KEY_SEQUENCE="$(keyboard_right_sequence "$REGULAR_RIGHT_INDEX")"
-NARROW_KEY_SEQUENCE="$(keyboard_right_sequence "$NARROW_RIGHT_INDEX")"
+REGULAR_KEY_SEQUENCE="$(keyboard_index_sequence "$REGULAR_RIGHT_INDEX")"
+NARROW_KEY_SEQUENCE="$(keyboard_index_sequence "$NARROW_RIGHT_INDEX")"
trap cleanup EXIT
stop_current_aligner
--
Gitblit v1.9.3