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);
        }
Esempio n. 2
0
        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);
        }