Browse Source

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.
v0.9.7-release
Dean McNamee 12 years ago
committed by isaacs
parent
commit
9fe3734f15
  1. 10
      src/v8_typed_array.cc

10
src/v8_typed_array.cc

@ -673,7 +673,10 @@ class DataView {
return ThrowError("Wrong number of arguments."); return ThrowError("Wrong number of arguments.");
unsigned int index = args[0]->Uint32Value(); 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. // TODO(deanm): All of these things should be cacheable.
int element_size = v8_typed_array::SizeOfArrayElementForType( int element_size = v8_typed_array::SizeOfArrayElementForType(
args.This()->GetIndexedPropertiesExternalArrayDataType()); args.This()->GetIndexedPropertiesExternalArrayDataType());
@ -708,7 +711,10 @@ class DataView {
return ThrowError("Wrong number of arguments."); return ThrowError("Wrong number of arguments.");
unsigned int index = args[0]->Int32Value(); 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. // TODO(deanm): All of these things should be cacheable.
int element_size = v8_typed_array::SizeOfArrayElementForType( int element_size = v8_typed_array::SizeOfArrayElementForType(
args.This()->GetIndexedPropertiesExternalArrayDataType()); args.This()->GetIndexedPropertiesExternalArrayDataType());

Loading…
Cancel
Save