Description
Added a limit to the variable "iter" in order to prevent the chances of bad_alloc errors on systems that have high resolution. The limit is currently at 100,000. The resolution calculation will be stopped when either "iter" has surpassed the limit, or the 500ms gap has passed. Furthermore, the code currently creates an TimePoint for each "iter" (the variable passed into resolution()), which can led to memory issues. Instead, this fix only stores the previous timestamp as that is what is needed to determine the delta on the fly.
GitHub Issues
This is a PR aimed to fix the issue #3180 where an user ran the benchmark on a system that was able to run over 1 million iterations in under 500ms, causing a bad_alloc exception due to the amount of TimePoint instantiations. First, I decided to implement the iteration limit, but then I realized that there wasn't a need to store every single TimePoint. As such, I decided to compute deltas by only storing the current and previous timestamp information.
This is my first pull request, so I won't jump the gun and say the issue is closed. Thanks :)
The reason for the AppVeyor build fail is due to an InternalBenchmarkTest that does:
InternalBenchmark.tests.cpp(434): FAILED: CHECK( (end - start).count() == 2867251000 )With the changes (limiting how far the fake clock can run), the new result is 1847245000.