[Windows][Concurrency] Use the same clock as Dispatch. #76310
Merged
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
The Concurrency runtime calculates deadlines for scheduling itself using
swift_get_time(); unfortunately, on Windows that was usingQueryPerformanceCounter(), while Dispatch usesQueryInterruptTimePrecise(). The problem with that is that the two do not necessarily correspond at all. In generalQueryPerformanceCounter()may be using any of a number of hardware timers depending on the machine on which we're running.In the VM I was testing on, the two differed by 20ms, but the worst case is that they are completely unrelated, in which case
Task.sleep()will wait essentially a random amount of time.Fixes #72095.
rdar://135413803