Skip to content

Commit

Permalink
Use new V8 v2 write APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
danlapid authored and anonrig committed Feb 6, 2025
1 parent af0b225 commit e1f19fb
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 22 deletions.
5 changes: 2 additions & 3 deletions src/workerd/api/node/buffer.c++
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,8 @@ uint32_t writeInto(jsg::Lock& js,
return 0;
}

static constexpr jsg::JsString::WriteOptions flags =
static_cast<jsg::JsString::WriteOptions>(jsg::JsString::MANY_WRITES_EXPECTED |
jsg::JsString::NO_NULL_TERMINATION | jsg::JsString::REPLACE_INVALID_UTF8);
static constexpr jsg::JsString::WriteOptions flags = static_cast<jsg::JsString::WriteOptions>(
jsg::JsString::NO_NULL_TERMINATION | jsg::JsString::REPLACE_INVALID_UTF8);

switch (encoding) {
case Encoding::ASCII:
Expand Down
6 changes: 2 additions & 4 deletions src/workerd/api/streams/encoding.c++
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,10 @@ jsg::Ref<TextEncoderStream> TextEncoderStream::constructor(jsg::Lock& js) {
auto buffer = maybeBuffer.ToLocalChecked();

auto bytes = jsg::asBytes(buffer).releaseAsChars();
[[maybe_unused]] int read = 0;
[[maybe_unused]] auto written = str->WriteUtf8(js.v8Isolate, bytes.begin(), bytes.size(), &read,
v8::String::NO_NULL_TERMINATION | v8::String::REPLACE_INVALID_UTF8);
[[maybe_unused]] auto written = str->WriteUtf8V2(
js.v8Isolate, bytes.begin(), bytes.size(), v8::String::WriteFlags::kReplaceInvalidUtf8);

KJ_DASSERT(written == buffer->ByteLength());
KJ_DASSERT(read == str->Length());
controller->enqueue(js, v8::Uint8Array::New(buffer, 0, buffer->ByteLength()));
return js.resolvedPromise();
})},
Expand Down
14 changes: 10 additions & 4 deletions src/workerd/jsg/jsvalue.c++
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,10 @@ JsString::WriteIntoStatus JsString::writeInto(
Lock& js, kj::ArrayPtr<char> buffer, WriteOptions options) const {
WriteIntoStatus result = {0, 0};
if (buffer.size() > 0) {
result.written =
inner->WriteUtf8(js.v8Isolate, buffer.begin(), buffer.size(), &result.read, options);
result.written = inner->WriteUtf8V2(js.v8Isolate, buffer.begin(), buffer.size(), options);
if (result.written > 0) {
result.read = length(js);
}
}
return result;
}
Expand All @@ -296,7 +298,9 @@ JsString::WriteIntoStatus JsString::writeInto(
Lock& js, kj::ArrayPtr<uint16_t> buffer, WriteOptions options) const {
WriteIntoStatus result = {0, 0};
if (buffer.size() > 0) {
result.written = inner->Write(js.v8Isolate, buffer.begin(), 0, buffer.size(), options);
inner->WriteV2(js.v8Isolate, 0, buffer.size(), buffer.begin(), options);
result.read = length(js);
result.written = length(js);
}
return result;
}
Expand All @@ -305,7 +309,9 @@ JsString::WriteIntoStatus JsString::writeInto(
Lock& js, kj::ArrayPtr<kj::byte> buffer, WriteOptions options) const {
WriteIntoStatus result = {0, 0};
if (buffer.size() > 0) {
result.written = inner->WriteOneByte(js.v8Isolate, buffer.begin(), 0, buffer.size(), options);
inner->WriteOneByteV2(js.v8Isolate, 0, buffer.size(), buffer.begin(), options);
result.read = length(js);
result.written = length(js);
}
return result;
}
Expand Down
12 changes: 5 additions & 7 deletions src/workerd/jsg/jsvalue.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,11 +249,9 @@ class JsString final: public JsBase<v8::String, JsString> {
static JsString concat(Lock& js, const JsString& one, const JsString& two) KJ_WARN_UNUSED_RESULT;

enum WriteOptions {
NONE = v8::String::NO_OPTIONS,
MANY_WRITES_EXPECTED = v8::String::HINT_MANY_WRITES_EXPECTED,
NO_NULL_TERMINATION = v8::String::NO_NULL_TERMINATION,
PRESERVE_ONE_BYTE_NULL = v8::String::PRESERVE_ONE_BYTE_NULL,
REPLACE_INVALID_UTF8 = v8::String::REPLACE_INVALID_UTF8,
NONE = v8::String::WriteFlags::kNullTerminate,
NO_NULL_TERMINATION = v8::String::WriteFlags::kNone,
REPLACE_INVALID_UTF8 = v8::String::WriteFlags::kReplaceInvalidUtf8,
};

template <typename T>
Expand Down Expand Up @@ -442,11 +440,11 @@ inline kj::Array<T> JsString::toArray(Lock& js, WriteOptions options) const {
if constexpr (kj::isSameType<T, kj::byte>()) {
KJ_ASSERT(inner->ContainsOnlyOneByte());
auto buf = kj::heapArray<kj::byte>(inner->Length());
inner->WriteOneByte(js.v8Isolate, buf.begin(), 0, buf.size(), options);
inner->WriteOneByteV2(js.v8Isolate, 0, buf.size(), buf.begin(), options);
return kj::mv(buf);
} else {
auto buf = kj::heapArray<uint16_t>(inner->Length());
inner->Write(js.v8Isolate, buf.begin(), 0, buf.size(), options);
inner->WriteV2(js.v8Isolate, 0, buf.size(), buf.begin(), options);
return kj::mv(buf);
}
}
Expand Down
7 changes: 3 additions & 4 deletions src/workerd/jsg/value.h
Original file line number Diff line number Diff line change
Expand Up @@ -462,8 +462,7 @@ class StringWrapper {
#else
auto buf = kj::heapArray<char>(str->Utf8Length(isolate) + 1);
#endif
str->WriteUtf8(isolate, buf.begin(), buf.size());
buf[buf.size() - 1] = 0;
str->WriteUtf8V2(isolate, buf.begin(), buf.size(), v8::String::WriteFlags::kNullTerminate);
return kj::String(kj::mv(buf));
}

Expand Down Expand Up @@ -1018,8 +1017,8 @@ class DictWrapper {
#else
auto buf = kj::heapArray<char>(v8String->Utf8Length(isolate) + 1);
#endif
v8String->WriteUtf8(isolate, buf.begin(), buf.size());
buf[buf.size() - 1] = 0;
v8String->WriteUtf8V2(
isolate, buf.begin(), buf.size(), v8::String::WriteFlags::kNullTerminate);
return kj::String(kj::mv(buf));
};

Expand Down

0 comments on commit e1f19fb

Please sign in to comment.