TypedArrays: Improve dataview perf without endian param

V8 seems to be particularly slow converting an undefined value to false
in BooleanValue.

Revert this when we upgrade to V8 3.17, or whenever the fix discussed
in http://code.google.com/p/v8/issues/detail?id=2487 lands in V8.
This commit is contained in:
Dean McNamee
2013-01-15 19:35:52 +01:00
committed by isaacs
parent c93c99c7c3
commit 9fe3734f15

View File

@@ -673,7 +673,10 @@ class DataView {
return ThrowError("Wrong number of arguments.");
unsigned int index = args[0]->Uint32Value();
bool little_endian = args[1]->BooleanValue();
// NOTE(deanm): args[1]->BooleanValue when the argument was not passed in
// gives us the right answer, but seems to be very slow. This seems to be
// the cost of calling BooleanValue() on undefined.
bool little_endian = args.Length() > 1 ? args[1]->BooleanValue() : false;
// TODO(deanm): All of these things should be cacheable.
int element_size = v8_typed_array::SizeOfArrayElementForType(
args.This()->GetIndexedPropertiesExternalArrayDataType());
@@ -708,7 +711,10 @@ class DataView {
return ThrowError("Wrong number of arguments.");
unsigned int index = args[0]->Int32Value();
bool little_endian = args[2]->BooleanValue();
// NOTE(deanm): args[1]->BooleanValue when the argument was not passed in
// gives us the right answer, but seems to be very slow. This seems to be
// the cost of calling BooleanValue() on undefined.
bool little_endian = args.Length() > 1 ? args[1]->BooleanValue() : false;
// TODO(deanm): All of these things should be cacheable.
int element_size = v8_typed_array::SizeOfArrayElementForType(
args.This()->GetIndexedPropertiesExternalArrayDataType());