public bool Update(out PerformanceLevelChangeEventArgs changeArgs) { changeArgs = new PerformanceLevelChangeEventArgs(); changeArgs.PerformanceControlMode = PerformanceControlMode; if (PerformanceControlMode == PerformanceControlMode.System) { bool changed = CurrentCpuLevel != Constants.UnknownPerformanceLevel || CurrentGpuLevel != Constants.UnknownPerformanceLevel; CurrentCpuLevel = Constants.UnknownPerformanceLevel; CurrentGpuLevel = Constants.UnknownPerformanceLevel; if (changed) { changeArgs.CpuLevel = CurrentCpuLevel; changeArgs.GpuLevel = CurrentGpuLevel; changeArgs.CpuLevelDelta = 0; changeArgs.GpuLevelDelta = 0; } return(changed); } if (CpuLevel != Constants.UnknownPerformanceLevel || GpuLevel != Constants.UnknownPerformanceLevel) { if (CpuLevel != CurrentCpuLevel || GpuLevel != CurrentGpuLevel) { var tempCpuLevel = CpuLevel; var tempGpuLevel = GpuLevel; if (m_PerformanceLevelControl.SetPerformanceLevel(ref tempCpuLevel, ref tempGpuLevel)) { changeArgs.CpuLevelDelta = ComputeDelta(CurrentCpuLevel, tempCpuLevel); changeArgs.GpuLevelDelta = ComputeDelta(CurrentGpuLevel, tempGpuLevel); if (tempCpuLevel != CpuLevel || tempGpuLevel != GpuLevel) { Debug.Log($"Requested CPU level {CpuLevel} and GPU level {GpuLevel} was overriden by System with CPU level {tempCpuLevel} and GPU level {tempGpuLevel}"); } CurrentCpuLevel = CpuLevel; CurrentGpuLevel = GpuLevel; } else { changeArgs.CpuLevelDelta = 0; changeArgs.GpuLevelDelta = 0; CurrentCpuLevel = Constants.UnknownPerformanceLevel; CurrentGpuLevel = Constants.UnknownPerformanceLevel; } changeArgs.CpuLevel = CurrentCpuLevel; changeArgs.GpuLevel = CurrentGpuLevel; return(true); } } return(false); }
public bool Update(out PerformanceLevelChangeEventArgs changeArgs) { changeArgs = new PerformanceLevelChangeEventArgs(); changeArgs.PerformanceControlMode = PerformanceControlMode; if (PerformanceControlMode == PerformanceControlMode.System) { bool changed = CurrentCpuLevel != Constants.UnknownPerformanceLevel || CurrentGpuLevel != Constants.UnknownPerformanceLevel; CurrentCpuLevel = Constants.UnknownPerformanceLevel; CurrentGpuLevel = Constants.UnknownPerformanceLevel; if (changed) { changeArgs.CpuLevel = CurrentCpuLevel; changeArgs.GpuLevel = CurrentGpuLevel; changeArgs.CpuLevelDelta = 0; changeArgs.GpuLevelDelta = 0; } return(changed); } if (CpuLevel != Constants.UnknownPerformanceLevel || GpuLevel != Constants.UnknownPerformanceLevel) { if (CpuLevel != CurrentCpuLevel || GpuLevel != CurrentGpuLevel) { if (m_PerformanceLevelControl.SetPerformanceLevel(CpuLevel, GpuLevel)) { changeArgs.CpuLevelDelta = ComputeDelta(CurrentCpuLevel, CpuLevel); changeArgs.GpuLevelDelta = ComputeDelta(CurrentGpuLevel, GpuLevel); CurrentCpuLevel = CpuLevel; CurrentGpuLevel = GpuLevel; } else { changeArgs.CpuLevelDelta = 0; changeArgs.GpuLevelDelta = 0; CurrentCpuLevel = Constants.UnknownPerformanceLevel; CurrentGpuLevel = Constants.UnknownPerformanceLevel; } changeArgs.CpuLevel = CurrentCpuLevel; changeArgs.GpuLevel = CurrentGpuLevel; return(true); } } return(false); }
public IEnumerator PerformanceLevelChangeEvent_Works() { var subsystem = AdaptivePerformanceGeneralSettings.Instance.Manager.activeLoader.GetLoadedSubsystem <SimulatorAdaptivePerformanceSubsystem>(); subsystem.AcceptsPerformanceLevel = true; // boost mode disables performance level acceptance and those tests can run before this. var ap = Holder.Instance; var ctrl = ap.DevicePerformanceControl; ctrl.AutomaticPerformanceControl = false; var ps = ap.PerformanceStatus; ctrl.CpuLevel = 1; ctrl.GpuLevel = 2; yield return(null); Assert.AreEqual(1, ps.PerformanceMetrics.CurrentCpuLevel); Assert.AreEqual(2, ps.PerformanceMetrics.CurrentGpuLevel); var eventArgs = new PerformanceLevelChangeEventArgs(); PerformanceLevelChangeHandler eventHandler = delegate(PerformanceLevelChangeEventArgs args) { eventArgs = args; }; ps.PerformanceLevelChangeEvent += eventHandler; ctrl.CpuLevel = 4; ctrl.GpuLevel = 0; yield return(null); Assert.AreEqual(4, ps.PerformanceMetrics.CurrentCpuLevel); Assert.AreEqual(4, eventArgs.CpuLevel); Assert.AreEqual(0, ps.PerformanceMetrics.CurrentGpuLevel); Assert.AreEqual(0, eventArgs.GpuLevel); Assert.AreEqual(3, eventArgs.CpuLevelDelta); Assert.AreEqual(-2, eventArgs.GpuLevelDelta); Assert.AreEqual(false, eventArgs.ManualOverride); Assert.AreEqual(PerformanceControlMode.Manual, eventArgs.PerformanceControlMode); }