481 {
483 {
484 ForceChange(currentThreadCount, StateOrTransition.Initializing);
485 }
491 {
495 }
498 double num = (double)numCompletions / sampleDurationSeconds;
500 {
502 }
507 Complex complex = default(Complex);
508 Complex complex2 = default(Complex);
509 double num3 = 0.0;
510 Complex complex3 = default(Complex);
511 double num4 = 0.0;
512 StateOrTransition
state = StateOrTransition.Warmup;
515 {
516 double num6 = 0.0;
517 double num7 = 0.0;
518 for (
int i = 0;
i < num5;
i++)
519 {
522 }
523 double num8 = num6 / (double)num5;
524 double num9 = num7 / (double)num5;
525 if (num8 > 0.0 && num9 > 0.0)
526 {
527 double period = (double)num5 / ((
double)num5 / (double)
_wavePeriod + 1.0);
528 double num10 = (double)num5 / ((
double)num5 / (double)
_wavePeriod - 1.0);
531 if (num10 <= (double)num5)
532 {
534 }
537 {
539 }
540 else
541 {
543 }
544 if (complex.Abs() > 0.0)
545 {
547 state = StateOrTransition.ClimbingMove;
548 }
549 else
550 {
551 complex3 = new Complex(0.0, 0.0);
552 state = StateOrTransition.Stabilizing;
553 }
556 }
557 }
558 double num12 = Math.Min(1.0, Math.Max(-1.0, complex3.Real));
559 num12 *= Math.Min(1.0, Math.Max(0.0, num4));
561 num12 = Math.Pow(Math.Abs(num12),
_gainExponent) * (double)((num12 >= 0.0) ? 1 : (-1)) * num13;
564 if (num12 > 0.0 && threadPoolInstance._cpuUtilization > 95)
565 {
566 num12 = 0.0;
567 }
571 val = Math.Max(val, 1);
572 int maxThreads = threadPoolInstance._maxThreads;
573 int minThreadsGoal = threadPoolInstance.MinThreadsGoal;
577 val2 = Math.Min(maxThreads, val2);
578 val2 = Math.Max(minThreadsGoal, val2);
580 {
581 NativeRuntimeEventSource.
Log.ThreadPoolWorkerThreadAdjustmentStats(sampleDurationSeconds, num, complex.Real, complex2.Real, num3,
_averageThroughputNoise, complex3.Real, num4,
_currentControlSetting, (ushort)val, 0);
582 }
583 if (val2 != currentThreadCount)
584 {
588 }
591 }
static readonly NativeRuntimeEventSource Log
readonly double _targetThroughputRatio
Complex GetWaveComponent(double[] samples, int numSamples, double period)
void ChangeThreadCount(int newThreadCount, StateOrTransition state)
readonly double _targetSignalToNoiseRatio
readonly double _throughputErrorSmoothingFactor
double _secondsElapsedSinceLastChange
readonly double _maxSampleError
double _completionsSinceLastChange
double _averageThroughputNoise
int _accumulatedCompletionCount
readonly double _threadMagnitudeMultiplier
double _currentControlSetting
double _accumulatedSampleDurationSeconds
readonly double[] _threadCounts
void ForceChange(int newThreadCount, StateOrTransition state)
readonly int _samplesToMeasure
readonly int _maxThreadWaveMagnitude
readonly double _gainExponent
readonly double _maxChangePerSample
readonly double[] _samples
readonly double _maxChangePerSecond
static readonly PortableThreadPool ThreadPoolInstance