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.
Background
The current implementation of
Timer.measure
takes abody
closure that returns no parameter. Ifbody
performs some work (or produces some value) that needs to pass aprecondition
, we can perform that validation in the closure:If
performExpensiveValidation
needs to do a lot of work, we are (implicitly) capturing that work along with ourmeasure
(which might not be what we want).An alternative is to capture result and save to a local variable outside of scope:
This works… but another possible approach is to just change
Timer.measure
to return a value (which might beVoid
). Then, we can do something even simpler:Changes
Test Plan
Local tests (from
swift-collections-benchmark
) pass… but AFAIK none of these unit tests are specifically testingTimer.measure
. We could choose to add those unit tests here.For an "integration" test, we can try pointing a fork of
swift-collections
to this fork (vanvoorden/swift-collections@ce9db34) and then build to confirm our metrics are still collecting correctly.Checklist