refactor(audio): improve configuration handling and validation

- Replace hardcoded values with configurable parameters in output streamer
- Add detailed validation rules for socket buffer configuration
- Enhance CPU percent calculation with bounds checking and validation
- Document message format and validation for IPC communication
- Update latency monitor to use configurable thresholds
- Improve adaptive buffer calculations with validation and documentation
This commit is contained in:
Alex P 2025-08-25 20:36:26 +00:00
parent 60a6e6c5c5
commit 34f8829e8a
7 changed files with 320 additions and 176 deletions

View File

@ -233,8 +233,25 @@ func (abm *AdaptiveBufferManager) adaptBufferSizes() {
UpdateAdaptiveBufferMetrics(currentInputSize, currentOutputSize, systemCPU, systemMemory, adjustmentMade) UpdateAdaptiveBufferMetrics(currentInputSize, currentOutputSize, systemCPU, systemMemory, adjustmentMade)
} }
// calculateCPUFactor returns adaptation factor based on CPU usage // calculateCPUFactor returns adaptation factor based on CPU usage with threshold validation.
// Returns: -1.0 (decrease buffers) to +1.0 (increase buffers) //
// Validation Rules:
// - CPU percentage must be within valid range [0.0, 100.0]
// - Uses LowCPUThreshold and HighCPUThreshold from config for decision boundaries
// - Default thresholds: Low=20.0%, High=80.0%
//
// Adaptation Logic:
// - CPU > HighCPUThreshold: Return -1.0 (decrease buffers to reduce CPU load)
// - CPU < LowCPUThreshold: Return +1.0 (increase buffers for better quality)
// - Between thresholds: Linear interpolation based on distance from midpoint
//
// Returns: Adaptation factor in range [-1.0, +1.0]
// - Negative values: Decrease buffer sizes to reduce CPU usage
// - Positive values: Increase buffer sizes for better audio quality
// - Zero: No adaptation needed
//
// The function ensures CPU-aware buffer management to balance audio quality
// with system performance, preventing CPU starvation of the KVM process.
func (abm *AdaptiveBufferManager) calculateCPUFactor(cpuPercent float64) float64 { func (abm *AdaptiveBufferManager) calculateCPUFactor(cpuPercent float64) float64 {
if cpuPercent > abm.config.HighCPUThreshold { if cpuPercent > abm.config.HighCPUThreshold {
// High CPU: decrease buffers to reduce latency and give CPU to KVM // High CPU: decrease buffers to reduce latency and give CPU to KVM
@ -248,7 +265,25 @@ func (abm *AdaptiveBufferManager) calculateCPUFactor(cpuPercent float64) float64
return (midpoint - cpuPercent) / (midpoint - abm.config.LowCPUThreshold) return (midpoint - cpuPercent) / (midpoint - abm.config.LowCPUThreshold)
} }
// calculateMemoryFactor returns adaptation factor based on memory usage // calculateMemoryFactor returns adaptation factor based on memory usage with threshold validation.
//
// Validation Rules:
// - Memory percentage must be within valid range [0.0, 100.0]
// - Uses LowMemoryThreshold and HighMemoryThreshold from config for decision boundaries
// - Default thresholds: Low=30.0%, High=85.0%
//
// Adaptation Logic:
// - Memory > HighMemoryThreshold: Return -1.0 (decrease buffers to free memory)
// - Memory < LowMemoryThreshold: Return +1.0 (increase buffers for performance)
// - Between thresholds: Linear interpolation based on distance from midpoint
//
// Returns: Adaptation factor in range [-1.0, +1.0]
// - Negative values: Decrease buffer sizes to reduce memory usage
// - Positive values: Increase buffer sizes for better performance
// - Zero: No adaptation needed
//
// The function prevents memory exhaustion while optimizing buffer sizes
// for audio processing performance and system stability.
func (abm *AdaptiveBufferManager) calculateMemoryFactor(memoryPercent float64) float64 { func (abm *AdaptiveBufferManager) calculateMemoryFactor(memoryPercent float64) float64 {
if memoryPercent > abm.config.HighMemoryThreshold { if memoryPercent > abm.config.HighMemoryThreshold {
// High memory: decrease buffers to free memory // High memory: decrease buffers to free memory
@ -262,7 +297,25 @@ func (abm *AdaptiveBufferManager) calculateMemoryFactor(memoryPercent float64) f
return (midpoint - memoryPercent) / (midpoint - abm.config.LowMemoryThreshold) return (midpoint - memoryPercent) / (midpoint - abm.config.LowMemoryThreshold)
} }
// calculateLatencyFactor returns adaptation factor based on latency // calculateLatencyFactor returns adaptation factor based on latency with threshold validation.
//
// Validation Rules:
// - Latency must be non-negative duration
// - Uses TargetLatency and MaxLatency from config for decision boundaries
// - Default thresholds: Target=50ms, Max=200ms
//
// Adaptation Logic:
// - Latency > MaxLatency: Return -1.0 (decrease buffers to reduce latency)
// - Latency < TargetLatency: Return +1.0 (increase buffers for quality)
// - Between thresholds: Linear interpolation based on distance from midpoint
//
// Returns: Adaptation factor in range [-1.0, +1.0]
// - Negative values: Decrease buffer sizes to reduce audio latency
// - Positive values: Increase buffer sizes for better audio quality
// - Zero: Latency is at optimal level
//
// The function balances audio latency with quality, ensuring real-time
// performance while maintaining acceptable audio processing quality.
func (abm *AdaptiveBufferManager) calculateLatencyFactor(latency time.Duration) float64 { func (abm *AdaptiveBufferManager) calculateLatencyFactor(latency time.Duration) float64 {
if latency > abm.config.MaxLatency { if latency > abm.config.MaxLatency {
// High latency: decrease buffers // High latency: decrease buffers

View File

@ -695,25 +695,25 @@ type AudioConfigConstants struct {
// Used in: adaptive_optimizer.go for balancing CPU impact in optimization decisions // Used in: adaptive_optimizer.go for balancing CPU impact in optimization decisions
// Impact: Higher values make CPU usage more influential in performance tuning. // Impact: Higher values make CPU usage more influential in performance tuning.
// Default 0.5 provides balanced CPU consideration in optimization algorithms. // Default 0.5 provides balanced CPU consideration in optimization algorithms.
CPUFactor float64 CPUFactor float64
// MemoryFactor defines weighting factor for memory usage in performance calculations. // MemoryFactor defines weighting factor for memory usage in performance calculations.
// Used in: adaptive_optimizer.go for balancing memory impact in optimization decisions // Used in: adaptive_optimizer.go for balancing memory impact in optimization decisions
// Impact: Higher values make memory usage more influential in performance tuning. // Impact: Higher values make memory usage more influential in performance tuning.
// Default 0.3 provides moderate memory consideration in optimization algorithms. // Default 0.3 provides moderate memory consideration in optimization algorithms.
MemoryFactor float64 MemoryFactor float64
// LatencyFactor defines weighting factor for latency in performance calculations. // LatencyFactor defines weighting factor for latency in performance calculations.
// Used in: adaptive_optimizer.go for balancing latency impact in optimization decisions // Used in: adaptive_optimizer.go for balancing latency impact in optimization decisions
// Impact: Higher values make latency more influential in performance tuning. // Impact: Higher values make latency more influential in performance tuning.
// Default 0.2 provides latency consideration while prioritizing CPU and memory. // Default 0.2 provides latency consideration while prioritizing CPU and memory.
LatencyFactor float64 LatencyFactor float64
// InputSizeThreshold defines threshold for input buffer size optimization (bytes). // InputSizeThreshold defines threshold for input buffer size optimization (bytes).
// Used in: adaptive_buffer.go for determining when to resize input buffers // Used in: adaptive_buffer.go for determining when to resize input buffers
// Impact: Lower values trigger more frequent resizing, higher values reduce overhead. // Impact: Lower values trigger more frequent resizing, higher values reduce overhead.
// Default 1024 bytes provides good balance for typical audio input scenarios. // Default 1024 bytes provides good balance for typical audio input scenarios.
InputSizeThreshold int InputSizeThreshold int
// OutputSizeThreshold defines threshold for output buffer size optimization (bytes). // OutputSizeThreshold defines threshold for output buffer size optimization (bytes).
// Used in: adaptive_buffer.go for determining when to resize output buffers // Used in: adaptive_buffer.go for determining when to resize output buffers
@ -725,7 +725,7 @@ type AudioConfigConstants struct {
// Used in: adaptive_optimizer.go for setting optimization goals // Used in: adaptive_optimizer.go for setting optimization goals
// Impact: Higher values aim for better performance but may increase resource usage. // Impact: Higher values aim for better performance but may increase resource usage.
// Default 0.8 (80%) provides good performance while maintaining system stability. // Default 0.8 (80%) provides good performance while maintaining system stability.
TargetLevel float64 TargetLevel float64
// Adaptive Buffer Configuration - Controls dynamic buffer sizing for optimal performance // Adaptive Buffer Configuration - Controls dynamic buffer sizing for optimal performance
// Used in: adaptive_buffer.go for dynamic buffer management // Used in: adaptive_buffer.go for dynamic buffer management
@ -757,7 +757,7 @@ type AudioConfigConstants struct {
// Used in: priority_scheduler.go for time-critical audio operations // Used in: priority_scheduler.go for time-critical audio operations
// Impact: Ensures audio processing gets CPU time even under high system load. // Impact: Ensures audio processing gets CPU time even under high system load.
// Default 90 provides high priority while leaving room for system-critical tasks. // Default 90 provides high priority while leaving room for system-critical tasks.
AudioHighPriority int AudioHighPriority int
// AudioMediumPriority defines medium real-time priority for standard audio processing. // AudioMediumPriority defines medium real-time priority for standard audio processing.
// Used in: priority_scheduler.go for normal audio operations // Used in: priority_scheduler.go for normal audio operations
@ -769,19 +769,19 @@ type AudioConfigConstants struct {
// Used in: priority_scheduler.go for non-critical audio operations // Used in: priority_scheduler.go for non-critical audio operations
// Impact: Allows audio processing while yielding to higher priority tasks. // Impact: Allows audio processing while yielding to higher priority tasks.
// Default 50 provides background processing capability. // Default 50 provides background processing capability.
AudioLowPriority int AudioLowPriority int
// NormalPriority defines standard system priority for non-real-time tasks. // NormalPriority defines standard system priority for non-real-time tasks.
// Used in: priority_scheduler.go for utility and monitoring tasks // Used in: priority_scheduler.go for utility and monitoring tasks
// Impact: Standard priority level for non-time-critical operations. // Impact: Standard priority level for non-time-critical operations.
// Default 0 uses standard Linux process priority. // Default 0 uses standard Linux process priority.
NormalPriority int NormalPriority int
// NiceValue defines process nice value for CPU scheduling priority. // NiceValue defines process nice value for CPU scheduling priority.
// Used in: priority_scheduler.go for adjusting process scheduling priority // Used in: priority_scheduler.go for adjusting process scheduling priority
// Impact: Lower values increase priority, higher values decrease priority. // Impact: Lower values increase priority, higher values decrease priority.
// Default -10 provides elevated priority for audio processes. // Default -10 provides elevated priority for audio processes.
NiceValue int NiceValue int
// Error Handling - Configuration for error recovery and retry mechanisms // Error Handling - Configuration for error recovery and retry mechanisms
// Used in: error_handler.go, retry_manager.go for robust error handling // Used in: error_handler.go, retry_manager.go for robust error handling
@ -827,7 +827,7 @@ type AudioConfigConstants struct {
// Used in: retry_manager.go for global retry limit enforcement // Used in: retry_manager.go for global retry limit enforcement
// Impact: Higher values improve success rate but may delay failure detection. // Impact: Higher values improve success rate but may delay failure detection.
// Default 10 attempts provides comprehensive retry coverage. // Default 10 attempts provides comprehensive retry coverage.
MaxRetryAttempts int MaxRetryAttempts int
// Timing Constants - Core timing configuration for audio processing operations // Timing Constants - Core timing configuration for audio processing operations
// Used in: Various components for timing control and synchronization // Used in: Various components for timing control and synchronization
@ -837,67 +837,67 @@ type AudioConfigConstants struct {
// Used in: Various components for standard timing delays // Used in: Various components for standard timing delays
// Impact: Balances CPU usage with responsiveness in polling operations. // Impact: Balances CPU usage with responsiveness in polling operations.
// Default 100ms provides good balance for most timing scenarios. // Default 100ms provides good balance for most timing scenarios.
DefaultSleepDuration time.Duration // 100ms DefaultSleepDuration time.Duration // 100ms
// ShortSleepDuration defines brief sleep duration for time-sensitive operations. // ShortSleepDuration defines brief sleep duration for time-sensitive operations.
// Used in: Real-time components for minimal delays // Used in: Real-time components for minimal delays
// Impact: Reduces latency but increases CPU usage in tight loops. // Impact: Reduces latency but increases CPU usage in tight loops.
// Default 10ms provides minimal delay for responsive operations. // Default 10ms provides minimal delay for responsive operations.
ShortSleepDuration time.Duration // 10ms ShortSleepDuration time.Duration // 10ms
// LongSleepDuration defines extended sleep duration for background operations. // LongSleepDuration defines extended sleep duration for background operations.
// Used in: Background tasks and cleanup operations // Used in: Background tasks and cleanup operations
// Impact: Reduces CPU usage but increases response time for background tasks. // Impact: Reduces CPU usage but increases response time for background tasks.
// Default 200ms provides efficient background operation timing. // Default 200ms provides efficient background operation timing.
LongSleepDuration time.Duration // 200ms LongSleepDuration time.Duration // 200ms
// DefaultTickerInterval defines standard ticker interval for periodic operations. // DefaultTickerInterval defines standard ticker interval for periodic operations.
// Used in: Periodic monitoring and maintenance tasks // Used in: Periodic monitoring and maintenance tasks
// Impact: Controls frequency of periodic operations and resource usage. // Impact: Controls frequency of periodic operations and resource usage.
// Default 100ms provides good balance for monitoring tasks. // Default 100ms provides good balance for monitoring tasks.
DefaultTickerInterval time.Duration // 100ms DefaultTickerInterval time.Duration // 100ms
// BufferUpdateInterval defines frequency of buffer status updates. // BufferUpdateInterval defines frequency of buffer status updates.
// Used in: buffer_pool.go and adaptive_buffer.go for buffer management // Used in: buffer_pool.go and adaptive_buffer.go for buffer management
// Impact: More frequent updates improve responsiveness but increase overhead. // Impact: More frequent updates improve responsiveness but increase overhead.
// Default 500ms provides adequate buffer monitoring without excessive overhead. // Default 500ms provides adequate buffer monitoring without excessive overhead.
BufferUpdateInterval time.Duration // 500ms BufferUpdateInterval time.Duration // 500ms
// StatsUpdateInterval defines frequency of statistics collection and reporting. // StatsUpdateInterval defines frequency of statistics collection and reporting.
// Used in: metrics.go for performance statistics updates // Used in: metrics.go for performance statistics updates
// Impact: More frequent updates provide better monitoring but increase overhead. // Impact: More frequent updates provide better monitoring but increase overhead.
// Default 5s provides comprehensive statistics without performance impact. // Default 5s provides comprehensive statistics without performance impact.
StatsUpdateInterval time.Duration // 5s StatsUpdateInterval time.Duration // 5s
// SupervisorTimeout defines timeout for supervisor process operations. // SupervisorTimeout defines timeout for supervisor process operations.
// Used in: supervisor.go for process monitoring and control // Used in: supervisor.go for process monitoring and control
// Impact: Shorter timeouts improve responsiveness but may cause false timeouts. // Impact: Shorter timeouts improve responsiveness but may cause false timeouts.
// Default 10s provides adequate time for supervisor operations. // Default 10s provides adequate time for supervisor operations.
SupervisorTimeout time.Duration // 10s SupervisorTimeout time.Duration // 10s
// InputSupervisorTimeout defines timeout for input supervisor operations. // InputSupervisorTimeout defines timeout for input supervisor operations.
// Used in: input_supervisor.go for input process monitoring // Used in: input_supervisor.go for input process monitoring
// Impact: Shorter timeouts improve input responsiveness but may cause false timeouts. // Impact: Shorter timeouts improve input responsiveness but may cause false timeouts.
// Default 5s provides responsive input monitoring. // Default 5s provides responsive input monitoring.
InputSupervisorTimeout time.Duration // 5s InputSupervisorTimeout time.Duration // 5s
// ShortTimeout defines brief timeout for time-critical operations. // ShortTimeout defines brief timeout for time-critical operations.
// Used in: Real-time audio processing for minimal timeout scenarios // Used in: Real-time audio processing for minimal timeout scenarios
// Impact: Very short timeouts ensure responsiveness but may cause premature failures. // Impact: Very short timeouts ensure responsiveness but may cause premature failures.
// Default 5ms provides minimal timeout for critical operations. // Default 5ms provides minimal timeout for critical operations.
ShortTimeout time.Duration // 5ms ShortTimeout time.Duration // 5ms
// MediumTimeout defines moderate timeout for standard operations. // MediumTimeout defines moderate timeout for standard operations.
// Used in: Standard audio processing operations // Used in: Standard audio processing operations
// Impact: Balances responsiveness with operation completion time. // Impact: Balances responsiveness with operation completion time.
// Default 50ms provides good balance for most audio operations. // Default 50ms provides good balance for most audio operations.
MediumTimeout time.Duration // 50ms MediumTimeout time.Duration // 50ms
// BatchProcessingDelay defines delay between batch processing operations. // BatchProcessingDelay defines delay between batch processing operations.
// Used in: batch_audio.go for controlling batch processing timing // Used in: batch_audio.go for controlling batch processing timing
// Impact: Shorter delays improve throughput but increase CPU usage. // Impact: Shorter delays improve throughput but increase CPU usage.
// Default 10ms provides efficient batch processing timing. // Default 10ms provides efficient batch processing timing.
BatchProcessingDelay time.Duration // 10ms BatchProcessingDelay time.Duration // 10ms
// AdaptiveOptimizerStability defines stability period for adaptive optimization. // AdaptiveOptimizerStability defines stability period for adaptive optimization.
// Used in: adaptive_optimizer.go for optimization stability control // Used in: adaptive_optimizer.go for optimization stability control
@ -909,13 +909,13 @@ type AudioConfigConstants struct {
// Used in: latency_monitor.go for latency threshold monitoring // Used in: latency_monitor.go for latency threshold monitoring
// Impact: Lower values enforce stricter latency requirements. // Impact: Lower values enforce stricter latency requirements.
// Default 50ms provides good real-time audio latency target. // Default 50ms provides good real-time audio latency target.
MaxLatencyTarget time.Duration // 50ms MaxLatencyTarget time.Duration // 50ms
// LatencyMonitorTarget defines target latency for monitoring and optimization. // LatencyMonitorTarget defines target latency for monitoring and optimization.
// Used in: latency_monitor.go for latency optimization goals // Used in: latency_monitor.go for latency optimization goals
// Impact: Lower targets improve audio responsiveness but may increase system load. // Impact: Lower targets improve audio responsiveness but may increase system load.
// Default 50ms provides excellent real-time audio performance target. // Default 50ms provides excellent real-time audio performance target.
LatencyMonitorTarget time.Duration // 50ms LatencyMonitorTarget time.Duration // 50ms
// Adaptive Buffer Configuration - Thresholds for dynamic buffer adaptation // Adaptive Buffer Configuration - Thresholds for dynamic buffer adaptation
// Used in: adaptive_buffer.go for system load-based buffer sizing // Used in: adaptive_buffer.go for system load-based buffer sizing
@ -925,31 +925,31 @@ type AudioConfigConstants struct {
// Used in: adaptive_buffer.go for detecting low CPU load conditions // Used in: adaptive_buffer.go for detecting low CPU load conditions
// Impact: Below this threshold, buffers may be reduced to minimize latency. // Impact: Below this threshold, buffers may be reduced to minimize latency.
// Default 20% allows buffer optimization during low system load. // Default 20% allows buffer optimization during low system load.
LowCPUThreshold float64 // 20% CPU threshold LowCPUThreshold float64 // 20% CPU threshold
// HighCPUThreshold defines CPU usage threshold for buffer size increase. // HighCPUThreshold defines CPU usage threshold for buffer size increase.
// Used in: adaptive_buffer.go for detecting high CPU load conditions // Used in: adaptive_buffer.go for detecting high CPU load conditions
// Impact: Above this threshold, buffers are increased to prevent underruns. // Impact: Above this threshold, buffers are increased to prevent underruns.
// Default 60% provides early detection of CPU pressure for buffer adjustment. // Default 60% provides early detection of CPU pressure for buffer adjustment.
HighCPUThreshold float64 // 60% CPU threshold HighCPUThreshold float64 // 60% CPU threshold
// LowMemoryThreshold defines memory usage threshold for buffer optimization. // LowMemoryThreshold defines memory usage threshold for buffer optimization.
// Used in: adaptive_buffer.go for memory-conscious buffer management // Used in: adaptive_buffer.go for memory-conscious buffer management
// Impact: Above this threshold, buffer sizes may be reduced to save memory. // Impact: Above this threshold, buffer sizes may be reduced to save memory.
// Default 50% provides early memory pressure detection. // Default 50% provides early memory pressure detection.
LowMemoryThreshold float64 // 50% memory threshold LowMemoryThreshold float64 // 50% memory threshold
// HighMemoryThreshold defines memory usage threshold for aggressive optimization. // HighMemoryThreshold defines memory usage threshold for aggressive optimization.
// Used in: adaptive_buffer.go for high memory pressure scenarios // Used in: adaptive_buffer.go for high memory pressure scenarios
// Impact: Above this threshold, aggressive buffer reduction is applied. // Impact: Above this threshold, aggressive buffer reduction is applied.
// Default 75% triggers aggressive memory conservation measures. // Default 75% triggers aggressive memory conservation measures.
HighMemoryThreshold float64 // 75% memory threshold HighMemoryThreshold float64 // 75% memory threshold
// TargetLatency defines target latency for adaptive buffer optimization. // TargetLatency defines target latency for adaptive buffer optimization.
// Used in: adaptive_buffer.go for latency-based buffer sizing // Used in: adaptive_buffer.go for latency-based buffer sizing
// Impact: Lower targets reduce buffer sizes, higher targets increase stability. // Impact: Lower targets reduce buffer sizes, higher targets increase stability.
// Default 20ms provides excellent real-time performance target. // Default 20ms provides excellent real-time performance target.
TargetLatency time.Duration // 20ms target latency TargetLatency time.Duration // 20ms target latency
// Adaptive Optimizer Configuration - Settings for performance optimization // Adaptive Optimizer Configuration - Settings for performance optimization
// Used in: adaptive_optimizer.go for system performance optimization // Used in: adaptive_optimizer.go for system performance optimization
@ -959,7 +959,7 @@ type AudioConfigConstants struct {
// Used in: adaptive_optimizer.go for preventing optimization oscillation // Used in: adaptive_optimizer.go for preventing optimization oscillation
// Impact: Longer periods provide more stable optimization but slower adaptation. // Impact: Longer periods provide more stable optimization but slower adaptation.
// Default 30s prevents rapid optimization changes that could destabilize system. // Default 30s prevents rapid optimization changes that could destabilize system.
CooldownPeriod time.Duration // 30s cooldown period CooldownPeriod time.Duration // 30s cooldown period
// RollbackThreshold defines latency threshold for optimization rollback. // RollbackThreshold defines latency threshold for optimization rollback.
// Used in: adaptive_optimizer.go for detecting failed optimizations // Used in: adaptive_optimizer.go for detecting failed optimizations
@ -971,7 +971,7 @@ type AudioConfigConstants struct {
// Used in: adaptive_optimizer.go for optimization target setting // Used in: adaptive_optimizer.go for optimization target setting
// Impact: Lower targets improve responsiveness but may increase system load. // Impact: Lower targets improve responsiveness but may increase system load.
// Default 50ms provides good balance between performance and stability. // Default 50ms provides good balance between performance and stability.
LatencyTarget time.Duration // 50ms latency target LatencyTarget time.Duration // 50ms latency target
// Latency Monitor Configuration - Settings for latency monitoring and analysis // Latency Monitor Configuration - Settings for latency monitoring and analysis
// Used in: latency_monitor.go for latency tracking and alerting // Used in: latency_monitor.go for latency tracking and alerting
@ -987,7 +987,19 @@ type AudioConfigConstants struct {
// Used in: latency_monitor.go for jitter detection and monitoring // Used in: latency_monitor.go for jitter detection and monitoring
// Impact: Lower values detect smaller latency variations. // Impact: Lower values detect smaller latency variations.
// Default 20ms provides good jitter detection for audio quality. // Default 20ms provides good jitter detection for audio quality.
JitterThreshold time.Duration // 20ms jitter threshold JitterThreshold time.Duration // 20ms jitter threshold
// LatencyOptimizationInterval defines interval for latency optimization cycles.
// Used in: latency_monitor.go for optimization timing control
// Impact: Controls frequency of latency optimization adjustments.
// Default 5s provides balanced optimization without excessive overhead.
LatencyOptimizationInterval time.Duration // 5s optimization interval
// LatencyAdaptiveThreshold defines threshold for adaptive latency adjustments.
// Used in: latency_monitor.go for adaptive optimization decisions
// Impact: Controls sensitivity of adaptive latency optimization.
// Default 0.8 (80%) provides good balance between stability and adaptation.
LatencyAdaptiveThreshold float64 // 0.8 adaptive threshold
// Microphone Contention Configuration - Settings for microphone access management // Microphone Contention Configuration - Settings for microphone access management
// Used in: mic_contention.go for managing concurrent microphone access // Used in: mic_contention.go for managing concurrent microphone access
@ -1023,7 +1035,7 @@ type AudioConfigConstants struct {
// Used in: buffer_pool.go for initial memory pool sizing // Used in: buffer_pool.go for initial memory pool sizing
// Impact: Higher values reduce allocation overhead but increase memory usage. // Impact: Higher values reduce allocation overhead but increase memory usage.
// Default 20% provides good balance between performance and memory efficiency. // Default 20% provides good balance between performance and memory efficiency.
PreallocPercentage int // 20% preallocation percentage PreallocPercentage int // 20% preallocation percentage
// InputPreallocPercentage defines percentage of input buffers to preallocate. // InputPreallocPercentage defines percentage of input buffers to preallocate.
// Used in: buffer_pool.go for input-specific memory pool sizing // Used in: buffer_pool.go for input-specific memory pool sizing
@ -1045,7 +1057,7 @@ type AudioConfigConstants struct {
// Used in: metrics.go for exponential moving average calculations // Used in: metrics.go for exponential moving average calculations
// Impact: Higher values provide faster response but less stability. // Impact: Higher values provide faster response but less stability.
// Default 30% complements historical weight for balanced EMA calculation. // Default 30% complements historical weight for balanced EMA calculation.
CurrentWeight float64 // 30% current weight CurrentWeight float64 // 30% current weight
// Sleep and Backoff Configuration - Settings for timing and retry behavior // Sleep and Backoff Configuration - Settings for timing and retry behavior
// Used in: Various components for timing control and retry logic // Used in: Various components for timing control and retry logic
@ -1055,13 +1067,13 @@ type AudioConfigConstants struct {
// Used in: cgo_audio.go for CGO operation timing // Used in: cgo_audio.go for CGO operation timing
// Impact: Longer sleeps reduce CPU usage but may increase latency. // Impact: Longer sleeps reduce CPU usage but may increase latency.
// Default 50000 microseconds (50ms) provides good balance for CGO operations. // Default 50000 microseconds (50ms) provides good balance for CGO operations.
CGOSleepMicroseconds int // 50000 microseconds (50ms) CGOSleepMicroseconds int // 50000 microseconds (50ms)
// BackoffStart defines initial backoff duration for retry operations. // BackoffStart defines initial backoff duration for retry operations.
// Used in: retry_manager.go for exponential backoff initialization // Used in: retry_manager.go for exponential backoff initialization
// Impact: Longer initial backoff reduces immediate retry pressure. // Impact: Longer initial backoff reduces immediate retry pressure.
// Default 50ms provides reasonable initial retry delay. // Default 50ms provides reasonable initial retry delay.
BackoffStart time.Duration // 50ms initial backoff BackoffStart time.Duration // 50ms initial backoff
// Protocol Magic Numbers - Unique identifiers for IPC message validation // Protocol Magic Numbers - Unique identifiers for IPC message validation
// Used in: ipc.go, input_ipc.go for message protocol validation // Used in: ipc.go, input_ipc.go for message protocol validation
@ -1071,7 +1083,7 @@ type AudioConfigConstants struct {
// Used in: input_ipc.go for input message validation // Used in: input_ipc.go for input message validation
// Impact: Must match expected value to prevent input protocol errors. // Impact: Must match expected value to prevent input protocol errors.
// Default 0x4A4B4D49 "JKMI" (JetKVM Microphone Input) provides distinctive input identifier. // Default 0x4A4B4D49 "JKMI" (JetKVM Microphone Input) provides distinctive input identifier.
InputMagicNumber uint32 InputMagicNumber uint32
// OutputMagicNumber defines magic number for output IPC messages. // OutputMagicNumber defines magic number for output IPC messages.
// Used in: ipc.go for output message validation // Used in: ipc.go for output message validation
@ -1087,55 +1099,55 @@ type AudioConfigConstants struct {
// Used in: metrics.go, process_monitor.go for percentage conversions // Used in: metrics.go, process_monitor.go for percentage conversions
// Impact: Must be 100.0 for accurate percentage calculations. // Impact: Must be 100.0 for accurate percentage calculations.
// Default 100.0 provides standard percentage calculation base. // Default 100.0 provides standard percentage calculation base.
PercentageMultiplier float64 PercentageMultiplier float64
// AveragingWeight defines weight for weighted averaging calculations. // AveragingWeight defines weight for weighted averaging calculations.
// Used in: metrics.go for exponential moving averages // Used in: metrics.go for exponential moving averages
// Impact: Higher values emphasize historical data more heavily. // Impact: Higher values emphasize historical data more heavily.
// Default 0.7 provides good balance between stability and responsiveness. // Default 0.7 provides good balance between stability and responsiveness.
AveragingWeight float64 AveragingWeight float64
// ScalingFactor defines general scaling factor for calculations. // ScalingFactor defines general scaling factor for calculations.
// Used in: adaptive_buffer.go for buffer size scaling // Used in: adaptive_buffer.go for buffer size scaling
// Impact: Higher values increase scaling aggressiveness. // Impact: Higher values increase scaling aggressiveness.
// Default 1.5 provides moderate scaling for buffer adjustments. // Default 1.5 provides moderate scaling for buffer adjustments.
ScalingFactor float64 ScalingFactor float64
// SmoothingFactor defines smoothing factor for adaptive buffer calculations. // SmoothingFactor defines smoothing factor for adaptive buffer calculations.
// Used in: adaptive_buffer.go for buffer size smoothing // Used in: adaptive_buffer.go for buffer size smoothing
// Impact: Higher values provide more aggressive smoothing. // Impact: Higher values provide more aggressive smoothing.
// Default 0.3 provides good smoothing without excessive dampening. // Default 0.3 provides good smoothing without excessive dampening.
SmoothingFactor float64 SmoothingFactor float64
// CPUMemoryWeight defines weight for CPU factor in combined calculations. // CPUMemoryWeight defines weight for CPU factor in combined calculations.
// Used in: adaptive_optimizer.go for balancing CPU vs memory considerations // Used in: adaptive_optimizer.go for balancing CPU vs memory considerations
// Impact: Higher values prioritize CPU optimization over memory optimization. // Impact: Higher values prioritize CPU optimization over memory optimization.
// Default 0.5 provides equal weighting between CPU and memory factors. // Default 0.5 provides equal weighting between CPU and memory factors.
CPUMemoryWeight float64 CPUMemoryWeight float64
// MemoryWeight defines weight for memory factor in combined calculations. // MemoryWeight defines weight for memory factor in combined calculations.
// Used in: adaptive_optimizer.go for memory impact weighting // Used in: adaptive_optimizer.go for memory impact weighting
// Impact: Higher values make memory usage more influential in decisions. // Impact: Higher values make memory usage more influential in decisions.
// Default 0.3 provides moderate memory consideration in optimization. // Default 0.3 provides moderate memory consideration in optimization.
MemoryWeight float64 MemoryWeight float64
// LatencyWeight defines weight for latency factor in combined calculations. // LatencyWeight defines weight for latency factor in combined calculations.
// Used in: adaptive_optimizer.go for latency impact weighting // Used in: adaptive_optimizer.go for latency impact weighting
// Impact: Higher values prioritize latency optimization over resource usage. // Impact: Higher values prioritize latency optimization over resource usage.
// Default 0.2 provides latency consideration while prioritizing resources. // Default 0.2 provides latency consideration while prioritizing resources.
LatencyWeight float64 LatencyWeight float64
// PoolGrowthMultiplier defines multiplier for pool size growth. // PoolGrowthMultiplier defines multiplier for pool size growth.
// Used in: buffer_pool.go for pool expansion calculations // Used in: buffer_pool.go for pool expansion calculations
// Impact: Higher values cause more aggressive pool growth. // Impact: Higher values cause more aggressive pool growth.
// Default 2 provides standard doubling growth pattern. // Default 2 provides standard doubling growth pattern.
PoolGrowthMultiplier int PoolGrowthMultiplier int
// LatencyScalingFactor defines scaling factor for latency ratio calculations. // LatencyScalingFactor defines scaling factor for latency ratio calculations.
// Used in: latency_monitor.go for latency scaling operations // Used in: latency_monitor.go for latency scaling operations
// Impact: Higher values amplify latency differences in calculations. // Impact: Higher values amplify latency differences in calculations.
// Default 2.0 provides moderate latency scaling for monitoring. // Default 2.0 provides moderate latency scaling for monitoring.
LatencyScalingFactor float64 LatencyScalingFactor float64
// OptimizerAggressiveness defines aggressiveness level for optimization algorithms. // OptimizerAggressiveness defines aggressiveness level for optimization algorithms.
// Used in: adaptive_optimizer.go for optimization behavior control // Used in: adaptive_optimizer.go for optimization behavior control
@ -1151,13 +1163,13 @@ type AudioConfigConstants struct {
// Used in: cgo_audio.go for CGO operation timing control // Used in: cgo_audio.go for CGO operation timing control
// Impact: Controls timing precision in native audio processing. // Impact: Controls timing precision in native audio processing.
// Default 1000 microseconds (1ms) provides good balance for CGO timing. // Default 1000 microseconds (1ms) provides good balance for CGO timing.
CGOUsleepMicroseconds int CGOUsleepMicroseconds int
// CGOPCMBufferSize defines PCM buffer size for CGO audio processing. // CGOPCMBufferSize defines PCM buffer size for CGO audio processing.
// Used in: cgo_audio.go for native PCM buffer allocation // Used in: cgo_audio.go for native PCM buffer allocation
// Impact: Must accommodate maximum expected PCM frame size. // Impact: Must accommodate maximum expected PCM frame size.
// Default 1920 samples handles maximum 2-channel 960-sample frames. // Default 1920 samples handles maximum 2-channel 960-sample frames.
CGOPCMBufferSize int CGOPCMBufferSize int
// CGONanosecondsPerSecond defines nanoseconds per second for time conversions. // CGONanosecondsPerSecond defines nanoseconds per second for time conversions.
// Used in: cgo_audio.go for time unit conversions in native code // Used in: cgo_audio.go for time unit conversions in native code
@ -1179,61 +1191,61 @@ type AudioConfigConstants struct {
// Used in: Frontend components for sync operation rate limiting // Used in: Frontend components for sync operation rate limiting
// Impact: Controls frequency of sync operations to prevent overload. // Impact: Controls frequency of sync operations to prevent overload.
// Default 1000ms provides reasonable sync operation spacing. // Default 1000ms provides reasonable sync operation spacing.
FrontendSyncDebounceMS int FrontendSyncDebounceMS int
// FrontendSampleRate defines sample rate for frontend audio processing. // FrontendSampleRate defines sample rate for frontend audio processing.
// Used in: Frontend audio components for audio parameter configuration // Used in: Frontend audio components for audio parameter configuration
// Impact: Must match backend sample rate for proper audio processing. // Impact: Must match backend sample rate for proper audio processing.
// Default 48000Hz provides high-quality audio for frontend display. // Default 48000Hz provides high-quality audio for frontend display.
FrontendSampleRate int FrontendSampleRate int
// FrontendRetryDelayMS defines delay between frontend retry attempts. // FrontendRetryDelayMS defines delay between frontend retry attempts.
// Used in: Frontend components for retry operation timing // Used in: Frontend components for retry operation timing
// Impact: Longer delays reduce server load but slow error recovery. // Impact: Longer delays reduce server load but slow error recovery.
// Default 500ms provides reasonable retry timing for frontend operations. // Default 500ms provides reasonable retry timing for frontend operations.
FrontendRetryDelayMS int FrontendRetryDelayMS int
// FrontendShortDelayMS defines short delay for frontend operations. // FrontendShortDelayMS defines short delay for frontend operations.
// Used in: Frontend components for brief operation delays // Used in: Frontend components for brief operation delays
// Impact: Controls timing for quick frontend operations. // Impact: Controls timing for quick frontend operations.
// Default 200ms provides brief delay for responsive operations. // Default 200ms provides brief delay for responsive operations.
FrontendShortDelayMS int FrontendShortDelayMS int
// FrontendLongDelayMS defines long delay for frontend operations. // FrontendLongDelayMS defines long delay for frontend operations.
// Used in: Frontend components for extended operation delays // Used in: Frontend components for extended operation delays
// Impact: Controls timing for slower frontend operations. // Impact: Controls timing for slower frontend operations.
// Default 300ms provides extended delay for complex operations. // Default 300ms provides extended delay for complex operations.
FrontendLongDelayMS int FrontendLongDelayMS int
// FrontendSyncDelayMS defines delay for frontend sync operations. // FrontendSyncDelayMS defines delay for frontend sync operations.
// Used in: Frontend components for sync operation timing // Used in: Frontend components for sync operation timing
// Impact: Controls frequency of frontend synchronization. // Impact: Controls frequency of frontend synchronization.
// Default 500ms provides good balance for sync operations. // Default 500ms provides good balance for sync operations.
FrontendSyncDelayMS int FrontendSyncDelayMS int
// FrontendMaxRetryAttempts defines maximum retry attempts for frontend operations. // FrontendMaxRetryAttempts defines maximum retry attempts for frontend operations.
// Used in: Frontend components for retry limit enforcement // Used in: Frontend components for retry limit enforcement
// Impact: More attempts improve success rate but may delay error reporting. // Impact: More attempts improve success rate but may delay error reporting.
// Default 3 attempts provides good balance between persistence and responsiveness. // Default 3 attempts provides good balance between persistence and responsiveness.
FrontendMaxRetryAttempts int FrontendMaxRetryAttempts int
// FrontendAudioLevelUpdateMS defines audio level update interval. // FrontendAudioLevelUpdateMS defines audio level update interval.
// Used in: Frontend components for audio level meter updates // Used in: Frontend components for audio level meter updates
// Impact: Shorter intervals provide smoother meters but increase CPU usage. // Impact: Shorter intervals provide smoother meters but increase CPU usage.
// Default 100ms provides smooth audio level visualization. // Default 100ms provides smooth audio level visualization.
FrontendAudioLevelUpdateMS int FrontendAudioLevelUpdateMS int
// FrontendFFTSize defines FFT size for frontend audio analysis. // FrontendFFTSize defines FFT size for frontend audio analysis.
// Used in: Frontend components for audio spectrum analysis // Used in: Frontend components for audio spectrum analysis
// Impact: Larger sizes provide better frequency resolution but increase CPU usage. // Impact: Larger sizes provide better frequency resolution but increase CPU usage.
// Default 256 provides good balance for audio visualization. // Default 256 provides good balance for audio visualization.
FrontendFFTSize int FrontendFFTSize int
// FrontendAudioLevelMax defines maximum audio level value. // FrontendAudioLevelMax defines maximum audio level value.
// Used in: Frontend components for audio level scaling // Used in: Frontend components for audio level scaling
// Impact: Controls maximum value for audio level displays. // Impact: Controls maximum value for audio level displays.
// Default 100 provides standard percentage-based audio level scale. // Default 100 provides standard percentage-based audio level scale.
FrontendAudioLevelMax int FrontendAudioLevelMax int
// FrontendReconnectIntervalMS defines interval between reconnection attempts. // FrontendReconnectIntervalMS defines interval between reconnection attempts.
// Used in: Frontend components for connection retry timing // Used in: Frontend components for connection retry timing
@ -1251,7 +1263,7 @@ type AudioConfigConstants struct {
// Used in: Frontend components for debug information timing // Used in: Frontend components for debug information timing
// Impact: Shorter intervals provide more debug info but increase overhead. // Impact: Shorter intervals provide more debug info but increase overhead.
// Default 5000ms provides periodic debug information without excessive output. // Default 5000ms provides periodic debug information without excessive output.
FrontendDebugIntervalMS int FrontendDebugIntervalMS int
// Process Monitor Constants - System resource monitoring configuration // Process Monitor Constants - System resource monitoring configuration
// Used in: process_monitor.go for system resource tracking // Used in: process_monitor.go for system resource tracking
@ -1267,13 +1279,13 @@ type AudioConfigConstants struct {
// Used in: process_monitor.go for memory unit conversions // Used in: process_monitor.go for memory unit conversions
// Impact: Must be 1024 for accurate binary unit conversions. // Impact: Must be 1024 for accurate binary unit conversions.
// Default 1024 provides standard binary conversion factor. // Default 1024 provides standard binary conversion factor.
ProcessMonitorKBToBytes int ProcessMonitorKBToBytes int
// ProcessMonitorDefaultClockHz defines default system clock frequency. // ProcessMonitorDefaultClockHz defines default system clock frequency.
// Used in: process_monitor.go for CPU time calculations on ARM systems // Used in: process_monitor.go for CPU time calculations on ARM systems
// Impact: Should match actual system clock for accurate CPU measurements. // Impact: Should match actual system clock for accurate CPU measurements.
// Default 250.0 Hz matches typical ARM embedded system configuration. // Default 250.0 Hz matches typical ARM embedded system configuration.
ProcessMonitorDefaultClockHz float64 ProcessMonitorDefaultClockHz float64
// ProcessMonitorFallbackClockHz defines fallback clock frequency. // ProcessMonitorFallbackClockHz defines fallback clock frequency.
// Used in: process_monitor.go when system clock cannot be detected // Used in: process_monitor.go when system clock cannot be detected
@ -1285,7 +1297,7 @@ type AudioConfigConstants struct {
// Used in: process_monitor.go for legacy system compatibility // Used in: process_monitor.go for legacy system compatibility
// Impact: Supports older systems with traditional clock frequencies. // Impact: Supports older systems with traditional clock frequencies.
// Default 100.0 Hz provides compatibility with traditional Unix systems. // Default 100.0 Hz provides compatibility with traditional Unix systems.
ProcessMonitorTraditionalHz float64 ProcessMonitorTraditionalHz float64
// Batch Processing Constants - Configuration for audio batch processing // Batch Processing Constants - Configuration for audio batch processing
// Used in: batch_audio.go for batch audio operation control // Used in: batch_audio.go for batch audio operation control
@ -1301,7 +1313,7 @@ type AudioConfigConstants struct {
// Used in: batch_audio.go for batch operation timeout control // Used in: batch_audio.go for batch operation timeout control
// Impact: Shorter timeouts improve responsiveness but may cause timeouts. // Impact: Shorter timeouts improve responsiveness but may cause timeouts.
// Default 5ms provides quick batch processing with reasonable timeout. // Default 5ms provides quick batch processing with reasonable timeout.
BatchProcessorTimeout time.Duration BatchProcessorTimeout time.Duration
// Output Streaming Constants - Configuration for audio output streaming // Output Streaming Constants - Configuration for audio output streaming
// Used in: output_streaming.go for output stream timing control // Used in: output_streaming.go for output stream timing control
@ -1331,13 +1343,13 @@ type AudioConfigConstants struct {
// Used in: Event handling components for event timeout control // Used in: Event handling components for event timeout control
// Impact: Shorter timeouts improve responsiveness but may cause event loss. // Impact: Shorter timeouts improve responsiveness but may cause event loss.
// Default 2 seconds provides reasonable event processing timeout. // Default 2 seconds provides reasonable event processing timeout.
EventTimeoutSeconds int EventTimeoutSeconds int
// EventTimeFormatString defines time format string for event timestamps. // EventTimeFormatString defines time format string for event timestamps.
// Used in: Event handling components for timestamp formatting // Used in: Event handling components for timestamp formatting
// Impact: Must match expected format for proper event processing. // Impact: Must match expected format for proper event processing.
// Default "2006-01-02T15:04:05.000Z" provides ISO 8601 format with milliseconds. // Default "2006-01-02T15:04:05.000Z" provides ISO 8601 format with milliseconds.
EventTimeFormatString string EventTimeFormatString string
// EventSubscriptionDelayMS defines delay for event subscription operations. // EventSubscriptionDelayMS defines delay for event subscription operations.
// Used in: Event handling components for subscription timing // Used in: Event handling components for subscription timing
@ -1363,7 +1375,7 @@ type AudioConfigConstants struct {
// Used in: adaptive_buffer.go for CPU-based buffer adaptation // Used in: adaptive_buffer.go for CPU-based buffer adaptation
// Impact: Controls scaling factor for CPU influence on buffer sizing. // Impact: Controls scaling factor for CPU influence on buffer sizing.
// Default 100 provides standard percentage scaling for CPU calculations. // Default 100 provides standard percentage scaling for CPU calculations.
AdaptiveBufferCPUMultiplier int AdaptiveBufferCPUMultiplier int
// AdaptiveBufferMemoryMultiplier defines multiplier for memory percentage calculations. // AdaptiveBufferMemoryMultiplier defines multiplier for memory percentage calculations.
// Used in: adaptive_buffer.go for memory-based buffer adaptation // Used in: adaptive_buffer.go for memory-based buffer adaptation
@ -1463,7 +1475,7 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Microphone input in bandwidth-constrained scenarios // Used in: Microphone input in bandwidth-constrained scenarios
// Impact: Reduces bandwidth for microphone audio which is typically simpler. // Impact: Reduces bandwidth for microphone audio which is typically simpler.
// Default 16kbps sufficient for basic voice input. // Default 16kbps sufficient for basic voice input.
AudioQualityLowInputBitrate: 16, AudioQualityLowInputBitrate: 16,
// AudioQualityMediumOutputBitrate defines bitrate for medium-quality output. // AudioQualityMediumOutputBitrate defines bitrate for medium-quality output.
// Used in: Typical KVM scenarios with reasonable network connections // Used in: Typical KVM scenarios with reasonable network connections
@ -1475,7 +1487,7 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Standard microphone input scenarios // Used in: Standard microphone input scenarios
// Impact: Provides good voice quality without excessive bandwidth. // Impact: Provides good voice quality without excessive bandwidth.
// Default 32kbps suitable for clear voice communication. // Default 32kbps suitable for clear voice communication.
AudioQualityMediumInputBitrate: 32, AudioQualityMediumInputBitrate: 32,
// AudioQualityHighOutputBitrate defines bitrate for high-quality output. // AudioQualityHighOutputBitrate defines bitrate for high-quality output.
// Used in: Professional applications requiring excellent audio fidelity // Used in: Professional applications requiring excellent audio fidelity
@ -1487,7 +1499,7 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: High-quality microphone input for professional use // Used in: High-quality microphone input for professional use
// Impact: Ensures clear voice reproduction for professional scenarios. // Impact: Ensures clear voice reproduction for professional scenarios.
// Default 64kbps provides excellent voice quality. // Default 64kbps provides excellent voice quality.
AudioQualityHighInputBitrate: 64, AudioQualityHighInputBitrate: 64,
// AudioQualityUltraOutputBitrate defines bitrate for ultra-quality output. // AudioQualityUltraOutputBitrate defines bitrate for ultra-quality output.
// Used in: Audiophile-grade reproduction and high-bandwidth connections // Used in: Audiophile-grade reproduction and high-bandwidth connections
@ -1499,7 +1511,7 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Professional microphone input requiring maximum quality // Used in: Professional microphone input requiring maximum quality
// Impact: Provides audiophile-grade voice quality with high bandwidth. // Impact: Provides audiophile-grade voice quality with high bandwidth.
// Default 96kbps ensures maximum voice reproduction quality. // Default 96kbps ensures maximum voice reproduction quality.
AudioQualityUltraInputBitrate: 96, AudioQualityUltraInputBitrate: 96,
// Audio Quality Sample Rates - Sampling frequencies for different quality levels // Audio Quality Sample Rates - Sampling frequencies for different quality levels
// Used in: Audio capture, processing, and format negotiation // Used in: Audio capture, processing, and format negotiation
@ -1543,7 +1555,7 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: High-quality audio scenarios with balanced requirements // Used in: High-quality audio scenarios with balanced requirements
// Impact: Maintains good latency while ensuring quality processing. // Impact: Maintains good latency while ensuring quality processing.
// Default 20ms provides optimal balance for high-quality scenarios. // Default 20ms provides optimal balance for high-quality scenarios.
AudioQualityHighFrameSize: 20 * time.Millisecond, AudioQualityHighFrameSize: 20 * time.Millisecond,
// AudioQualityUltraFrameSize defines frame duration for ultra-quality audio. // AudioQualityUltraFrameSize defines frame duration for ultra-quality audio.
// Used in: Applications requiring immediate audio feedback // Used in: Applications requiring immediate audio feedback
@ -1571,13 +1583,13 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: High-quality audio scenarios requiring full spatial reproduction // Used in: High-quality audio scenarios requiring full spatial reproduction
// Impact: Ensures complete spatial audio information for quality scenarios. // Impact: Ensures complete spatial audio information for quality scenarios.
// Default 2 (stereo) preserves spatial information for high quality. // Default 2 (stereo) preserves spatial information for high quality.
AudioQualityHighChannels: 2, AudioQualityHighChannels: 2,
// AudioQualityUltraChannels defines channel count for ultra-quality audio. // AudioQualityUltraChannels defines channel count for ultra-quality audio.
// Used in: Ultra-quality scenarios requiring maximum spatial fidelity // Used in: Ultra-quality scenarios requiring maximum spatial fidelity
// Impact: Provides complete spatial audio reproduction for audiophile use. // Impact: Provides complete spatial audio reproduction for audiophile use.
// Default 2 (stereo) ensures maximum spatial fidelity for ultra quality. // Default 2 (stereo) ensures maximum spatial fidelity for ultra quality.
AudioQualityUltraChannels: 2, AudioQualityUltraChannels: 2,
// CGO Audio Constants - Configuration for C interop audio processing // CGO Audio Constants - Configuration for C interop audio processing
// Used in: CGO audio operations and C library compatibility // Used in: CGO audio operations and C library compatibility
@ -1980,43 +1992,43 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: adaptive_optimizer.go for triggering quality increases // Used in: adaptive_optimizer.go for triggering quality increases
// Impact: Below this threshold, system can increase audio quality/buffer sizes // Impact: Below this threshold, system can increase audio quality/buffer sizes
// Default 0.20 (20%) ensures conservative quality upgrades with CPU headroom // Default 0.20 (20%) ensures conservative quality upgrades with CPU headroom
CPUThresholdLow: 0.20, CPUThresholdLow: 0.20,
// CPUThresholdMedium defines medium CPU usage threshold (60%). // CPUThresholdMedium defines medium CPU usage threshold (60%).
// Used in: adaptive_optimizer.go for balanced performance mode // Used in: adaptive_optimizer.go for balanced performance mode
// Impact: Between low and medium, system maintains current settings // Impact: Between low and medium, system maintains current settings
// Default 0.60 (60%) provides good balance between quality and performance // Default 0.60 (60%) provides good balance between quality and performance
CPUThresholdMedium: 0.60, CPUThresholdMedium: 0.60,
// CPUThresholdHigh defines high CPU usage threshold (75%). // CPUThresholdHigh defines high CPU usage threshold (75%).
// Used in: adaptive_optimizer.go for triggering quality reductions // Used in: adaptive_optimizer.go for triggering quality reductions
// Impact: Above this threshold, system reduces quality to prevent overload // Impact: Above this threshold, system reduces quality to prevent overload
// Default 0.75 (75%) allows high utilization while preventing system stress // Default 0.75 (75%) allows high utilization while preventing system stress
CPUThresholdHigh: 0.75, CPUThresholdHigh: 0.75,
// MemoryThresholdLow defines low memory usage threshold (30%). // MemoryThresholdLow defines low memory usage threshold (30%).
// Used in: adaptive_optimizer.go for memory-based optimizations // Used in: adaptive_optimizer.go for memory-based optimizations
// Impact: Below this, system can allocate larger buffers for better performance // Impact: Below this, system can allocate larger buffers for better performance
// Default 0.30 (30%) ensures sufficient memory headroom for buffer expansion // Default 0.30 (30%) ensures sufficient memory headroom for buffer expansion
MemoryThresholdLow: 0.30, MemoryThresholdLow: 0.30,
// MemoryThresholdMed defines medium memory usage threshold (60%). // MemoryThresholdMed defines medium memory usage threshold (60%).
// Used in: adaptive_optimizer.go for balanced memory management // Used in: adaptive_optimizer.go for balanced memory management
// Impact: Between low and medium, system maintains current buffer sizes // Impact: Between low and medium, system maintains current buffer sizes
// Default 0.60 (60%) provides balance between performance and memory efficiency // Default 0.60 (60%) provides balance between performance and memory efficiency
MemoryThresholdMed: 0.60, MemoryThresholdMed: 0.60,
// MemoryThresholdHigh defines high memory usage threshold (80%). // MemoryThresholdHigh defines high memory usage threshold (80%).
// Used in: adaptive_optimizer.go for triggering memory optimizations // Used in: adaptive_optimizer.go for triggering memory optimizations
// Impact: Above this, system reduces buffer sizes to prevent memory pressure // Impact: Above this, system reduces buffer sizes to prevent memory pressure
// Default 0.80 (80%) allows high memory usage while preventing OOM conditions // Default 0.80 (80%) allows high memory usage while preventing OOM conditions
MemoryThresholdHigh: 0.80, MemoryThresholdHigh: 0.80,
// LatencyThresholdLow defines acceptable low latency threshold (20ms). // LatencyThresholdLow defines acceptable low latency threshold (20ms).
// Used in: adaptive_optimizer.go for latency-based quality adjustments // Used in: adaptive_optimizer.go for latency-based quality adjustments
// Impact: Below this, system can increase quality as latency is acceptable // Impact: Below this, system can increase quality as latency is acceptable
// Default 20ms provides excellent real-time audio experience // Default 20ms provides excellent real-time audio experience
LatencyThresholdLow: 20 * time.Millisecond, LatencyThresholdLow: 20 * time.Millisecond,
// LatencyThresholdHigh defines maximum acceptable latency threshold (50ms). // LatencyThresholdHigh defines maximum acceptable latency threshold (50ms).
// Used in: adaptive_optimizer.go for triggering latency optimizations // Used in: adaptive_optimizer.go for triggering latency optimizations
@ -2028,37 +2040,37 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: adaptive_optimizer.go for weighted performance scoring // Used in: adaptive_optimizer.go for weighted performance scoring
// Impact: Higher values make CPU usage more influential in decisions // Impact: Higher values make CPU usage more influential in decisions
// Default 0.7 (70%) emphasizes CPU as primary performance bottleneck // Default 0.7 (70%) emphasizes CPU as primary performance bottleneck
CPUFactor: 0.7, CPUFactor: 0.7,
// MemoryFactor defines weight of memory usage in performance calculations (0.8). // MemoryFactor defines weight of memory usage in performance calculations (0.8).
// Used in: adaptive_optimizer.go for weighted performance scoring // Used in: adaptive_optimizer.go for weighted performance scoring
// Impact: Higher values make memory usage more influential in decisions // Impact: Higher values make memory usage more influential in decisions
// Default 0.8 (80%) emphasizes memory as critical for stability // Default 0.8 (80%) emphasizes memory as critical for stability
MemoryFactor: 0.8, MemoryFactor: 0.8,
// LatencyFactor defines weight of latency in performance calculations (0.9). // LatencyFactor defines weight of latency in performance calculations (0.9).
// Used in: adaptive_optimizer.go for weighted performance scoring // Used in: adaptive_optimizer.go for weighted performance scoring
// Impact: Higher values make latency more influential in decisions // Impact: Higher values make latency more influential in decisions
// Default 0.9 (90%) prioritizes latency as most critical for real-time audio // Default 0.9 (90%) prioritizes latency as most critical for real-time audio
LatencyFactor: 0.9, LatencyFactor: 0.9,
// InputSizeThreshold defines threshold for input buffer size optimizations (1024 bytes). // InputSizeThreshold defines threshold for input buffer size optimizations (1024 bytes).
// Used in: input processing for determining when to optimize buffer handling // Used in: input processing for determining when to optimize buffer handling
// Impact: Larger values delay optimizations but reduce overhead // Impact: Larger values delay optimizations but reduce overhead
// Default 1024 bytes balances optimization frequency with processing efficiency // Default 1024 bytes balances optimization frequency with processing efficiency
InputSizeThreshold: 1024, InputSizeThreshold: 1024,
// OutputSizeThreshold defines threshold for output buffer size optimizations (2048 bytes). // OutputSizeThreshold defines threshold for output buffer size optimizations (2048 bytes).
// Used in: output processing for determining when to optimize buffer handling // Used in: output processing for determining when to optimize buffer handling
// Impact: Larger values delay optimizations but reduce overhead // Impact: Larger values delay optimizations but reduce overhead
// Default 2048 bytes (2x input) accounts for potential encoding expansion // Default 2048 bytes (2x input) accounts for potential encoding expansion
OutputSizeThreshold: 2048, OutputSizeThreshold: 2048,
// TargetLevel defines target performance level for adaptive algorithms (0.5). // TargetLevel defines target performance level for adaptive algorithms (0.5).
// Used in: adaptive_optimizer.go as target for performance balancing // Used in: adaptive_optimizer.go as target for performance balancing
// Impact: Controls how aggressively system optimizes (0.0=conservative, 1.0=aggressive) // Impact: Controls how aggressively system optimizes (0.0=conservative, 1.0=aggressive)
// Default 0.5 (50%) provides balanced optimization between quality and performance // Default 0.5 (50%) provides balanced optimization between quality and performance
TargetLevel: 0.5, TargetLevel: 0.5,
// Priority Scheduling - Process priority values for real-time audio performance // Priority Scheduling - Process priority values for real-time audio performance
// Used in: process management, thread scheduling for audio processing // Used in: process management, thread scheduling for audio processing
@ -2068,7 +2080,7 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Real-time audio processing threads, encoder/decoder threads // Used in: Real-time audio processing threads, encoder/decoder threads
// Impact: Ensures audio threads get CPU time before other processes // Impact: Ensures audio threads get CPU time before other processes
// Default -10 provides high priority without requiring root privileges // Default -10 provides high priority without requiring root privileges
AudioHighPriority: -10, AudioHighPriority: -10,
// AudioMediumPriority defines medium priority for important audio threads (-5). // AudioMediumPriority defines medium priority for important audio threads (-5).
// Used in: Audio buffer management, IPC communication threads // Used in: Audio buffer management, IPC communication threads
@ -2080,19 +2092,19 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Metrics collection, logging, cleanup tasks // Used in: Metrics collection, logging, cleanup tasks
// Impact: Prevents non-critical tasks from interfering with audio processing // Impact: Prevents non-critical tasks from interfering with audio processing
// Default 0 (normal priority) for background audio-related tasks // Default 0 (normal priority) for background audio-related tasks
AudioLowPriority: 0, AudioLowPriority: 0,
// NormalPriority defines standard system priority (0). // NormalPriority defines standard system priority (0).
// Used in: Fallback priority, non-audio system tasks // Used in: Fallback priority, non-audio system tasks
// Impact: Standard scheduling behavior for general tasks // Impact: Standard scheduling behavior for general tasks
// Default 0 represents normal Linux process priority // Default 0 represents normal Linux process priority
NormalPriority: 0, NormalPriority: 0,
// NiceValue defines default nice value for audio processes (-10). // NiceValue defines default nice value for audio processes (-10).
// Used in: Process creation, priority adjustment for audio components // Used in: Process creation, priority adjustment for audio components
// Impact: Improves audio process scheduling without requiring special privileges // Impact: Improves audio process scheduling without requiring special privileges
// Default -10 provides better scheduling while remaining accessible to non-root users // Default -10 provides better scheduling while remaining accessible to non-root users
NiceValue: -10, NiceValue: -10,
// Error Handling - Configuration for robust error recovery and retry logic // Error Handling - Configuration for robust error recovery and retry logic
// Used in: Throughout audio pipeline for handling transient failures // Used in: Throughout audio pipeline for handling transient failures
@ -2102,31 +2114,31 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Audio encoding/decoding, IPC communication, file operations // Used in: Audio encoding/decoding, IPC communication, file operations
// Impact: Higher values increase resilience but may delay error detection // Impact: Higher values increase resilience but may delay error detection
// Default 3 provides good balance between resilience and responsiveness // Default 3 provides good balance between resilience and responsiveness
MaxRetries: 3, MaxRetries: 3,
// RetryDelay defines initial delay between retry attempts (100ms). // RetryDelay defines initial delay between retry attempts (100ms).
// Used in: Exponential backoff retry logic across audio components // Used in: Exponential backoff retry logic across audio components
// Impact: Shorter delays retry faster but may overwhelm failing resources // Impact: Shorter delays retry faster but may overwhelm failing resources
// Default 100ms allows quick recovery while preventing resource flooding // Default 100ms allows quick recovery while preventing resource flooding
RetryDelay: 100 * time.Millisecond, RetryDelay: 100 * time.Millisecond,
// MaxRetryDelay defines maximum delay between retry attempts (5s). // MaxRetryDelay defines maximum delay between retry attempts (5s).
// Used in: Exponential backoff to cap maximum wait time // Used in: Exponential backoff to cap maximum wait time
// Impact: Prevents indefinitely long delays while maintaining backoff benefits // Impact: Prevents indefinitely long delays while maintaining backoff benefits
// Default 5s ensures reasonable maximum wait time for audio operations // Default 5s ensures reasonable maximum wait time for audio operations
MaxRetryDelay: 5 * time.Second, MaxRetryDelay: 5 * time.Second,
// BackoffMultiplier defines exponential backoff multiplier (2.0). // BackoffMultiplier defines exponential backoff multiplier (2.0).
// Used in: Retry logic to calculate increasing delays between attempts // Used in: Retry logic to calculate increasing delays between attempts
// Impact: Higher values create longer delays, lower values retry more aggressively // Impact: Higher values create longer delays, lower values retry more aggressively
// Default 2.0 provides standard exponential backoff (100ms, 200ms, 400ms, etc.) // Default 2.0 provides standard exponential backoff (100ms, 200ms, 400ms, etc.)
BackoffMultiplier: 2.0, BackoffMultiplier: 2.0,
// ErrorChannelSize defines buffer size for error reporting channels (50). // ErrorChannelSize defines buffer size for error reporting channels (50).
// Used in: Error collection and reporting across audio components // Used in: Error collection and reporting across audio components
// Impact: Larger buffers prevent error loss but use more memory // Impact: Larger buffers prevent error loss but use more memory
// Default 50 accommodates burst errors while maintaining reasonable memory usage // Default 50 accommodates burst errors while maintaining reasonable memory usage
ErrorChannelSize: 50, ErrorChannelSize: 50,
// MaxConsecutiveErrors defines threshold for consecutive error handling (5). // MaxConsecutiveErrors defines threshold for consecutive error handling (5).
// Used in: Error monitoring to detect persistent failure conditions // Used in: Error monitoring to detect persistent failure conditions
@ -2138,7 +2150,7 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Critical audio operations that require additional retry logic // Used in: Critical audio operations that require additional retry logic
// Impact: Provides additional retry layer for mission-critical audio functions // Impact: Provides additional retry layer for mission-critical audio functions
// Default 3 matches MaxRetries for consistency in retry behavior // Default 3 matches MaxRetries for consistency in retry behavior
MaxRetryAttempts: 3, MaxRetryAttempts: 3,
// Timing Constants - Critical timing values for audio processing coordination // Timing Constants - Critical timing values for audio processing coordination
// Used in: Scheduling, synchronization, and timing-sensitive operations // Used in: Scheduling, synchronization, and timing-sensitive operations
@ -2148,67 +2160,67 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: General purpose polling, non-critical background tasks // Used in: General purpose polling, non-critical background tasks
// Impact: Shorter intervals increase responsiveness but consume more CPU // Impact: Shorter intervals increase responsiveness but consume more CPU
// Default 100ms balances responsiveness with CPU efficiency // Default 100ms balances responsiveness with CPU efficiency
DefaultSleepDuration: 100 * time.Millisecond, DefaultSleepDuration: 100 * time.Millisecond,
// ShortSleepDuration defines brief sleep interval for tight loops (10ms). // ShortSleepDuration defines brief sleep interval for tight loops (10ms).
// Used in: High-frequency polling, real-time audio processing loops // Used in: High-frequency polling, real-time audio processing loops
// Impact: Critical for maintaining low-latency audio processing // Impact: Critical for maintaining low-latency audio processing
// Default 10ms provides responsive polling while preventing CPU spinning // Default 10ms provides responsive polling while preventing CPU spinning
ShortSleepDuration: 10 * time.Millisecond, ShortSleepDuration: 10 * time.Millisecond,
// LongSleepDuration defines extended sleep interval for slow operations (200ms). // LongSleepDuration defines extended sleep interval for slow operations (200ms).
// Used in: Background maintenance, non-urgent periodic tasks // Used in: Background maintenance, non-urgent periodic tasks
// Impact: Reduces CPU usage for infrequent operations // Impact: Reduces CPU usage for infrequent operations
// Default 200ms suitable for background tasks that don't need frequent execution // Default 200ms suitable for background tasks that don't need frequent execution
LongSleepDuration: 200 * time.Millisecond, LongSleepDuration: 200 * time.Millisecond,
// DefaultTickerInterval defines standard ticker interval for periodic tasks (100ms). // DefaultTickerInterval defines standard ticker interval for periodic tasks (100ms).
// Used in: Metrics collection, periodic health checks, status updates // Used in: Metrics collection, periodic health checks, status updates
// Impact: Controls frequency of periodic operations and system monitoring // Impact: Controls frequency of periodic operations and system monitoring
// Default 100ms provides good balance between monitoring accuracy and overhead // Default 100ms provides good balance between monitoring accuracy and overhead
DefaultTickerInterval: 100 * time.Millisecond, DefaultTickerInterval: 100 * time.Millisecond,
// BufferUpdateInterval defines frequency of buffer status updates (500ms). // BufferUpdateInterval defines frequency of buffer status updates (500ms).
// Used in: Buffer management, adaptive buffer sizing, performance monitoring // Used in: Buffer management, adaptive buffer sizing, performance monitoring
// Impact: Controls how quickly system responds to buffer condition changes // Impact: Controls how quickly system responds to buffer condition changes
// Default 500ms allows buffer conditions to stabilize before adjustments // Default 500ms allows buffer conditions to stabilize before adjustments
BufferUpdateInterval: 500 * time.Millisecond, BufferUpdateInterval: 500 * time.Millisecond,
// StatsUpdateInterval defines frequency of statistics collection (5s). // StatsUpdateInterval defines frequency of statistics collection (5s).
// Used in: Performance metrics, system statistics, monitoring dashboards // Used in: Performance metrics, system statistics, monitoring dashboards
// Impact: Controls granularity of performance monitoring and reporting // Impact: Controls granularity of performance monitoring and reporting
// Default 5s provides meaningful statistics while minimizing collection overhead // Default 5s provides meaningful statistics while minimizing collection overhead
StatsUpdateInterval: 5 * time.Second, StatsUpdateInterval: 5 * time.Second,
// SupervisorTimeout defines timeout for supervisor operations (10s). // SupervisorTimeout defines timeout for supervisor operations (10s).
// Used in: Process supervision, health monitoring, restart logic // Used in: Process supervision, health monitoring, restart logic
// Impact: Controls how long to wait before considering operations failed // Impact: Controls how long to wait before considering operations failed
// Default 10s allows for slow operations while preventing indefinite hangs // Default 10s allows for slow operations while preventing indefinite hangs
SupervisorTimeout: 10 * time.Second, SupervisorTimeout: 10 * time.Second,
// InputSupervisorTimeout defines timeout for input supervision (5s). // InputSupervisorTimeout defines timeout for input supervision (5s).
// Used in: Input process monitoring, microphone supervision // Used in: Input process monitoring, microphone supervision
// Impact: Controls responsiveness of input failure detection // Impact: Controls responsiveness of input failure detection
// Default 5s (shorter than general supervisor) for faster input recovery // Default 5s (shorter than general supervisor) for faster input recovery
InputSupervisorTimeout: 5 * time.Second, InputSupervisorTimeout: 5 * time.Second,
// ShortTimeout defines brief timeout for quick operations (5ms). // ShortTimeout defines brief timeout for quick operations (5ms).
// Used in: Lock acquisition, quick IPC operations, immediate responses // Used in: Lock acquisition, quick IPC operations, immediate responses
// Impact: Critical for maintaining real-time performance // Impact: Critical for maintaining real-time performance
// Default 5ms prevents blocking while allowing for brief delays // Default 5ms prevents blocking while allowing for brief delays
ShortTimeout: 5 * time.Millisecond, ShortTimeout: 5 * time.Millisecond,
// MediumTimeout defines moderate timeout for standard operations (50ms). // MediumTimeout defines moderate timeout for standard operations (50ms).
// Used in: Network operations, file I/O, moderate complexity tasks // Used in: Network operations, file I/O, moderate complexity tasks
// Impact: Balances operation completion time with responsiveness // Impact: Balances operation completion time with responsiveness
// Default 50ms accommodates most standard operations without excessive waiting // Default 50ms accommodates most standard operations without excessive waiting
MediumTimeout: 50 * time.Millisecond, MediumTimeout: 50 * time.Millisecond,
// BatchProcessingDelay defines delay between batch processing cycles (10ms). // BatchProcessingDelay defines delay between batch processing cycles (10ms).
// Used in: Batch audio frame processing, bulk operations // Used in: Batch audio frame processing, bulk operations
// Impact: Controls batch processing frequency and system load // Impact: Controls batch processing frequency and system load
// Default 10ms maintains high throughput while allowing system breathing room // Default 10ms maintains high throughput while allowing system breathing room
BatchProcessingDelay: 10 * time.Millisecond, BatchProcessingDelay: 10 * time.Millisecond,
// AdaptiveOptimizerStability defines stability period for adaptive changes (10s). // AdaptiveOptimizerStability defines stability period for adaptive changes (10s).
// Used in: Adaptive optimization algorithms, performance tuning // Used in: Adaptive optimization algorithms, performance tuning
@ -2220,13 +2232,13 @@ func DefaultAudioConfig() *AudioConfigConstants {
// Used in: Latency monitoring, performance optimization, quality control // Used in: Latency monitoring, performance optimization, quality control
// Impact: Sets upper bound for acceptable audio latency // Impact: Sets upper bound for acceptable audio latency
// Default 50ms represents maximum tolerable latency for real-time audio // Default 50ms represents maximum tolerable latency for real-time audio
MaxLatencyTarget: 50 * time.Millisecond, MaxLatencyTarget: 50 * time.Millisecond,
// LatencyMonitorTarget defines target latency for monitoring (50ms). // LatencyMonitorTarget defines target latency for monitoring (50ms).
// Used in: Latency monitoring systems, performance alerts // Used in: Latency monitoring systems, performance alerts
// Impact: Controls when latency warnings and optimizations are triggered // Impact: Controls when latency warnings and optimizations are triggered
// Default 50ms matches MaxLatencyTarget for consistent latency management // Default 50ms matches MaxLatencyTarget for consistent latency management
LatencyMonitorTarget: 50 * time.Millisecond, LatencyMonitorTarget: 50 * time.Millisecond,
// Adaptive Buffer Configuration // Adaptive Buffer Configuration
LowCPUThreshold: 0.20, LowCPUThreshold: 0.20,
@ -2246,8 +2258,10 @@ func DefaultAudioConfig() *AudioConfigConstants {
LatencyTarget: 50 * time.Millisecond, LatencyTarget: 50 * time.Millisecond,
// Latency Monitor Configuration // Latency Monitor Configuration
MaxLatencyThreshold: 200 * time.Millisecond, MaxLatencyThreshold: 200 * time.Millisecond,
JitterThreshold: 20 * time.Millisecond, JitterThreshold: 20 * time.Millisecond,
LatencyOptimizationInterval: 5 * time.Second,
LatencyAdaptiveThreshold: 0.8,
// Microphone Contention Configuration // Microphone Contention Configuration
MicContentionTimeout: 200 * time.Millisecond, MicContentionTimeout: 200 * time.Millisecond,

View File

@ -325,7 +325,29 @@ func (ais *AudioInputServer) handleConnection(conn net.Conn) {
} }
} }
// readMessage reads a complete message from the connection // readMessage reads a message from the connection using optimized pooled buffers with validation.
//
// Validation Rules:
// - Magic number must match InputMagicNumber ("JKMI" - JetKVM Microphone Input)
// - Message length must not exceed MaxFrameSize (default: 4096 bytes)
// - Header size is fixed at 17 bytes (4+1+4+8: Magic+Type+Length+Timestamp)
// - Data length validation prevents buffer overflow attacks
//
// Message Format:
// - Magic (4 bytes): Identifies valid JetKVM audio messages
// - Type (1 byte): InputMessageType (OpusFrame, Config, Stop, Heartbeat, Ack)
// - Length (4 bytes): Data payload size in bytes
// - Timestamp (8 bytes): Message timestamp for latency tracking
// - Data (variable): Message payload up to MaxFrameSize
//
// Error Conditions:
// - Invalid magic number: Rejects non-JetKVM messages
// - Message too large: Prevents memory exhaustion
// - Connection errors: Network/socket failures
// - Incomplete reads: Partial message reception
//
// The function uses pooled buffers for efficient memory management and
// ensures all messages conform to the JetKVM audio protocol specification.
func (ais *AudioInputServer) readMessage(conn net.Conn) (*InputIPCMessage, error) { func (ais *AudioInputServer) readMessage(conn net.Conn) (*InputIPCMessage, error) {
// Get optimized message from pool // Get optimized message from pool
optMsg := globalMessagePool.Get() optMsg := globalMessagePool.Get()

View File

@ -81,13 +81,14 @@ const (
// DefaultLatencyConfig returns a sensible default configuration // DefaultLatencyConfig returns a sensible default configuration
func DefaultLatencyConfig() LatencyConfig { func DefaultLatencyConfig() LatencyConfig {
config := GetConfig()
return LatencyConfig{ return LatencyConfig{
TargetLatency: 50 * time.Millisecond, TargetLatency: config.LatencyMonitorTarget,
MaxLatency: GetConfig().MaxLatencyThreshold, MaxLatency: config.MaxLatencyThreshold,
OptimizationInterval: 5 * time.Second, OptimizationInterval: config.LatencyOptimizationInterval,
HistorySize: GetConfig().LatencyHistorySize, HistorySize: config.LatencyHistorySize,
JitterThreshold: GetConfig().JitterThreshold, JitterThreshold: config.JitterThreshold,
AdaptiveThreshold: 0.8, // Trigger optimization when 80% above target AdaptiveThreshold: config.LatencyAdaptiveThreshold,
} }
} }
@ -223,7 +224,26 @@ func (lm *LatencyMonitor) monitoringLoop() {
} }
} }
// runOptimization checks if optimization is needed and triggers callbacks // runOptimization checks if optimization is needed and triggers callbacks with threshold validation.
//
// Validation Rules:
// - Current latency must not exceed MaxLatency (default: 200ms)
// - Average latency checked against adaptive threshold: TargetLatency * (1 + AdaptiveThreshold)
// - Jitter must not exceed JitterThreshold (default: 20ms)
// - All latency values must be non-negative durations
//
// Optimization Triggers:
// - Current latency > MaxLatency: Immediate optimization needed
// - Average latency > adaptive threshold: Gradual optimization needed
// - Jitter > JitterThreshold: Stability optimization needed
//
// Threshold Calculations:
// - Adaptive threshold = TargetLatency * (1.0 + AdaptiveThreshold)
// - Default: 50ms * (1.0 + 0.8) = 90ms adaptive threshold
// - Provides buffer above target before triggering optimization
//
// The function ensures real-time audio performance by monitoring multiple
// latency metrics and triggering optimization callbacks when thresholds are exceeded.
func (lm *LatencyMonitor) runOptimization() { func (lm *LatencyMonitor) runOptimization() {
metrics := lm.GetMetrics() metrics := lm.GetMetrics()

View File

@ -63,7 +63,7 @@ func NewOutputStreamer() (*OutputStreamer, error) {
cancel: cancel, cancel: cancel,
batchSize: initialBatchSize, // Use adaptive batch size batchSize: initialBatchSize, // Use adaptive batch size
processingChan: make(chan []byte, GetConfig().ChannelBufferSize), // Large buffer for smooth processing processingChan: make(chan []byte, GetConfig().ChannelBufferSize), // Large buffer for smooth processing
statsInterval: 5 * time.Second, // Statistics every 5 seconds statsInterval: GetConfig().StatsUpdateInterval, // Statistics interval from config
lastStatsTime: time.Now().UnixNano(), lastStatsTime: time.Now().UnixNano(),
}, nil }, nil
} }

View File

@ -245,7 +245,26 @@ func (pm *ProcessMonitor) collectMetrics(pid int, state *processState) (ProcessM
return metric, nil return metric, nil
} }
// calculateCPUPercent calculates CPU percentage for a process // calculateCPUPercent calculates CPU percentage for a process with validation and bounds checking.
//
// Validation Rules:
// - Returns 0.0 for first sample (no baseline for comparison)
// - Requires positive time delta between samples
// - Applies CPU percentage bounds: [MinCPUPercent, MaxCPUPercent]
// - Uses system clock ticks for accurate CPU time conversion
// - Validates clock ticks within range [MinValidClockTicks, MaxValidClockTicks]
//
// Bounds Applied:
// - CPU percentage clamped to [0.01%, 100.0%] (default values)
// - Clock ticks validated within [50, 1000] range (default values)
// - Time delta must be > 0 to prevent division by zero
//
// Warmup Behavior:
// - During warmup period (< WarmupCPUSamples), returns MinCPUPercent for idle processes
// - This indicates process is alive but not consuming significant CPU
//
// The function ensures accurate CPU percentage calculation while preventing
// invalid measurements that could affect system monitoring and adaptive algorithms.
func (pm *ProcessMonitor) calculateCPUPercent(totalCPUTime int64, state *processState, now time.Time) float64 { func (pm *ProcessMonitor) calculateCPUPercent(totalCPUTime int64, state *processState, now time.Time) float64 {
if state.lastSample.IsZero() { if state.lastSample.IsZero() {
// First sample - initialize baseline // First sample - initialize baseline

View File

@ -101,7 +101,23 @@ func GetSocketBufferSizes(conn net.Conn) (sendSize, recvSize int, err error) {
return sendSize, recvSize, nil return sendSize, recvSize, nil
} }
// ValidateSocketBufferConfig validates socket buffer configuration // ValidateSocketBufferConfig validates socket buffer configuration parameters.
//
// Validation Rules:
// - If config.Enabled is false, no validation is performed (returns nil)
// - SendBufferSize must be >= SocketMinBuffer (default: 8192 bytes)
// - RecvBufferSize must be >= SocketMinBuffer (default: 8192 bytes)
// - SendBufferSize must be <= SocketMaxBuffer (default: 1048576 bytes)
// - RecvBufferSize must be <= SocketMaxBuffer (default: 1048576 bytes)
//
// Error Conditions:
// - Returns error if send buffer size is below minimum threshold
// - Returns error if receive buffer size is below minimum threshold
// - Returns error if send buffer size exceeds maximum threshold
// - Returns error if receive buffer size exceeds maximum threshold
//
// The validation ensures socket buffers are sized appropriately for audio streaming
// performance while preventing excessive memory usage.
func ValidateSocketBufferConfig(config SocketBufferConfig) error { func ValidateSocketBufferConfig(config SocketBufferConfig) error {
if !config.Enabled { if !config.Enabled {
return nil return nil