-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clean up Stopwatch a bit #111834
Clean up Stopwatch a bit #111834
Conversation
- Remove unnecessary Reset call from ctor - Remove unnecessary branch for _elapsed < 0 - Remove some defunct comments - Clean up style of Stop to match that of Start
Are the |
- Use expression-bodied properties - Remove unnecessary Debug.Asserts - Remove private method whose impl could just have been that of an existing public property - Change a private GetXx method to an Xx property. - Remove some type names that could be inferred
They're not needed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice
/ba-g unrelated infra |
if (_elapsed < 0) | ||
{ | ||
// When measuring small time periods the Stopwatch.Elapsed* | ||
// properties can return negative values. This is due to | ||
// bugs in the basic input/output system (BIOS) or the hardware | ||
// abstraction layer (HAL) on machines with variable-speed CPUs | ||
// (e.g. Intel SpeedStep). | ||
|
||
_elapsed = 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe we still support CPUs that could have this issue on Linux, although such processors are increasingly rare.
The Intel Architecture Manual covers that RDTSC is tied to the processor frequency for Pentium M processors (family [06H], models [09H, 0DH]); for Pentium 4 processors, Intel Xeon processors
(family [0FH], models [00H, 01H, or 02H]); and for P6 family processors
For a constant rate that is not tied to the CPU frequency, you instead need: Pentium 4 processors, Intel Xeon processors (family [0FH], models [03H and higher]); for Intel Core Solo
and Intel Core Duo processors (family [06H], model [0EH]); for the Intel Xeon processor 5100 series and Intel
Core 2 Duo processors (family [06H], model [0FH]); for Intel Core 2 and Intel Xeon processors (family [06H],
DisplayModel [17H]); for Intel Atom processors (family [06H], DisplayModel [1CH]).
But even more so, it is technically dependent on querying that the CPU supports Invariant TSC
by querying CPUID 0x8000_0007
and then reading EDX bit 8
.
QPC
on Windows and CLOCK_MONOTONIC
on Unix is supposed to normalize this, but historically there have been bugs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
Closes #66734
Related to #111829