Changeset 89236 in webkit


Ignore:
Timestamp:
Jun 20, 2011 2:36:13 AM (13 years ago)
Author:
ager@chromium.org
Message:

2011-06-19 Mads Ager <ager@chromium.org>

Reviewed by Adam Barth.

[V8] Fix WebGL bindings for subarrays
https://bugs.webkit.org/show_bug.cgi?id=62864

Mark WebGL subarrays as independent of other DOM objects in the
V8 bindings. This allows us to clean them up independently which
greatly improves performance.

  • bindings/v8/V8Proxy.h: (WebCore::toV8Independent):
  • bindings/v8/custom/V8ArrayBufferViewCustom.h: (WebCore::constructWebGLArrayWithArrayBufferArgument): (WebCore::constructWebGLArray):
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r89235 r89236  
     12011-06-19  Mads Ager  <ager@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        [V8] Fix WebGL bindings for subarrays
     6        https://bugs.webkit.org/show_bug.cgi?id=62864
     7
     8        Mark WebGL subarrays as independent of other DOM objects in the
     9        V8 bindings. This allows us to clean them up independently which
     10        greatly improves performance.
     11
     12        * bindings/v8/V8Proxy.h:
     13        (WebCore::toV8Independent):
     14        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
     15        (WebCore::constructWebGLArrayWithArrayBufferArgument):
     16        (WebCore::constructWebGLArray):
     17
    1182011-06-20  Yuta Kitamura  <yutak@chromium.org>
    219
  • trunk/Source/WebCore/bindings/v8/V8Proxy.h

    r88100 r89236  
    413413    }
    414414
    415     template <class T> inline v8::Handle<v8::Object> toV8(PassRefPtr<T> object, v8::Local<v8::Object> holder)
     415    enum IndependentMode {
     416        MarkIndependent,
     417        DoNotMarkIndependent
     418    };
     419
     420    template <class T> inline v8::Handle<v8::Object> toV8(PassRefPtr<T> object, v8::Local<v8::Object> holder, IndependentMode independent = DoNotMarkIndependent)
    416421    {
    417422        object->ref();
    418         V8DOMWrapper::setJSWrapperForDOMObject(object.get(), v8::Persistent<v8::Object>::New(holder));
     423        v8::Persistent<v8::Object> handle = v8::Persistent<v8::Object>::New(holder);
     424        if (independent == MarkIndependent)
     425            handle.MarkIndependent();
     426        V8DOMWrapper::setJSWrapperForDOMObject(object.get(), handle);
    419427        return holder;
    420428    }
  • trunk/Source/WebCore/bindings/v8/custom/V8ArrayBufferViewCustom.h

    r87837 r89236  
    7373    if (hasIndexer)
    7474        args.Holder()->SetIndexedPropertiesToExternalArrayData(array.get()->baseAddress(), arrayType, array.get()->length());
    75     return toV8(array.release(), args.Holder());
     75    return toV8(array.release(), args.Holder(), MarkIndependent);
    7676}
    7777
     
    9999        // object. Not only is there no point from a performance
    100100        // perspective, but doing so causes errors in the subset() case.
    101         return toV8(array.release(), args.Holder());
     101        return toV8(array.release(), args.Holder(), MarkIndependent);
    102102    }
    103103
     
    158158    V8DOMWrapper::setDOMWrapper(args.Holder(), type, array.get());
    159159    args.Holder()->SetIndexedPropertiesToExternalArrayData(array.get()->baseAddress(), arrayType, array.get()->length());
    160     return toV8(array.release(), args.Holder());
     160    return toV8(array.release(), args.Holder(), MarkIndependent);
    161161}
    162162
Note: See TracChangeset for help on using the changeset viewer.