[vm] Avoid a copy when deserializing typed data to Dart_CObject.
Address regressions in the FileIO_write_* benchmarks.
TEST=ci
Change-Id: I87e9ddffc92b7cbd82a5d37477e649bdca03818f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/208483
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index ae7a6ad..37bb767 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -1636,10 +1636,9 @@
if (length == 0) {
data->value.as_typed_data.values = NULL;
} else {
- const intptr_t length_in_bytes = length * element_size;
- uint8_t* cdata = d->zone()->Alloc<uint8_t>(length_in_bytes);
- data->value.as_typed_data.values = cdata;
- d->ReadBytes(cdata, length_in_bytes);
+ data->value.as_typed_data.values =
+ const_cast<uint8_t*>(d->CurrentBufferAddress());
+ d->Advance(length * element_size);
}
d->AssignRef(data);
}