@@ -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