Commit 686536bc authored by Victor Costan's avatar Victor Costan Committed by Commit Bot

Blink/V8 serialization: Remove ToWireBytes from SerializedScriptValue.

After the removal of byte-swapping in V8 value serialization,
SerializedScriptValue::ToWireBytes() is strictly worse than
GetWireData(), as it creates a copy of the serialized value bytes.
Removing it makes copying obvious in the callers, so it can be removed
where that results in a performance improvement.

Bug: 
Change-Id: I2c299ac4baa89ba3d33210ce64762730390c4952
Reviewed-on: https://chromium-review.googlesource.com/804902Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Commit-Queue: Victor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521423}
parent 96b00dc9
......@@ -298,19 +298,6 @@ String SerializedScriptValue::ToWireString() const {
return wire_string;
}
void SerializedScriptValue::ToWireBytes(Vector<char>& result) const {
DCHECK(result.IsEmpty());
size_t result_size = (data_buffer_size_ + 1) & ~1;
result.resize(result_size);
memcpy(result.data(), data_buffer_.get(), data_buffer_size_);
if (result_size > data_buffer_size_) {
DCHECK_EQ(result_size, data_buffer_size_ + 1);
result[data_buffer_size_] = 0;
}
}
SerializedScriptValue::ImageBitmapContentsArray
SerializedScriptValue::TransferImageBitmapContents(
v8::Isolate* isolate,
......
......@@ -146,7 +146,6 @@ class CORE_EXPORT SerializedScriptValue
static scoped_refptr<SerializedScriptValue> NullValue();
String ToWireString() const;
void ToWireBytes(Vector<char>&) const;
StringView GetWireData() const {
return StringView(data_buffer_.get(), data_buffer_size_);
......
......@@ -12,6 +12,7 @@
#include "bindings/core/v8/serialization/SerializedScriptValueFactory.h"
#include "core/fileapi/File.h"
#include "platform/testing/UnitTestHelpers.h"
#include "platform/wtf/text/StringView.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace blink {
......@@ -25,11 +26,13 @@ TEST(SerializedScriptValueTest, WireFormatRoundTrip) {
scope.GetIsolate(), v8OriginalTrue,
SerializedScriptValue::SerializeOptions(), ASSERT_NO_EXCEPTION);
Vector<char> wireData;
sourceSerializedScriptValue->ToWireBytes(wireData);
StringView wire_data = sourceSerializedScriptValue->GetWireData();
DCHECK(wire_data.Is8Bit());
scoped_refptr<SerializedScriptValue> serializedScriptValue =
SerializedScriptValue::Create(wireData.data(), wireData.size());
SerializedScriptValue::Create(
reinterpret_cast<const char*>(wire_data.Characters8()),
wire_data.length());
v8::Local<v8::Value> deserialized =
serializedScriptValue->Deserialize(scope.GetIsolate());
EXPECT_TRUE(deserialized->IsTrue());
......
......@@ -37,6 +37,7 @@
#include "modules/indexeddb/IDBValue.h"
#include "platform/SharedBuffer.h"
#include "platform/bindings/V8PerIsolateData.h"
#include "platform/wtf/text/StringView.h"
#include "public/platform/WebBlobInfo.h"
#include "public/platform/WebData.h"
#include "public/platform/WebString.h"
......@@ -147,7 +148,10 @@ void SerializeV8Value(v8::Local<v8::Value> value,
scoped_refptr<SerializedScriptValue> serialized_value =
SerializedScriptValue::Serialize(isolate, value, options,
non_throwable_exception_state);
serialized_value->ToWireBytes(*wire_bytes);
StringView ssv_wire_data = serialized_value->GetWireData();
DCHECK(ssv_wire_data.Is8Bit());
DCHECK(wire_bytes->IsEmpty());
wire_bytes->Append(ssv_wire_data.Characters8(), ssv_wire_data.length());
// Sanity check that the serialization header has not changed, as the tests
// that use this method rely on the header format.
......
......@@ -12,6 +12,7 @@
#include "modules/notifications/NotificationOptions.h"
#include "modules/vibration/VibrationController.h"
#include "platform/wtf/Time.h"
#include "platform/wtf/text/StringView.h"
#include "public/platform/WebURL.h"
namespace blink {
......@@ -94,8 +95,11 @@ WebNotificationData CreateWebNotificationData(
if (exception_state.HadException())
return WebNotificationData();
StringView ssv_wire_data = serialized_script_value->GetWireData();
DCHECK(ssv_wire_data.Is8Bit());
Vector<char> serialized_data;
serialized_script_value->ToWireBytes(serialized_data);
serialized_data.ReserveInitialCapacity(ssv_wire_data.length());
serialized_data.Append(ssv_wire_data.Characters8(), ssv_wire_data.length());
web_data.data = serialized_data;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment