buffer: re-enable Fast API for Buffer.write #54526
buffer: re-enable Fast API for Buffer.write #54526nodejs-github-bot merged 1 commit intonodejs:mainfrom
Conversation
a930ad4 to
0fda693
Compare
23f1b23 to
8be5c43
Compare
test/parallel/test-buffer-write.js
Outdated
| { | ||
| let i = 0; | ||
|
|
||
| while (i < 1_000_000) { |
There was a problem hiding this comment.
Having a non-deterministic test is unpleasant.
There was a problem hiding this comment.
You can trigger fast api call using the method @targos implemented in his previous pull requests.
lemire
left a comment
There was a problem hiding this comment.
This looks to me. I wish we could use a deterministic test. Having to loop a million times to trigger and issue is both slow and error prone.
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #54526 +/- ##
==========================================
- Coverage 87.61% 87.60% -0.01%
==========================================
Files 650 650
Lines 182835 182889 +54
Branches 35382 35389 +7
==========================================
+ Hits 160185 160227 +42
- Misses 15925 15927 +2
- Partials 6725 6735 +10
|
This comment was marked as outdated.
This comment was marked as outdated.
jasnell
left a comment
There was a problem hiding this comment.
Some lint issues but otherwise LGTM
This comment was marked as outdated.
This comment was marked as outdated.
|
With the current commits, the following test will fail: let i = 0;
const testStr = "\xc2\x80"; // when stored in 1-byte chars, this is a valid UTF-8 encoding
const expected = Buffer.from(testStr).toString("hex");
for(; i < 1_000_000; i++) {
const buf = Buffer.from(testStr);
const ashex = buf.toString("hex");
if (ashex !== expected) {
console.log(`Decoding changed in iteration ${i} when changing to FastWriteStringUTF8, got ${ashex}, expected ${expected}`);
break;
}
}
if(i<1_000_000) {
console.error("FAILED after %d iterations",i);
} else
console.log("PASSED after %d iterations",i);The source string is stored as UTF16 (compressed to 1 byte), but still needs to be converted to UTF-8. The fast path can only be implemented as memcpy when only characters from the range 0-127 are present. |
I thought |
|
< when only characters from the range 0-127 are present @lemira does simdutf have this? |
|
Given the repeated activity since the failed commit, I assume it is known that the commit-queue originally failed, so I removed the label. Feel free to re-add. |
164f7f2 to
34edef6
Compare
|
Correct me if I'm wrong, but shouldn't the "PR-URL" meta be added by the bot? |
You're right. @ronag please remove the PR-URL from the commit. |
Re-enables fast Fast API for Buffer.write after fixing UTF8 handling. Fixes: nodejs#54521
* feat: convert_latin1_to_utf8_s Adds a "safe" version of convert_latin1_to_utf8 with a maximum output length. Refs: nodejs/node#54526 * various fixes * [no-ci] just some code reformatting --------- Co-authored-by: Robert Nagy <ronagy@icloud.com>
|
Landed in dc74f17 |
Re-enables fast Fast API for Buffer.write after fixing UTF8 handling. Fixes: #54521 PR-URL: #54526 Reviewed-By: Daniel Lemire <daniel@lemire.me> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Re-enables fast Fast API for Buffer.write after fixing UTF8 handling. Fixes: nodejs#54521 PR-URL: nodejs#54526 Reviewed-By: Daniel Lemire <daniel@lemire.me> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Re-enables fast Fast API for Buffer.write after fixing UTF8 handling. Fixes: nodejs#54521 PR-URL: nodejs#54526 Reviewed-By: Daniel Lemire <daniel@lemire.me> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Re-enables fast Fast API for Buffer.write after fixing UTF8 handling.