Commit 198fc70d authored by Jeremy Roman's avatar Jeremy Roman Committed by Commit Bot

Move WebGLAny implementation on top of blink::ToV8.

For non-trivial types (notably sequences), this is simpler and similarly efficient.

Change-Id: I129f433debcf5eb81755ce48056c58f4da6cf785
Reviewed-on: https://chromium-review.googlesource.com/c/1301848Reviewed-by: default avatarYuki Shiino <yukishiino@chromium.org>
Commit-Queue: Jeremy Roman <jbroman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#603126}
parent c9038290
......@@ -4,7 +4,9 @@
#include "third_party/blink/renderer/bindings/modules/v8/webgl_any.h"
#include "base/containers/span.h"
#include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h"
#include "third_party/blink/renderer/platform/bindings/to_v8.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
......@@ -17,51 +19,20 @@ ScriptValue WebGLAny(ScriptState* script_state, bool value) {
ScriptValue WebGLAny(ScriptState* script_state,
const bool* value,
uint32_t size) {
v8::Local<v8::Array> array = v8::Array::New(script_state->GetIsolate(), size);
for (uint32_t i = 0; i < size; ++i) {
if (!V8CallBoolean(array->CreateDataProperty(
script_state->GetContext(), i,
v8::Boolean::New(script_state->GetIsolate(), value[i]))))
return ScriptValue();
}
return ScriptValue(script_state, array);
auto span = base::make_span(value, size);
return ScriptValue(script_state, ToV8(span, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, const Vector<bool>& value) {
wtf_size_t size = value.size();
v8::Local<v8::Array> array = v8::Array::New(script_state->GetIsolate(), size);
for (wtf_size_t i = 0; i < size; ++i) {
if (!V8CallBoolean(array->CreateDataProperty(
script_state->GetContext(), i,
v8::Boolean::New(script_state->GetIsolate(), value[i]))))
return ScriptValue();
}
return ScriptValue(script_state, array);
return ScriptValue(script_state, ToV8(value, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, const Vector<unsigned>& value) {
wtf_size_t size = value.size();
v8::Local<v8::Array> array = v8::Array::New(script_state->GetIsolate(), size);
for (wtf_size_t i = 0; i < size; ++i) {
if (!V8CallBoolean(array->CreateDataProperty(
script_state->GetContext(), i,
v8::Integer::NewFromUnsigned(script_state->GetIsolate(),
value[i]))))
return ScriptValue();
}
return ScriptValue(script_state, array);
return ScriptValue(script_state, ToV8(value, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, const Vector<int>& value) {
wtf_size_t size = value.size();
v8::Local<v8::Array> array = v8::Array::New(script_state->GetIsolate(), size);
for (wtf_size_t i = 0; i < size; ++i) {
if (!V8CallBoolean(array->CreateDataProperty(
script_state->GetContext(), i,
v8::Integer::New(script_state->GetIsolate(), value[i]))))
return ScriptValue();
}
return ScriptValue(script_state, array);
return ScriptValue(script_state, ToV8(value, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, int value) {
......@@ -95,33 +66,23 @@ ScriptValue WebGLAny(ScriptState* script_state, String value) {
}
ScriptValue WebGLAny(ScriptState* script_state, WebGLObject* value) {
return ScriptValue(script_state,
ToV8(value, script_state->GetContext()->Global(),
script_state->GetIsolate()));
return ScriptValue(script_state, ToV8(value, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, DOMFloat32Array* value) {
return ScriptValue(script_state,
ToV8(value, script_state->GetContext()->Global(),
script_state->GetIsolate()));
return ScriptValue(script_state, ToV8(value, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, DOMInt32Array* value) {
return ScriptValue(script_state,
ToV8(value, script_state->GetContext()->Global(),
script_state->GetIsolate()));
return ScriptValue(script_state, ToV8(value, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, DOMUint8Array* value) {
return ScriptValue(script_state,
ToV8(value, script_state->GetContext()->Global(),
script_state->GetIsolate()));
return ScriptValue(script_state, ToV8(value, script_state));
}
ScriptValue WebGLAny(ScriptState* script_state, DOMUint32Array* value) {
return ScriptValue(script_state,
ToV8(value, script_state->GetContext()->Global(),
script_state->GetIsolate()));
return ScriptValue(script_state, ToV8(value, script_state));
}
} // namespace blink
......@@ -10,6 +10,7 @@
#include <utility>
#include "base/containers/span.h"
#include "base/optional.h"
#include "third_party/blink/renderer/platform/bindings/callback_function_base.h"
#include "third_party/blink/renderer/platform/bindings/callback_interface_base.h"
......@@ -206,6 +207,13 @@ inline v8::Local<v8::Value> ToV8SequenceInternal(
v8::Local<v8::Object> creation_context,
v8::Isolate*);
template <typename T, size_t Extent>
inline v8::Local<v8::Value> ToV8(base::span<T, Extent> value,
v8::Local<v8::Object> creation_context,
v8::Isolate* isolate) {
return ToV8SequenceInternal(value, creation_context, isolate);
}
template <typename T, wtf_size_t inlineCapacity>
inline v8::Local<v8::Value> ToV8(const Vector<T, inlineCapacity>& value,
v8::Local<v8::Object> creation_context,
......
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