private EnvironmentResolver()
        {
            Register(EnvironmentMode.PlatformCharacteristic, RuntimeInformation.GetCurrentPlatform);
            Register(EnvironmentMode.RuntimeCharacteristic, RuntimeInformation.GetCurrentRuntime);
            Register(EnvironmentMode.JitCharacteristic, RuntimeInformation.GetCurrentJit);
            Register(EnvironmentMode.AffinityCharacteristic, RuntimeInformation.GetCurrentAffinity);
            Register(EnvironmentMode.EnvironmentVariablesCharacteristic, Array.Empty <EnvironmentVariable>);
            Register(EnvironmentMode.PowerPlanModeCharacteristic, () => PowerManagementApplier.Map(PowerPlan.HighPerformance));

            // TODO: find a better place
            Register(AccuracyMode.AnalyzeLaunchVarianceCharacteristic, () => false);
            Register(RunMode.UnrollFactorCharacteristic, job =>
            {
                // TODO: move it to another place and use the main resolver
                var strategy = job.ResolveValue(RunMode.RunStrategyCharacteristic, RunStrategy.Throughput);
                switch (strategy)
                {
                case RunStrategy.Throughput:
                    return(DefaultUnrollFactorForThroughput);

                case RunStrategy.ColdStart:
                case RunStrategy.Monitoring:
                    return(1);

                default:
                    throw new NotSupportedException($"Unknown runStrategy: {strategy}");
                }
            });
            Register(RunMode.InvocationCountCharacteristic, () => 1);
        }
        public void TestPowerPlanShouldNotChange()
        {
            var userPlan = PowerManagementHelper.CurrentPlan;
            var logger   = new OutputLogger(Output);
            var powerManagementApplier = new PowerManagementApplier(logger);
            var config = DefaultConfig.Instance.With(logger);

            powerManagementApplier.ApplyPerformancePlan(PowerPlan.UserPowerPlan);
            Assert.Equal(userPlan.ToString(), PowerManagementHelper.CurrentPlan.ToString());
            powerManagementApplier.ApplyUserPowerPlan();
            Assert.Equal(userPlan, PowerManagementHelper.CurrentPlan);
        }
        public void TestPowerPlanShouldNotChange()
        {
            var userPlan = PowerManagementHelper.CurrentPlan;
            var logger   = new OutputLogger(Output);
            var powerManagementApplier = new PowerManagementApplier(logger);

            powerManagementApplier.ApplyPerformancePlan(PowerManagementApplier.Map(PowerPlan.UserPowerPlan));

            Assert.Equal(userPlan.ToString(), PowerManagementHelper.CurrentPlan.ToString());
            powerManagementApplier.Dispose();

            Assert.Equal(userPlan, PowerManagementHelper.CurrentPlan);
        }
        public void TestSettingAndRevertingBackGuid()
        {
            var userPlan = PowerManagementHelper.CurrentPlan;
            var logger   = new OutputLogger(Output);
            var powerManagementApplier = new PowerManagementApplier(logger);
            var config = DefaultConfig.Instance.With(logger);

            powerManagementApplier.ApplyPerformancePlan(PowerPlan.HighPerformance);
            Assert.Equal(HighPerformancePlanGuid, PowerManagementHelper.CurrentPlan.ToString());
            Assert.Equal("High performance", PowerManagementHelper.CurrentPlanFriendlyName);
            powerManagementApplier.ApplyUserPowerPlan();
            Assert.Equal(userPlan, PowerManagementHelper.CurrentPlan);
        }
Beispiel #5
0
 /// <summary>
 /// Power plan for benchmarks.
 /// The default value is HighPerformance.
 /// <remarks>Only available for Windows.</remarks>
 /// </summary>
 public static Job WithPowerPlan(this Job job, PowerPlan powerPlan) => job.WithCore(j => j.Environment.PowerPlanMode = PowerManagementApplier.Map(powerPlan));