Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(344)

Side by Side Diff: Source/bindings/templates/interface.cpp

Issue 1097773004: Sharing of SharedArrayBuffer via PostMessage transfer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: update for non-split typedarray hierarchy Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 {% extends 'interface_base.cpp' %} 1 {% extends 'interface_base.cpp' %}
2 2
3 3
4 {##############################################################################} 4 {##############################################################################}
5 {% block indexed_property_getter %} 5 {% block indexed_property_getter %}
6 {% if indexed_property_getter and not indexed_property_getter.is_custom %} 6 {% if indexed_property_getter and not indexed_property_getter.is_custom %}
7 {% set getter = indexed_property_getter %} 7 {% set getter = indexed_property_getter %}
8 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo <v8::Value>& info) 8 static void indexedPropertyGetter(uint32_t index, const v8::PropertyCallbackInfo <v8::Value>& info)
9 { 9 {
10 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder()); 10 {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 if (v8buffer->IsExternal()) { 718 if (v8buffer->IsExternal()) {
719 const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object); 719 const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object);
720 RELEASE_ASSERT(wrapperTypeInfo); 720 RELEASE_ASSERT(wrapperTypeInfo);
721 RELEASE_ASSERT(wrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink); 721 RELEASE_ASSERT(wrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink);
722 return toScriptWrappable(object)->toImpl<{{cpp_class}}>(); 722 return toScriptWrappable(object)->toImpl<{{cpp_class}}>();
723 } 723 }
724 724
725 // Transfer the ownership of the allocated memory to an ArrayBuffer without 725 // Transfer the ownership of the allocated memory to an ArrayBuffer without
726 // copying. 726 // copying.
727 v8::ArrayBuffer::Contents v8Contents = v8buffer->Externalize(); 727 v8::ArrayBuffer::Contents v8Contents = v8buffer->Externalize();
728 WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength() , 0); 728 WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength() , false, 0);
729 RefPtr<{{cpp_class}}> buffer = {{cpp_class}}::create(contents); 729 RefPtr<{{cpp_class}}> buffer = {{cpp_class}}::create(contents);
730 // Since this transfer doesn't allocate new memory, do not call 730 // Since this transfer doesn't allocate new memory, do not call
731 // DOMArrayBufferDeallocationObserver::blinkAllocatedMemory. 731 // DOMArrayBufferDeallocationObserver::blinkAllocatedMemory.
732 buffer->buffer()->setDeallocationObserverWithoutAllocationNotification(
733 DOMArrayBufferDeallocationObserver::instance());
734 buffer->associateWithWrapper(v8::Isolate::GetCurrent(), buffer->wrapperTypeI nfo(), object);
735
736 return buffer.get();
737 }
738
739 {% elif interface_name == 'SharedArrayBuffer' %}
740 {{cpp_class}}* V8SharedArrayBuffer::toImpl(v8::Local<v8::Object> object)
741 {
742 ASSERT(object->IsSharedArrayBuffer());
743 v8::Local<v8::SharedArrayBuffer> v8buffer = object.As<v8::SharedArrayBuffer> ();
744 if (v8buffer->IsExternal()) {
745 const WrapperTypeInfo* wrapperTypeInfo = toWrapperTypeInfo(object);
746 RELEASE_ASSERT(wrapperTypeInfo);
747 RELEASE_ASSERT(wrapperTypeInfo->ginEmbedder == gin::kEmbedderBlink);
748 return toScriptWrappable(object)->toImpl<{{cpp_class}}>();
749 }
750
751 // Transfer the ownership of the allocated memory to a SharedArrayBuffer
752 // without copying.
753 v8::SharedArrayBuffer::Contents v8Contents = v8buffer->Externalize();
754 WTF::ArrayBufferContents contents(v8Contents.Data(), v8Contents.ByteLength() , true, 0);
755 RefPtr<{{cpp_class}}> buffer = {{cpp_class}}::create(contents);
756 // Since this transfer doesn't allocate new memory, do not call
757 // DOMArrayBufferDeallocationObserver::blinkAllocatedMemory.
732 buffer->buffer()->setDeallocationObserverWithoutAllocationNotification( 758 buffer->buffer()->setDeallocationObserverWithoutAllocationNotification(
733 DOMArrayBufferDeallocationObserver::instance()); 759 DOMArrayBufferDeallocationObserver::instance());
734 buffer->associateWithWrapper(v8::Isolate::GetCurrent(), buffer->wrapperTypeI nfo(), object); 760 buffer->associateWithWrapper(v8::Isolate::GetCurrent(), buffer->wrapperTypeI nfo(), object);
735 761
736 return buffer.get(); 762 return buffer.get();
737 } 763 }
738 764
739 {% elif interface_name == 'ArrayBufferView' %} 765 {% elif interface_name == 'ArrayBufferView' %}
740 {{cpp_class}}* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object) 766 {{cpp_class}}* V8ArrayBufferView::toImpl(v8::Local<v8::Object> object)
741 { 767 {
(...skipping 29 matching lines...) Expand all
771 797
772 {% elif is_array_buffer_or_view %} 798 {% elif is_array_buffer_or_view %}
773 {{cpp_class}}* {{v8_class}}::toImpl(v8::Local<v8::Object> object) 799 {{cpp_class}}* {{v8_class}}::toImpl(v8::Local<v8::Object> object)
774 { 800 {
775 ASSERT(object->Is{{interface_name}}()); 801 ASSERT(object->Is{{interface_name}}());
776 ScriptWrappable* scriptWrappable = toScriptWrappable(object); 802 ScriptWrappable* scriptWrappable = toScriptWrappable(object);
777 if (scriptWrappable) 803 if (scriptWrappable)
778 return scriptWrappable->toImpl<{{cpp_class}}>(); 804 return scriptWrappable->toImpl<{{cpp_class}}>();
779 805
780 v8::Local<v8::{{interface_name}}> v8View = object.As<v8::{{interface_name}}> (); 806 v8::Local<v8::{{interface_name}}> v8View = object.As<v8::{{interface_name}}> ();
781 RefPtr<{{cpp_class}}> typedArray = {{cpp_class}}::create(V8ArrayBuffer::toIm pl(v8View->Buffer()), v8View->ByteOffset(), v8View->{% if interface_name == 'Dat aView' %}Byte{% endif %}Length()); 807 {% if interface_name == 'DataView' %}
808 RefPtr<{{cpp_class}}> typedArray = {{cpp_class}}::create(V8ArrayBuffer::toIm pl(v8View->Buffer()), v8View->ByteOffset(), v8View->ByteLength());
809 {% else %}
810 v8::Local<v8::Object> arrayBuffer = v8View->Buffer();
811 RefPtr<{{cpp_class}}> typedArray;
812 if (arrayBuffer->IsArrayBuffer()) {
813 typedArray = {{cpp_class}}::create(V8ArrayBuffer::toImpl(arrayBuffer), v 8View->ByteOffset(), v8View->Length());
814 } else if (arrayBuffer->IsSharedArrayBuffer()) {
815 typedArray = {{cpp_class}}::create(V8SharedArrayBuffer::toImpl(arrayBuff er), v8View->ByteOffset(), v8View->Length());
816 } else {
817 ASSERT_NOT_REACHED();
818 }
819 {% endif %}
782 typedArray->associateWithWrapper(v8::Isolate::GetCurrent(), typedArray->wrap perTypeInfo(), object); 820 typedArray->associateWithWrapper(v8::Isolate::GetCurrent(), typedArray->wrap perTypeInfo(), object);
783 821
784 return typedArray->toImpl<{{cpp_class}}>(); 822 return typedArray->toImpl<{{cpp_class}}>();
785 } 823 }
786 824
787 {% endif %} 825 {% endif %}
788 {% endblock %} 826 {% endblock %}
789 827
790 828
791 {##############################################################################} 829 {##############################################################################}
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 } 981 }
944 982
945 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %} 983 {% for method in methods if method.overloads and method.overloads.has_partial_ov erloads %}
946 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&)) 984 void {{v8_class}}::register{{method.name | blink_capitalize}}MethodForPartialInt erface(void (*method)(const v8::FunctionCallbackInfo<v8::Value>&))
947 { 985 {
948 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method; 986 {{cpp_class}}V8Internal::{{method.name}}MethodForPartialInterface = method;
949 } 987 }
950 {% endfor %} 988 {% endfor %}
951 {% endif %} 989 {% endif %}
952 {% endblock %} 990 {% endblock %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698