feat: 统计按键触发到正在录音的延迟并在日志中打印
每次长按进入 Recording 状态时打印本次延迟,并维护累计统计: ⏱ 按键→录音延迟: 123ms (平均: 120ms, 最小: 98ms, 最大: 155ms, 累计: 5次) 使用 QElapsedTimer 精确计时。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
ff7318efd6
commit
2152dcb296
@ -19,6 +19,8 @@
|
|||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QtConcurrent>
|
#include <QtConcurrent>
|
||||||
|
#include <QElapsedTimer>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
static const char* const kTag = "VoiceInputService";
|
static const char* const kTag = "VoiceInputService";
|
||||||
|
|
||||||
@ -48,6 +50,22 @@ VoiceInputService::VoiceInputService(ConfigManager* configManager,
|
|||||||
state_ = Recording;
|
state_ = Recording;
|
||||||
audioBuffer_.clear(); // 清除预录音期间的静音
|
audioBuffer_.clear(); // 清除预录音期间的静音
|
||||||
emit statusChanged("正在录音...");
|
emit statusChanged("正在录音...");
|
||||||
|
|
||||||
|
// 统计按键到录音延迟
|
||||||
|
if (latencyTracking_ && hotkeyLatencyTimer_.isValid()) {
|
||||||
|
qint64 latencyMs = hotkeyLatencyTimer_.elapsed();
|
||||||
|
totalKeyCount_++;
|
||||||
|
totalLatencyMs_ += latencyMs;
|
||||||
|
maxLatencyMs_ = std::max(maxLatencyMs_, (double)latencyMs);
|
||||||
|
minLatencyMs_ = std::min(minLatencyMs_, (double)latencyMs);
|
||||||
|
double avgMs = totalLatencyMs_ / totalKeyCount_;
|
||||||
|
LOG_INFO(kTag, QString("⏱ 按键→录音延迟: %1ms (平均: %2ms, 最小: %3ms, 最大: %4ms, 累计: %5次)")
|
||||||
|
.arg(latencyMs).arg(avgMs, 0, 'f', 0)
|
||||||
|
.arg(minLatencyMs_, 0, 'f', 0).arg(maxLatencyMs_, 0, 'f', 0)
|
||||||
|
.arg(totalKeyCount_));
|
||||||
|
latencyTracking_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
LOG_DEBUG(kTag, "PreRecording → Recording (灯保持 ON,开始录音)");
|
LOG_DEBUG(kTag, "PreRecording → Recording (灯保持 ON,开始录音)");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -156,6 +174,10 @@ void VoiceInputService::onHotkeyActivated() {
|
|||||||
recording_ = true;
|
recording_ = true;
|
||||||
audioBuffer_.clear();
|
audioBuffer_.clear();
|
||||||
|
|
||||||
|
// 启动延迟统计
|
||||||
|
hotkeyLatencyTimer_.start();
|
||||||
|
latencyTracking_ = true;
|
||||||
|
|
||||||
int deviceIndex = configManager_->get("audio.input_device").toInt();
|
int deviceIndex = configManager_->get("audio.input_device").toInt();
|
||||||
int sampleRate = configManager_->get("stt.sample_rate").toInt();
|
int sampleRate = configManager_->get("stt.sample_rate").toInt();
|
||||||
int bufferSizeMs = configManager_->get("audio.buffer_size_ms").toInt();
|
int bufferSizeMs = configManager_->get("audio.buffer_size_ms").toInt();
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <QElapsedTimer>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@ -80,6 +81,15 @@ private:
|
|||||||
QTimer* longPressTimer_ = nullptr;
|
QTimer* longPressTimer_ = nullptr;
|
||||||
QTimer* cooldownTimer_ = nullptr;
|
QTimer* cooldownTimer_ = nullptr;
|
||||||
|
|
||||||
|
// 按键到录音延迟统计
|
||||||
|
QElapsedTimer hotkeyLatencyTimer_;
|
||||||
|
bool latencyTracking_ = false;
|
||||||
|
|
||||||
|
int totalKeyCount_ = 0;
|
||||||
|
double totalLatencyMs_ = 0;
|
||||||
|
double maxLatencyMs_ = 0;
|
||||||
|
double minLatencyMs_ = 9999;
|
||||||
|
|
||||||
void startRecording();
|
void startRecording();
|
||||||
void stopRecordingAndTranscribe();
|
void stopRecordingAndTranscribe();
|
||||||
void simulateCapsLock();
|
void simulateCapsLock();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user