constructing TypedArray from another TypedArray is slow
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Jul 2012 00:25:04 +0000 (00:25 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Jul 2012 00:25:04 +0000 (00:25 +0000)
commit5f3dd6e11a4e39332bed7f47f4f0ba904d52ceb4
tree7139b8787e19d604e22862939cc2b2af82738cd2
parent9644c3d4f60c9a04e7b8e3dbadeb7d16c6fa8400
constructing TypedArray from another TypedArray is slow
https://bugs.webkit.org/show_bug.cgi?id=90838

Patch by Arnaud Renevier <a.renevier@sisa.samsung.com> on 2012-07-26
Reviewed by Kenneth Russell.

PerformanceTests:

* Bindings/typed-array-construct-from-same-type.html: Added.
* Bindings/typed-array-construct-from-typed.html: Added.

Source/WebCore:

When constructing a typed array from an array like element, try to
determine if the argument is a typed array. If so, cast the argument
to a typed array, and read each element with .item() method. That
avoid reading the value as a JSValue, and speedups construction by
approximatively 3x (even 30x if TypedArrays are both the same type).

In order to achieve that, we use virtual getType method. We can use
this information to cast the TypedArray to the actual type, and then
read the values from the source.

Introduce constructArrayBufferViewWithTypedArrayArgument template
function which returns a new typed array if first argument is a typed
array, or 0 otherwise.

This patch also replaces previous is<Type>Array() calls with new
getType method.

* bindings/js/JSArrayBufferViewHelper.h:
(WebCore::constructArrayBufferViewWithTypedArrayArgument):
(WebCore):
(WebCore::constructArrayBufferView):
* bindings/v8/SerializedScriptValue.cpp:
* html/canvas/DataView.h:
(DataView):
(WebCore::DataView::getType):
* html/canvas/WebGLRenderingContext.cpp:
(WebCore):
(WebCore::WebGLRenderingContext::readPixels):
(WebCore::WebGLRenderingContext::validateTexFuncData):
* page/Crypto.cpp:

Source/WTF:

Introduce virtual method getType on ArrayBufferView. It returns the actual
type of the view. This method replaces previous is<Type>Array() methods.

* wtf/ArrayBufferView.h:
* wtf/Float32Array.h:
(WTF::Float32Array::getType):
(Float32Array):
* wtf/Float64Array.h:
(WTF::Float64Array::getType):
(Float64Array):
* wtf/Int16Array.h:
(WTF::Int16Array::getType):
(Int16Array):
* wtf/Int32Array.h:
(WTF::Int32Array::getType):
(Int32Array):
* wtf/Int8Array.h:
(WTF::Int8Array::getType):
(Int8Array):
* wtf/IntegralTypedArrayBase.h:
* wtf/TypedArrayBase.h:
(TypedArrayBase):
(WTF::TypedArrayBase::item):
* wtf/Uint16Array.h:
(WTF::Uint16Array::getType):
(Uint16Array):
* wtf/Uint32Array.h:
(WTF::Uint32Array::getType):
(Uint32Array):
* wtf/Uint8Array.h:
(WTF::Uint8Array::getType):
(Uint8Array):
* wtf/Uint8ClampedArray.h:
(WTF::Uint8ClampedArray::getType):
(Uint8ClampedArray):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@123819 268f45cc-cd09-0410-ab3c-d52691b4dbfc
22 files changed:
PerformanceTests/Bindings/typed-array-construct-from-same-type.html [new file with mode: 0644]
PerformanceTests/Bindings/typed-array-construct-from-typed.html [new file with mode: 0644]
PerformanceTests/ChangeLog
Source/WTF/ChangeLog
Source/WTF/wtf/ArrayBufferView.h
Source/WTF/wtf/Float32Array.h
Source/WTF/wtf/Float64Array.h
Source/WTF/wtf/Int16Array.h
Source/WTF/wtf/Int32Array.h
Source/WTF/wtf/Int8Array.h
Source/WTF/wtf/IntegralTypedArrayBase.h
Source/WTF/wtf/TypedArrayBase.h
Source/WTF/wtf/Uint16Array.h
Source/WTF/wtf/Uint32Array.h
Source/WTF/wtf/Uint8Array.h
Source/WTF/wtf/Uint8ClampedArray.h
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSArrayBufferViewHelper.h
Source/WebCore/bindings/v8/SerializedScriptValue.cpp
Source/WebCore/html/canvas/DataView.h
Source/WebCore/html/canvas/WebGLRenderingContext.cpp
Source/WebCore/page/Crypto.cpp