Move more time functions to native code. NFC#16439
Merged
Conversation
071e9be to
d755dfe
Compare
f6098a6 to
cc94147
Compare
sbc100
added a commit
that referenced
this pull request
Mar 8, 2022
…unction. NFC This test was under `core` instead of `other`. Avoiding the use of `clock_gettime` since I'm about move that to natice code with #16439.
cc94147 to
01febf8
Compare
01febf8 to
e29e125
Compare
e29e125 to
61b3005
Compare
kleisauke
approved these changes
Mar 9, 2022
Collaborator
kleisauke
left a comment
There was a problem hiding this comment.
LGTM! Left a possible further improvement as inline comment.
| // Represents whether emscripten_get_now is guaranteed monotonic; the Date.now | ||
| // implementation is not :( | ||
| $nowIsMonotonic__internal: true, | ||
| #if MIN_IE_VERSION <= 9 || MIN_FIREFOX_VERSION <= 14 || MIN_CHROME_VERSION <= 23 || MIN_SAFARI_VERSION <= 80400 // https://caniuse.com/#feat=high-resolution-time |
Collaborator
There was a problem hiding this comment.
This conditional directive is duplicated three times in this file. As an possible follow-up, perhaps we could make a performance.now() polyfill in src/polyfill that calls Date.now() - nowOffset if unsupported (e.g. https://gist.github.com/paulirish/5438650)? Then we could just call that polyfill throughout this file.
Collaborator
Author
There was a problem hiding this comment.
Sure! Feel free to propose a PR.. or open a bug to refactor that.
I'm pretty this is going to be codesize win for a lot of codebases even though its not showing up in our (minimal) codesize tests.
61b3005 to
6229f01
Compare
sbc100
added a commit
that referenced
this pull request
Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit was only recently made in #16966. The reason we made this change was made was because we had certain C library calls that were implemented in JS that returned `time_t`. Since returning 64-bit values from JS functions is not always easy (we don't always have WASM_BIGINT available) that simplest solution was to define `time_t` to 32-bit which doesn't have issues at the JS boundary. However, in the intervening time many of the `time_t`-returning function have been moved into native code (See #16606 and #16439) with only two remaining: _mktime_js and _timegm_js. So this change redefines just those two functions to return `int` while keeping `time_t` itself as 64-bit. Fixes: #17393
sbc100
added a commit
that referenced
this pull request
Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit was only recently made in #16966. The reason we made this change was made was because we had certain C library calls that were implemented in JS that returned `time_t`. Since returning 64-bit values from JS functions is not always easy (we don't always have WASM_BIGINT available) that simplest solution was to define `time_t` to 32-bit which doesn't have issues at the JS boundary. However, in the intervening time many of the `time_t`-returning function have been moved into native code (See #16606 and #16439) with only two remaining: _mktime_js and _timegm_js. So this change redefines just those two functions to return `int` while keeping `time_t` itself as 64-bit. Fixes: #17393
sbc100
added a commit
that referenced
this pull request
Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit was only recently made in #16966. The reason we made this change was made was because we had certain C library calls that were implemented in JS that returned `time_t`. Since returning 64-bit values from JS functions is not always easy (we don't always have WASM_BIGINT available) that simplest solution was to define `time_t` to 32-bit which doesn't have issues at the JS boundary. However, in the intervening time many of the `time_t`-returning function have been moved into native code (See #16606 and #16439) with only two remaining: _mktime_js and _timegm_js. So this change redefines just those two functions to return `int` while keeping `time_t` itself as 64-bit. Fixes: #17393
sbc100
added a commit
that referenced
this pull request
Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit was only recently made in #16966. The reason we made this change was made was because we had certain C library calls that were implemented in JS that returned `time_t`. Since returning 64-bit values from JS functions is not always easy (we don't always have WASM_BIGINT available) that simplest solution was to define `time_t` to 32-bit which doesn't have issues at the JS boundary. However, in the intervening time many of the `time_t`-returning function have been moved into native code (See #16606 and #16439) with only two remaining: _mktime_js and _timegm_js. So this change redefines just those two functions to return `int` while keeping `time_t` itself as 64-bit. Fixes: #17393
sbc100
added a commit
that referenced
this pull request
Jul 8, 2022
This brings us back in line with upstream musl. The change to 32-bit was only recently made in #16966. The reason we made this change was made was because we had certain C library calls that were implemented in JS that returned `time_t`. Since returning 64-bit values from JS functions is not always easy (we don't always have WASM_BIGINT available) that simplest solution was to define `time_t` to 32-bit which doesn't have issues at the JS boundary. However, in the intervening time many of the `time_t`-returning function have been moved into native code (See #16606 and #16439) with only two remaining: _mktime_js and _timegm_js. So this change redefines just those two functions to return `int` while keeping `time_t` itself as 64-bit. Fixes: #17393
xbcnn
pushed a commit
to xbcnn/emscripten
that referenced
this pull request
Jul 22, 2022
This brings us back in line with upstream musl. The change to 32-bit was only recently made in emscripten-core#16966. The reason we made this change was made was because we had certain C library calls that were implemented in JS that returned `time_t`. Since returning 64-bit values from JS functions is not always easy (we don't always have WASM_BIGINT available) that simplest solution was to define `time_t` to 32-bit which doesn't have issues at the JS boundary. However, in the intervening time many of the `time_t`-returning function have been moved into native code (See emscripten-core#16606 and emscripten-core#16439) with only two remaining: _mktime_js and _timegm_js. So this change redefines just those two functions to return `int` while keeping `time_t` itself as 64-bit. Fixes: emscripten-core#17393
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.
I'm pretty this is going to be codesize win for a lot of
codebases even though its not showing up in our (minimal)
codesize tests.
Inspired by #16401