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

---
 C1.source/Sources/Aligner/AlignerApplicationDelegate.swift |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift b/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
index 9904f96..83d35ba 100644
--- a/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
+++ b/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
@@ -27,6 +27,7 @@
     private var statusItem: NSStatusItem?
     private var verticalWaterfallViewModeMenuItems: [NSMenuItem] = []
     private var horizontalWaterfallViewModeMenuItems: [NSMenuItem] = []
+    private let performanceDiagnosticsExporter = PerformanceDiagnosticsExporter()
 
     func applicationDidFinishLaunching(_ notification: Notification) {
         let bundlePathSummary = DevelopmentDiagnostics.pathSummary(Bundle.main.bundlePath)
@@ -104,6 +105,7 @@
         menu.addItem(menuItem(title: "Settings...", action: #selector(showSettingsFromMenu), keyEquivalent: ""))
         menu.addItem(.separator())
         menu.addItem(menuItem(title: "Check Permissions...", action: #selector(showPermissions), keyEquivalent: ""))
+        menu.addItem(menuItem(title: "Export Performance Diagnostics...", action: #selector(exportPerformanceDiagnostics), keyEquivalent: ""))
         menu.addItem(.separator())
         menu.addItem(menuItem(title: "Show Quick Switch", action: #selector(showQuickSwitchFromMenu), keyEquivalent: ""))
         menu.addItem(menuItem(title: "Hide Quick Switch", action: #selector(hideQuickSwitchFromMenu), keyEquivalent: ""))
@@ -139,6 +141,7 @@
         appMenu.addItem(menuItem(title: "Settings...", action: #selector(showSettingsFromMenu), keyEquivalent: ","))
         appMenu.addItem(.separator())
         appMenu.addItem(menuItem(title: "Check Permissions...", action: #selector(showPermissions), keyEquivalent: ""))
+        appMenu.addItem(menuItem(title: "Export Performance Diagnostics...", action: #selector(exportPerformanceDiagnostics), keyEquivalent: ""))
         appMenu.addItem(menuItem(title: "Show Quick Switch", action: #selector(showQuickSwitchFromMenu), keyEquivalent: ""))
         appMenu.addItem(menuItem(title: "Hide Quick Switch", action: #selector(hideQuickSwitchFromMenu), keyEquivalent: ""))
         appMenu.addItem(quickSwitchViewModeMenuItem())
@@ -890,6 +893,7 @@
         return [
             "hasAboutItem": statusItem?.menu?.item(withTitle: "About Aligner...") != nil,
             "hasSettingsItem": statusItem?.menu?.item(withTitle: "Settings...") != nil,
+            "hasExportPerformanceDiagnosticsItem": statusItem?.menu?.item(withTitle: "Export Performance Diagnostics...") != nil,
             "hasQuickSwitchViewSubmenu": statusItem?.menu?.item(withTitle: "Quick Switch View")?.submenu != nil,
             "hasVerticalColumnsItem": verticalItem != nil,
             "hasHorizontalWaterfallItem": horizontalItem != nil,
@@ -907,6 +911,7 @@
             "hasAppMenu": appMenu != nil,
             "hasAboutItem": appMenu?.item(withTitle: "About Aligner...") != nil,
             "hasSettingsItem": appMenu?.item(withTitle: "Settings...") != nil,
+            "hasExportPerformanceDiagnosticsItem": appMenu?.item(withTitle: "Export Performance Diagnostics...") != nil,
             "settingsKeyEquivalent": appMenu?.item(withTitle: "Settings...")?.keyEquivalent ?? "",
             "hasQuickSwitchViewSubmenuInAppMenu": appMenu?.item(withTitle: "Quick Switch View")?.submenu != nil,
             "hasQuickSwitchViewSubmenuInViewMenu": viewMenu?.item(withTitle: "Quick Switch View")?.submenu != nil
@@ -948,6 +953,26 @@
         openSettingsWindow(source: "menu")
     }
 
+    @objc private func exportPerformanceDiagnostics() {
+        let versionBuild = appVersionBuild()
+        let preferences = preferenceStore.read()
+        let quickSwitch = quickSwitchSessionController?.performanceDiagnosticSummary() ?? [
+            "snapshotLoaded": false,
+            "quickSwitchVisible": false,
+            "applicationCount": 0,
+            "windowCount": 0,
+            "applications": []
+        ]
+        performanceDiagnosticsExporter.export(
+            version: versionBuild.version,
+            build: versionBuild.build,
+            preferences: preferences,
+            accessibility: permissionStatusString(accessibilityStatus()),
+            screenRecording: permissionStatusString(screenRecordingStatus()),
+            quickSwitch: quickSwitch
+        )
+    }
+
     private func showSettingsFromQuickSwitch() {
         openSettingsWindow(source: "quickSwitch")
     }

--
Gitblit v1.9.3