{{ message }}
Implement pure_ruby EM.current time#1015
Open
nevans wants to merge 10 commits into
Open
Conversation
This is the same ruby versions action used by all stdlib gems, so it will keep CI up-to-date with new ruby releasese automatically.
b07872c to
c571bcb
Compare
Contributor
Author
I don't know what's going on here, but it seems to faile consistently, and it works fine under Windows with all other versions of ruby (including 3.5-dev).
c571bcb to
97c1ff6
Compare
It feels the builds get randomly hit by one or more job that just go a bit slower than the others which impacts the flakier tests. With so many jobs in the matrix, builds are almost guaranteed to get hit by at least one of them behaving so badly that they fail. Perhaps, by merging the `pure_ruby` step into the build job, the odds of every job in the matrix completing on the first attempt are improved.
This already existed on Reactor#current_loop_time, we just needed to forward to it from the singleton method on `EM`. For now, I kept the same name for the Reactor attr_reader but added an alias to it. This enables four existing tests. They are very slow in pure ruby mode, but they do pass!
This means that `Reactor.current_loop_time` will be seconds (as a Float) not a Time object. That should save some memory allocation, which is nice for something like this that's updated every time through the loop.
Maybe there's a miniscule performance improvement by using Integer vs Float, but that's not the primary motivation. The goal was to match the behavior of the C++ extension's `EventMachine_t::GetRealTime()`.
97c1ff6 to
0632379
Compare
bahmn1
approved these changes
May 29, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.

This already existed on
EM::Reactor#current_loop_time, we just needed to forward to it from the singleton method onEM. This enables four more existing tests. They are very slow in pure ruby mode, but they do pass!I converted the current_loop_time to use
CLOCK_MONOTONIC, for the obvious reasons.And current_loop_time is now stored as a microsecond integer (not a
Timeobject):The reactor loop is the kind of hotspot where that's worth considering.
EventMachine_t::GetRealTime().