@@ -21,6 +21,9 @@ type RuntimeSettings struct {
|
||||
ViewMode string `json:"view_mode"`
|
||||
MaxDisplayNodes int `json:"max_display_nodes"`
|
||||
LowPowerMode bool `json:"low_power_mode"`
|
||||
SpeedMode bool `json:"speed_mode"`
|
||||
SpeedCPUWorkers int `json:"speed_cpu_tasks"`
|
||||
SpeedGPUInflight int `json:"speed_gpu_tasks"`
|
||||
ProcessingMode string `json:"processing_mode"`
|
||||
AutonomousResearchEnabled bool `json:"autonomous_research_enabled"`
|
||||
AutonomousResearchIdleOnly bool `json:"autonomous_research_idle_only"`
|
||||
@@ -53,6 +56,9 @@ func (e *Engine) defaultRuntimeSettings() RuntimeSettings {
|
||||
ViewMode: e.Cfg.DefaultView,
|
||||
MaxDisplayNodes: e.Cfg.MaxDisplayNodes,
|
||||
LowPowerMode: e.Cfg.LowPowerMode,
|
||||
SpeedMode: e.Cfg.SpeedMode,
|
||||
SpeedCPUWorkers: e.Cfg.SpeedCPUWorkers,
|
||||
SpeedGPUInflight: e.Cfg.SpeedGPUInflight,
|
||||
ProcessingMode: e.Cfg.ProcessingMode,
|
||||
AutonomousResearchEnabled: e.Cfg.AutonomousResearchEnabled,
|
||||
AutonomousResearchIdleOnly: e.Cfg.AutonomousResearchIdleOnly,
|
||||
@@ -86,6 +92,23 @@ func normalizeRuntimeSettings(in RuntimeSettings) RuntimeSettings {
|
||||
if in.MaxDisplayNodes > 500000 {
|
||||
in.MaxDisplayNodes = 500000
|
||||
}
|
||||
if in.SpeedCPUWorkers < 1 {
|
||||
in.SpeedCPUWorkers = 1
|
||||
}
|
||||
if in.SpeedCPUWorkers > 256 {
|
||||
in.SpeedCPUWorkers = 256
|
||||
}
|
||||
if in.SpeedGPUInflight < 1 {
|
||||
in.SpeedGPUInflight = 1
|
||||
}
|
||||
if in.SpeedGPUInflight > 64 {
|
||||
in.SpeedGPUInflight = 64
|
||||
}
|
||||
if in.SpeedMode {
|
||||
// Eco and Speed have opposite scheduling/rendering goals. Speed wins when
|
||||
// an older client accidentally submits both flags.
|
||||
in.LowPowerMode = false
|
||||
}
|
||||
if in.AutonomousResearchMinPriority < 0 {
|
||||
in.AutonomousResearchMinPriority = 0
|
||||
}
|
||||
@@ -172,6 +195,9 @@ func mergeRuntimeSettingsJSON(settings *RuntimeSettings, data []byte) {
|
||||
decode("view_mode", &settings.ViewMode)
|
||||
decode("max_display_nodes", &settings.MaxDisplayNodes)
|
||||
decode("low_power_mode", &settings.LowPowerMode)
|
||||
decode("speed_mode", &settings.SpeedMode)
|
||||
decode("speed_cpu_tasks", &settings.SpeedCPUWorkers)
|
||||
decode("speed_gpu_tasks", &settings.SpeedGPUInflight)
|
||||
decode("processing_mode", &settings.ProcessingMode)
|
||||
decode("autonomous_research_enabled", &settings.AutonomousResearchEnabled)
|
||||
decode("autonomous_research_idle_only", &settings.AutonomousResearchIdleOnly)
|
||||
@@ -217,6 +243,12 @@ func (e *Engine) SetRuntimeSettings(settings RuntimeSettings) (RuntimeSettings,
|
||||
if settings.AutonomousResearchTasksPerCycle == 0 {
|
||||
settings.AutonomousResearchTasksPerCycle = previous.AutonomousResearchTasksPerCycle
|
||||
}
|
||||
if settings.SpeedCPUWorkers == 0 {
|
||||
settings.SpeedCPUWorkers = previous.SpeedCPUWorkers
|
||||
}
|
||||
if settings.SpeedGPUInflight == 0 {
|
||||
settings.SpeedGPUInflight = previous.SpeedGPUInflight
|
||||
}
|
||||
if settings.ProcessingMode == "" {
|
||||
settings.ProcessingMode = previous.ProcessingMode
|
||||
}
|
||||
@@ -226,6 +258,12 @@ func (e *Engine) SetRuntimeSettings(settings RuntimeSettings) (RuntimeSettings,
|
||||
if settings.MaxDisplayNodes < 0 || settings.MaxDisplayNodes > 500000 {
|
||||
return e.RuntimeSettings(), fmt.Errorf("max_display_nodes must be between 0 and 500000")
|
||||
}
|
||||
if settings.SpeedCPUWorkers < 1 || settings.SpeedCPUWorkers > 256 {
|
||||
return e.RuntimeSettings(), fmt.Errorf("speed_cpu_tasks must be between 1 and 256")
|
||||
}
|
||||
if settings.SpeedGPUInflight < 1 || settings.SpeedGPUInflight > 64 {
|
||||
return e.RuntimeSettings(), fmt.Errorf("speed_gpu_tasks must be between 1 and 64")
|
||||
}
|
||||
if settings.AutonomousResearchMinPriority < 0 || settings.AutonomousResearchMinPriority > 1 {
|
||||
return e.RuntimeSettings(), fmt.Errorf("autonomous_research_min_priority must be between 0 and 1")
|
||||
}
|
||||
@@ -243,6 +281,11 @@ func (e *Engine) SetRuntimeSettings(settings RuntimeSettings) (RuntimeSettings,
|
||||
previous = e.runtime
|
||||
e.runtime = settings
|
||||
e.runtimeMu.Unlock()
|
||||
e.applyRuntimePerformance(settings)
|
||||
|
||||
if settings.SpeedMode && !previous.SpeedMode {
|
||||
e.signalSpeedWork()
|
||||
}
|
||||
|
||||
if settings.AutonomousResearchEnabled && !previous.AutonomousResearchEnabled {
|
||||
e.signalAutonomousResearch()
|
||||
@@ -265,6 +308,7 @@ func (e *Engine) SetRuntimeSettings(settings RuntimeSettings) (RuntimeSettings,
|
||||
e.runtimeMu.Lock()
|
||||
e.runtime = previous
|
||||
e.runtimeMu.Unlock()
|
||||
e.applyRuntimePerformance(previous)
|
||||
return previous, err
|
||||
}
|
||||
}
|
||||
@@ -285,6 +329,9 @@ func (e *Engine) SetRuntimeSettings(settings RuntimeSettings) (RuntimeSettings,
|
||||
"view_mode": settings.ViewMode,
|
||||
"max_display_nodes": settings.MaxDisplayNodes,
|
||||
"low_power_mode": settings.LowPowerMode,
|
||||
"speed_mode": settings.SpeedMode,
|
||||
"speed_cpu_tasks": settings.SpeedCPUWorkers,
|
||||
"speed_gpu_tasks": settings.SpeedGPUInflight,
|
||||
"processing_mode": settings.ProcessingMode,
|
||||
"autonomous_research_enabled": settings.AutonomousResearchEnabled,
|
||||
"autonomous_research_idle_only": settings.AutonomousResearchIdleOnly,
|
||||
@@ -296,6 +343,13 @@ func (e *Engine) SetRuntimeSettings(settings RuntimeSettings) (RuntimeSettings,
|
||||
return settings, nil
|
||||
}
|
||||
|
||||
func (e *Engine) SpeedModeEnabled() bool {
|
||||
e.runtimeMu.RLock()
|
||||
enabled := e.runtime.SpeedMode
|
||||
e.runtimeMu.RUnlock()
|
||||
return enabled
|
||||
}
|
||||
|
||||
func (e *Engine) LearningEnabled() bool {
|
||||
e.runtimeMu.RLock()
|
||||
enabled := e.runtime.LearningEnabled
|
||||
|
||||
Reference in New Issue
Block a user