• commit-queue@webkit.org's avatar
    constructing TypedArray from another TypedArray is slow · d8d6c696
    commit-queue@webkit.org authored
    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: http://svn.webkit.org/repository/webkit/trunk@123819 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    d8d6c696
Crypto.cpp 2.52 KB