@@ -16,8 +16,8 @@ enum class NormalizationState : UINT8
1616};
1717
1818static  const  int  NsPerYieldMeasurementCount = 8 ;
19+ static  const  int  PartialInitializationMeasurementCount = 2 ; //  number of measurements to be done during partial initialization
1920static  const  unsigned  int  MeasurementPeriodMs = 4000 ;
20- static  const  int  s_partialInitializationMeasurementCount = 2 ; //  number of measurements to be done during partial initialization
2121
2222static  const  unsigned  int  NsPerS = 1000  * 1000  * 1000 ;
2323
@@ -122,7 +122,7 @@ void YieldProcessorNormalization::PerformMeasurement()
122122
123123    _ASSERTE (s_isMeasurementScheduled ^ (s_normalizationState == NormalizationState::Uninitialized));
124124
125-     double  latestNsPerYield =  0 ;  //  initialize to supress error C4701 
125+     double  latestNsPerYield; 
126126    if  (s_normalizationState == NormalizationState::Initialized)
127127    {
128128        if  (GetTickCount () - s_previousNormalizationTimeMs < MeasurementPeriodMs)
@@ -154,15 +154,16 @@ void YieldProcessorNormalization::PerformMeasurement()
154154            s_performanceCounterTicksPerS = li.QuadPart ;
155155
156156            startIndex = 0 ;
157-             endIndex = s_partialInitializationMeasurementCount ;
157+             endIndex = PartialInitializationMeasurementCount ;
158158        }
159159        else 
160160        {
161-             startIndex = s_partialInitializationMeasurementCount ;
161+             startIndex = PartialInitializationMeasurementCount ;
162162            endIndex = NsPerYieldMeasurementCount;
163163        }
164164
165165        unsigned  int  measureDurationUs = DetermineMeasureDurationUs ();
166+         latestNsPerYield = 0 ;
166167        for  (int  i = startIndex; i < endIndex; ++i)
167168        {
168169            latestNsPerYield = MeasureNsPerYield (measureDurationUs);
@@ -172,16 +173,11 @@ void YieldProcessorNormalization::PerformMeasurement()
172173                AtomicStore (&s_establishedNsPerYield, latestNsPerYield);
173174            }
174175
175-             if  (i < NsPerYieldMeasurementCount  - 1 )
176+             if  (i < endIndex  - 1 )
176177            {
177178                FireEtwYieldProcessorMeasurement (GetClrInstanceId (), latestNsPerYield, s_establishedNsPerYield);
178179            }
179180        }
180- 
181-         s_normalizationState =
182-             (s_normalizationState == NormalizationState::Uninitialized) ?
183-             NormalizationState::PartiallyInitialized :
184-             NormalizationState::Initialized;
185181    }
186182    else 
187183    {
@@ -191,8 +187,8 @@ void YieldProcessorNormalization::PerformMeasurement()
191187
192188    double  establishedNsPerYield = s_nsPerYieldMeasurements[0 ];
193189    int  endIndex =
194-         (s_normalizationState == NormalizationState::PartiallyInitialized ) ?
195-         s_partialInitializationMeasurementCount  :
190+         (s_normalizationState == NormalizationState::Uninitialized ) ?
191+         PartialInitializationMeasurementCount  :
196192        NsPerYieldMeasurementCount;
197193    for  (int  i = 1 ; i < endIndex; ++i)
198194    {
@@ -223,7 +219,15 @@ void YieldProcessorNormalization::PerformMeasurement()
223219
224220    GCHeapUtilities::GetGCHeap ()->SetYieldProcessorScalingFactor ((float )yieldsPerNormalizedYield);
225221
226-     s_previousNormalizationTimeMs = GetTickCount ();
222+     if  (s_normalizationState != NormalizationState::Uninitialized)
223+     {
224+         s_previousNormalizationTimeMs = GetTickCount ();
225+     }
226+ 
227+     s_normalizationState =
228+         (s_normalizationState == NormalizationState::Uninitialized) ?
229+         NormalizationState::PartiallyInitialized :
230+         NormalizationState::Initialized;
227231    s_isMeasurementScheduled = false ;
228232}
229233
@@ -239,14 +243,14 @@ void YieldProcessorNormalization::ScheduleMeasurementIfNecessary()
239243    CONTRACTL_END;
240244
241245    NormalizationState normalizationState = VolatileLoadWithoutBarrier (&s_normalizationState);
242-     if  (normalizationState == NormalizationState::Initialized || normalizationState == NormalizationState::PartiallyInitialized )
246+     if  (normalizationState == NormalizationState::Initialized)
243247    {
244248        if  (GetTickCount () - s_previousNormalizationTimeMs < MeasurementPeriodMs)
245249        {
246250            return ;
247251        }
248252    }
249-     else  if  (normalizationState == NormalizationState::Uninitialized)
253+     else  if  (normalizationState == NormalizationState::Uninitialized || normalizationState == NormalizationState::PartiallyInitialized )
250254    {
251255    }
252256    else 
0 commit comments