From 9d4f977026bbb4516f8cc97f715c0dc28bf2a13f Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Mon, 29 Jun 2026 20:16:29 +0800
Subject: [PATCH] Add performance diagnostics build
---
privatevoice.src/internal/input/paste_darwin.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/privatevoice.src/internal/input/paste_darwin.go b/privatevoice.src/internal/input/paste_darwin.go
index bcd8aa2..3a12be2 100755
--- a/privatevoice.src/internal/input/paste_darwin.go
+++ b/privatevoice.src/internal/input/paste_darwin.go
@@ -99,6 +99,7 @@
"sync"
"time"
"unsafe"
+ "voicesnap/internal/logger"
)
const (
@@ -129,15 +130,30 @@
}
func (p *darwinPaster) Paste(text string, keepClipboard bool) error {
+ pasteStart := time.Now()
+ textRunes := len([]rune(text))
+
+ permissionStart := time.Now()
if C.ensureInputPermission() == 0 {
+ logger.Info(
+ "PERF paste_clipboard_done result=permission_error permission_ms=%d text_runes=%d keep_clipboard=%t total_ms=%d",
+ time.Since(permissionStart).Milliseconds(),
+ textRunes,
+ keepClipboard,
+ time.Since(pasteStart).Milliseconds(),
+ )
return fmt.Errorf("accessibility permission is required to paste")
}
+ permissionElapsed := time.Since(permissionStart)
state := &globalDarwinPasteState
+ stateLockStart := time.Now()
state.mu.Lock()
+ stateLockElapsed := time.Since(stateLockStart)
state.generation++
generation := state.generation
+ snapshotStart := time.Now()
originalClipboard := currentDarwinClipboardSnapshot()
if !keepClipboard {
originalClipboard = resolveDarwinRestoreTarget(
@@ -147,21 +163,53 @@
state.restoreTo,
)
}
+ snapshotElapsed := time.Since(snapshotStart)
cstr := C.CString(text)
defer C.free(unsafe.Pointer(cstr))
+ setClipboardStart := time.Now()
C.setClipboardText(cstr)
+ setClipboardElapsed := time.Since(setClipboardStart)
+
+ verifyStart := time.Now()
if !waitForDarwinClipboardText(text, darwinClipboardVerifyTimeout) {
+ verifyElapsed := time.Since(verifyStart)
state.pendingRestore = false
state.mu.Unlock()
+ logger.Info(
+ "PERF paste_clipboard_done result=verify_failed permission_ms=%d state_lock_ms=%d snapshot_ms=%d set_ms=%d verify_ms=%d text_runes=%d keep_clipboard=%t total_ms=%d",
+ permissionElapsed.Milliseconds(),
+ stateLockElapsed.Milliseconds(),
+ snapshotElapsed.Milliseconds(),
+ setClipboardElapsed.Milliseconds(),
+ verifyElapsed.Milliseconds(),
+ textRunes,
+ keepClipboard,
+ time.Since(pasteStart).Milliseconds(),
+ )
return fmt.Errorf("clipboard verification failed before paste")
}
+ verifyElapsed := time.Since(verifyStart)
+ cmdVStart := time.Now()
C.simulateCmdV()
+ cmdVElapsed := time.Since(cmdVStart)
if keepClipboard {
state.pendingRestore = false
state.mu.Unlock()
+ logger.Info(
+ "PERF paste_clipboard_done result=success permission_ms=%d state_lock_ms=%d snapshot_ms=%d set_ms=%d verify_ms=%d cmdv_ms=%d text_runes=%d keep_clipboard=%t total_ms=%d",
+ permissionElapsed.Milliseconds(),
+ stateLockElapsed.Milliseconds(),
+ snapshotElapsed.Milliseconds(),
+ setClipboardElapsed.Milliseconds(),
+ verifyElapsed.Milliseconds(),
+ cmdVElapsed.Milliseconds(),
+ textRunes,
+ keepClipboard,
+ time.Since(pasteStart).Milliseconds(),
+ )
return nil
}
@@ -171,6 +219,18 @@
state.mu.Unlock()
go restoreDarwinClipboardAfterPaste(generation, text, originalClipboard)
+ logger.Info(
+ "PERF paste_clipboard_done result=success permission_ms=%d state_lock_ms=%d snapshot_ms=%d set_ms=%d verify_ms=%d cmdv_ms=%d text_runes=%d keep_clipboard=%t total_ms=%d",
+ permissionElapsed.Milliseconds(),
+ stateLockElapsed.Milliseconds(),
+ snapshotElapsed.Milliseconds(),
+ setClipboardElapsed.Milliseconds(),
+ verifyElapsed.Milliseconds(),
+ cmdVElapsed.Milliseconds(),
+ textRunes,
+ keepClipboard,
+ time.Since(pasteStart).Milliseconds(),
+ )
return nil
}
--
Gitblit v1.9.3