From 2d1d4ad406228ef62ab078724cb7d1556e003d01 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Mon, 13 Jul 2026 16:03:19 +0800
Subject: [PATCH] chore: point independent project metadata to unified root

---
 C1.source/privatevoice.src/internal/engine/engine_darwin.go |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 57 insertions(+), 1 deletions(-)

diff --git a/C1.source/privatevoice.src/internal/engine/engine_darwin.go b/C1.source/privatevoice.src/internal/engine/engine_darwin.go
index 156b48e..0d44ab5 100755
--- a/C1.source/privatevoice.src/internal/engine/engine_darwin.go
+++ b/C1.source/privatevoice.src/internal/engine/engine_darwin.go
@@ -29,11 +29,13 @@
 type sherpaEngine struct {
 	recognizer  *sherpa.OfflineRecognizer
 	backendKind string
+	provider    string
 	hwInfo      string
 }
 
 type xasrStreamingEngine struct {
 	recognizer *sherpa.OnlineRecognizer
+	provider   string
 	hwInfo     string
 	mu         sync.Mutex
 }
@@ -69,6 +71,7 @@
 			return &sherpaEngine{
 				recognizer:  recognizer,
 				backendKind: resolved.BackendKind,
+				provider:    p.provider,
 				hwInfo:      info,
 			}, nil
 		}
@@ -93,6 +96,7 @@
 			logger.Info("Engine initialized: %s", info)
 			return &xasrStreamingEngine{
 				recognizer: recognizer,
+				provider:   p.provider,
 				hwInfo:     info,
 			}, nil
 		}
@@ -196,28 +200,72 @@
 }
 
 func (e *sherpaEngine) Recognize(samples []float32) (string, error) {
+	totalStart := time.Now()
+	streamStart := time.Now()
 	stream := sherpa.NewOfflineStream(e.recognizer)
+	streamMS := durationMS(time.Since(streamStart))
 	defer sherpa.DeleteOfflineStream(stream)
 
+	acceptStart := time.Now()
 	stream.AcceptWaveform(asrSampleRate, samples)
+	acceptMS := durationMS(time.Since(acceptStart))
 
+	decodeStart := time.Now()
 	e.recognizer.Decode(stream)
+	decodeMS := durationMS(time.Since(decodeStart))
+	resultStart := time.Now()
 	result := stream.GetResult()
+	resultMS := durationMS(time.Since(resultStart))
+	logger.Info(
+		"PERF engine_recognize_detail backend=%q provider=%q engine=%q samples=%d audio_ms=%d create_stream_ms=%d accept_ms=%d decode_ms=%d result_ms=%d total_ms=%d",
+		e.backendKind,
+		e.provider,
+		e.hwInfo,
+		len(samples),
+		audioDurationMS(samples),
+		streamMS,
+		acceptMS,
+		decodeMS,
+		resultMS,
+		durationMS(time.Since(totalStart)),
+	)
 
 	return result.Text, nil
 }
 
 func (e *xasrStreamingEngine) Recognize(samples []float32) (string, error) {
+	totalStart := time.Now()
+	sessionStart := time.Now()
 	session, err := e.NewStreamingSession()
 	if err != nil {
 		return "", err
 	}
+	sessionMS := durationMS(time.Since(sessionStart))
 	defer session.Close()
 
+	acceptStart := time.Now()
 	if _, err := session.Accept(samples); err != nil {
 		return "", err
 	}
-	return session.Finish()
+	acceptMS := durationMS(time.Since(acceptStart))
+	finishStart := time.Now()
+	text, err := session.Finish()
+	finishMS := durationMS(time.Since(finishStart))
+	if err == nil {
+		logger.Info(
+			"PERF engine_recognize_detail backend=%q provider=%q engine=%q samples=%d audio_ms=%d create_session_ms=%d accept_ms=%d finish_ms=%d total_ms=%d",
+			model.BackendXASRStreaming,
+			e.provider,
+			e.hwInfo,
+			len(samples),
+			audioDurationMS(samples),
+			sessionMS,
+			acceptMS,
+			finishMS,
+			durationMS(time.Since(totalStart)),
+		)
+	}
+	return text, err
 }
 
 func (e *xasrStreamingEngine) NewStreamingSession() (StreamingSession, error) {
@@ -316,6 +364,10 @@
 	return e.hwInfo
 }
 
+func (e *sherpaEngine) Provider() string {
+	return e.provider
+}
+
 func (e *sherpaEngine) ReleaseTailCaptureDelay() time.Duration {
 	if e.backendKind == model.BackendSenseVoice {
 		return senseVoiceReleaseTailDelay
@@ -327,6 +379,10 @@
 	return e.hwInfo
 }
 
+func (e *xasrStreamingEngine) Provider() string {
+	return e.provider
+}
+
 func (e *xasrStreamingEngine) ReleaseTailCaptureDelay() time.Duration {
 	return xasrReleaseTailDelay
 }

--
Gitblit v1.9.3