From ddbd0b7ac03c8e97d8ba54708d61e8c0c96ad160 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 01 Jul 2026 23:28:45 +0800
Subject: [PATCH] Stop tracking local release artifacts

---
 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