Skip to content

Commit 805d9f2

Browse files
committed
[JSC] Drop PassRefPtr from ArrayBuffer
https://bugs.webkit.org/show_bug.cgi?id=168455 Reviewed by Geoffrey Garen. Source/JavaScriptCore: This patch finally drops all the PassRefPtr in JSC. We changed PassRefPtr<ArrayBuffer> to RefPtr<ArrayBuffer>&&. Since ArrayBuffer may be nullptr if the array is neutered, we hold it as RefPtr<> instead of Ref<>. And we also drops 2 files, TypedArrayBase.h and IntegralTypedArrayBase.h. They are not used (and they are not referenced from the project file). * inspector/JavaScriptCallFrame.h: * jsc.cpp: (functionDollarAgentReceiveBroadcast): * runtime/ArrayBufferView.cpp: (JSC::ArrayBufferView::ArrayBufferView): * runtime/ArrayBufferView.h: (JSC::ArrayBufferView::possiblySharedBuffer): (JSC::ArrayBufferView::unsharedBuffer): (JSC::ArrayBufferView::verifySubRangeLength): (JSC::ArrayBufferView::clampOffsetAndNumElements): * runtime/ClassInfo.h: * runtime/DataView.cpp: (JSC::DataView::DataView): (JSC::DataView::create): * runtime/DataView.h: * runtime/GenericTypedArrayView.h: * runtime/GenericTypedArrayViewInlines.h: (JSC::GenericTypedArrayView<Adaptor>::GenericTypedArrayView): (JSC::GenericTypedArrayView<Adaptor>::create): (JSC::GenericTypedArrayView<Adaptor>::subarray): * runtime/IntegralTypedArrayBase.h: Removed. * runtime/JSArrayBuffer.cpp: (JSC::JSArrayBuffer::JSArrayBuffer): (JSC::JSArrayBuffer::create): * runtime/JSArrayBuffer.h: * runtime/JSArrayBufferPrototype.cpp: (JSC::arrayBufferProtoFuncSlice): * runtime/JSArrayBufferView.cpp: (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext): * runtime/JSArrayBufferView.h: * runtime/JSArrayBufferViewInlines.h: (JSC::JSArrayBufferView::possiblySharedImpl): (JSC::JSArrayBufferView::unsharedImpl): * runtime/JSCell.cpp: (JSC::JSCell::slowDownAndWasteMemory): (JSC::JSCell::getTypedArrayImpl): * runtime/JSCell.h: * runtime/JSDataView.cpp: (JSC::JSDataView::create): (JSC::JSDataView::possiblySharedTypedImpl): (JSC::JSDataView::unsharedTypedImpl): (JSC::JSDataView::getTypedArrayImpl): * runtime/JSDataView.h: * runtime/JSGenericTypedArrayView.h: * runtime/JSGenericTypedArrayViewConstructorInlines.h: (JSC::constructGenericTypedArrayViewWithArguments): * runtime/JSGenericTypedArrayViewInlines.h: (JSC::JSGenericTypedArrayView<Adaptor>::create): (JSC::JSGenericTypedArrayView<Adaptor>::possiblySharedTypedImpl): (JSC::JSGenericTypedArrayView<Adaptor>::unsharedTypedImpl): (JSC::JSGenericTypedArrayView<Adaptor>::getTypedArrayImpl): * runtime/JSGenericTypedArrayViewPrototypeFunctions.h: (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate): * runtime/JSTypedArrays.cpp: (JSC::createUint8TypedArray): * runtime/TypedArrayBase.h: Removed. Source/WebCore: * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneDeserializer::readArrayBufferView): * css/FontFace.cpp: (WebCore::FontFace::create): * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: (WebCore::MediaPlayerPrivateAVFoundation::extractKeyURIKeyIDAndCertificateFromInitData): * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp: (WebCore::AVFWrapper::shouldWaitForLoadingOfResource): * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm: (WebCore::CDMSessionAVFoundationObjC::generateKeyRequest): * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource): Canonical link: https://commits.webkit.org/185519@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@212535 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent b74faa2 commit 805d9f2

34 files changed

Lines changed: 210 additions & 323 deletions

‎Source/JavaScriptCore/ChangeLog‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,75 @@
1+
2017-02-16 Yusuke Suzuki <utatane.tea@gmail.com>
2+
3+
[JSC] Drop PassRefPtr from ArrayBuffer
4+
https://bugs.webkit.org/show_bug.cgi?id=168455
5+
6+
Reviewed by Geoffrey Garen.
7+
8+
This patch finally drops all the PassRefPtr in JSC.
9+
We changed PassRefPtr<ArrayBuffer> to RefPtr<ArrayBuffer>&&.
10+
Since ArrayBuffer may be nullptr if the array is neutered,
11+
we hold it as RefPtr<> instead of Ref<>.
12+
13+
And we also drops 2 files, TypedArrayBase.h and IntegralTypedArrayBase.h.
14+
They are not used (and they are not referenced from the project file).
15+
16+
* inspector/JavaScriptCallFrame.h:
17+
* jsc.cpp:
18+
(functionDollarAgentReceiveBroadcast):
19+
* runtime/ArrayBufferView.cpp:
20+
(JSC::ArrayBufferView::ArrayBufferView):
21+
* runtime/ArrayBufferView.h:
22+
(JSC::ArrayBufferView::possiblySharedBuffer):
23+
(JSC::ArrayBufferView::unsharedBuffer):
24+
(JSC::ArrayBufferView::verifySubRangeLength):
25+
(JSC::ArrayBufferView::clampOffsetAndNumElements):
26+
* runtime/ClassInfo.h:
27+
* runtime/DataView.cpp:
28+
(JSC::DataView::DataView):
29+
(JSC::DataView::create):
30+
* runtime/DataView.h:
31+
* runtime/GenericTypedArrayView.h:
32+
* runtime/GenericTypedArrayViewInlines.h:
33+
(JSC::GenericTypedArrayView<Adaptor>::GenericTypedArrayView):
34+
(JSC::GenericTypedArrayView<Adaptor>::create):
35+
(JSC::GenericTypedArrayView<Adaptor>::subarray):
36+
* runtime/IntegralTypedArrayBase.h: Removed.
37+
* runtime/JSArrayBuffer.cpp:
38+
(JSC::JSArrayBuffer::JSArrayBuffer):
39+
(JSC::JSArrayBuffer::create):
40+
* runtime/JSArrayBuffer.h:
41+
* runtime/JSArrayBufferPrototype.cpp:
42+
(JSC::arrayBufferProtoFuncSlice):
43+
* runtime/JSArrayBufferView.cpp:
44+
(JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
45+
* runtime/JSArrayBufferView.h:
46+
* runtime/JSArrayBufferViewInlines.h:
47+
(JSC::JSArrayBufferView::possiblySharedImpl):
48+
(JSC::JSArrayBufferView::unsharedImpl):
49+
* runtime/JSCell.cpp:
50+
(JSC::JSCell::slowDownAndWasteMemory):
51+
(JSC::JSCell::getTypedArrayImpl):
52+
* runtime/JSCell.h:
53+
* runtime/JSDataView.cpp:
54+
(JSC::JSDataView::create):
55+
(JSC::JSDataView::possiblySharedTypedImpl):
56+
(JSC::JSDataView::unsharedTypedImpl):
57+
(JSC::JSDataView::getTypedArrayImpl):
58+
* runtime/JSDataView.h:
59+
* runtime/JSGenericTypedArrayView.h:
60+
* runtime/JSGenericTypedArrayViewConstructorInlines.h:
61+
(JSC::constructGenericTypedArrayViewWithArguments):
62+
* runtime/JSGenericTypedArrayViewInlines.h:
63+
(JSC::JSGenericTypedArrayView<Adaptor>::create):
64+
(JSC::JSGenericTypedArrayView<Adaptor>::possiblySharedTypedImpl):
65+
(JSC::JSGenericTypedArrayView<Adaptor>::unsharedTypedImpl):
66+
(JSC::JSGenericTypedArrayView<Adaptor>::getTypedArrayImpl):
67+
* runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
68+
(JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
69+
* runtime/JSTypedArrays.cpp:
70+
(JSC::createUint8TypedArray):
71+
* runtime/TypedArrayBase.h: Removed.
72+
173
2017-02-16 Keith Miller <keith_miller@apple.com>
274

375
ASSERTION FAILED: vm.heap.mutatorState() == MutatorState::Running || vm.apiLock().ownerThread() != std::this_thread::get_id()

‎Source/JavaScriptCore/inspector/JavaScriptCallFrame.h‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "debugger/DebuggerCallFrame.h"
3030
#include "interpreter/CallFrame.h"
3131
#include <wtf/Forward.h>
32-
#include <wtf/PassRefPtr.h>
3332
#include <wtf/RefCounted.h>
3433
#include <wtf/text/TextPosition.h>
3534

‎Source/JavaScriptCore/jsc.cpp‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2553,7 +2553,8 @@ EncodedJSValue JSC_HOST_CALL functionDollarAgentReceiveBroadcast(ExecState* exec
25532553
}
25542554

25552555
RefPtr<ArrayBuffer> nativeBuffer = ArrayBuffer::create(message->releaseContents());
2556-
JSArrayBuffer* jsBuffer = JSArrayBuffer::create(vm, exec->lexicalGlobalObject()->arrayBufferStructure(nativeBuffer->sharingMode()), nativeBuffer);
2556+
ArrayBufferSharingMode sharingMode = nativeBuffer->sharingMode();
2557+
JSArrayBuffer* jsBuffer = JSArrayBuffer::create(vm, exec->lexicalGlobalObject()->arrayBufferStructure(sharingMode), WTFMove(nativeBuffer));
25572558

25582559
MarkedArgumentBuffer args;
25592560
args.append(jsBuffer);

‎Source/JavaScriptCore/runtime/ArrayBufferView.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@
2929
namespace JSC {
3030

3131
ArrayBufferView::ArrayBufferView(
32-
PassRefPtr<ArrayBuffer> buffer,
32+
RefPtr<ArrayBuffer>&& buffer,
3333
unsigned byteOffset)
3434
: m_byteOffset(byteOffset)
3535
, m_isNeuterable(true)
36-
, m_buffer(buffer)
36+
, m_buffer(WTFMove(buffer))
3737
{
3838
m_baseAddress = m_buffer ? (static_cast<char*>(m_buffer->data()) + m_byteOffset) : 0;
3939
}

‎Source/JavaScriptCore/runtime/ArrayBufferView.h‎

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "TypedArrayType.h"
3030
#include <algorithm>
3131
#include <limits.h>
32-
#include <wtf/PassRefPtr.h>
3332
#include <wtf/RefCounted.h>
3433
#include <wtf/RefPtr.h>
3534

@@ -48,16 +47,16 @@ class ArrayBufferView : public RefCounted<ArrayBufferView> {
4847
return !m_buffer || m_buffer->isNeutered();
4948
}
5049

51-
PassRefPtr<ArrayBuffer> possiblySharedBuffer() const
50+
RefPtr<ArrayBuffer> possiblySharedBuffer() const
5251
{
5352
if (isNeutered())
54-
return 0;
53+
return nullptr;
5554
return m_buffer;
5655
}
5756

58-
PassRefPtr<ArrayBuffer> unsharedBuffer() const
57+
RefPtr<ArrayBuffer> unsharedBuffer() const
5958
{
60-
PassRefPtr<ArrayBuffer> result = possiblySharedBuffer();
59+
RefPtr<ArrayBuffer> result = possiblySharedBuffer();
6160
RELEASE_ASSERT(!result->isShared());
6261
return result;
6362
}
@@ -100,9 +99,9 @@ class ArrayBufferView : public RefCounted<ArrayBufferView> {
10099

101100
// Helper to verify that a given sub-range of an ArrayBuffer is
102101
// within range.
103-
static bool verifySubRangeLength(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned numElements, size_t size)
102+
static bool verifySubRangeLength(const ArrayBuffer& buffer, unsigned byteOffset, unsigned numElements, size_t size)
104103
{
105-
unsigned byteLength = buffer->byteLength();
104+
unsigned byteLength = buffer.byteLength();
106105
if (byteOffset > byteLength)
107106
return false;
108107
unsigned remainingElements = (byteLength - byteOffset) / size;
@@ -114,7 +113,7 @@ class ArrayBufferView : public RefCounted<ArrayBufferView> {
114113
virtual JSArrayBufferView* wrap(ExecState*, JSGlobalObject*) = 0;
115114

116115
protected:
117-
JS_EXPORT_PRIVATE ArrayBufferView(PassRefPtr<ArrayBuffer>, unsigned byteOffset);
116+
JS_EXPORT_PRIVATE ArrayBufferView(RefPtr<ArrayBuffer>&&, unsigned byteOffset);
118117

119118
inline bool setImpl(ArrayBufferView*, unsigned byteOffset);
120119

@@ -130,20 +129,20 @@ class ArrayBufferView : public RefCounted<ArrayBufferView> {
130129
// output offset is in number of bytes from the underlying buffer's view.
131130
template <typename T>
132131
static void clampOffsetAndNumElements(
133-
PassRefPtr<ArrayBuffer> buffer,
132+
const ArrayBuffer& buffer,
134133
unsigned arrayByteOffset,
135134
unsigned *offset,
136135
unsigned *numElements)
137136
{
138137
unsigned maxOffset = (UINT_MAX - arrayByteOffset) / sizeof(T);
139138
if (*offset > maxOffset) {
140-
*offset = buffer->byteLength();
139+
*offset = buffer.byteLength();
141140
*numElements = 0;
142141
return;
143142
}
144143
*offset = arrayByteOffset + *offset * sizeof(T);
145-
*offset = std::min(buffer->byteLength(), *offset);
146-
unsigned remainingElements = (buffer->byteLength() - *offset) / sizeof(T);
144+
*offset = std::min(buffer.byteLength(), *offset);
145+
unsigned remainingElements = (buffer.byteLength() - *offset) / sizeof(T);
147146
*numElements = std::min(remainingElements, *numElements);
148147
}
149148

‎Source/JavaScriptCore/runtime/ClassInfo.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ struct MethodTable {
9999
typedef ArrayBuffer* (*SlowDownAndWasteMemory)(JSArrayBufferView*);
100100
SlowDownAndWasteMemory slowDownAndWasteMemory;
101101

102-
typedef PassRefPtr<ArrayBufferView> (*GetTypedArrayImpl)(JSArrayBufferView*);
102+
typedef RefPtr<ArrayBufferView> (*GetTypedArrayImpl)(JSArrayBufferView*);
103103
GetTypedArrayImpl getTypedArrayImpl;
104104

105105
typedef bool (*PreventExtensionsFunctionPtr)(JSObject*, ExecState*);

‎Source/JavaScriptCore/runtime/DataView.cpp‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,22 @@
3232

3333
namespace JSC {
3434

35-
DataView::DataView(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned byteLength)
36-
: ArrayBufferView(buffer, byteOffset)
35+
DataView::DataView(RefPtr<ArrayBuffer>&& buffer, unsigned byteOffset, unsigned byteLength)
36+
: ArrayBufferView(WTFMove(buffer), byteOffset)
3737
, m_byteLength(byteLength)
3838
{
3939
}
4040

4141
Ref<DataView> DataView::create(
42-
PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned byteLength)
42+
RefPtr<ArrayBuffer>&& buffer, unsigned byteOffset, unsigned byteLength)
4343
{
44-
return adoptRef(*new DataView(buffer, byteOffset, byteLength));
44+
return adoptRef(*new DataView(WTFMove(buffer), byteOffset, byteLength));
4545
}
4646

47-
Ref<DataView> DataView::create(PassRefPtr<ArrayBuffer> passedBuffer)
47+
Ref<DataView> DataView::create(RefPtr<ArrayBuffer>&& buffer)
4848
{
49-
RefPtr<ArrayBuffer> buffer = passedBuffer;
50-
return create(buffer, 0, buffer->byteLength());
49+
unsigned byteLength = buffer->byteLength();
50+
return create(WTFMove(buffer), 0, byteLength);
5151
}
5252

5353
JSArrayBufferView* DataView::wrap(ExecState* exec, JSGlobalObject* globalObject)

‎Source/JavaScriptCore/runtime/DataView.h‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,16 @@
2727

2828
#include "ArrayBufferView.h"
2929
#include <wtf/FlipBytes.h>
30-
#include <wtf/PassRefPtr.h>
3130

3231
namespace JSC {
3332

3433
class DataView : public ArrayBufferView {
3534
protected:
36-
DataView(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned byteLength);
35+
DataView(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned byteLength);
3736

3837
public:
39-
JS_EXPORT_PRIVATE static Ref<DataView> create(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned length);
40-
static Ref<DataView> create(PassRefPtr<ArrayBuffer>);
38+
JS_EXPORT_PRIVATE static Ref<DataView> create(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned length);
39+
static Ref<DataView> create(RefPtr<ArrayBuffer>&&);
4140

4241
unsigned byteLength() const override
4342
{

‎Source/JavaScriptCore/runtime/GenericTypedArrayView.h‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ namespace JSC {
3333
template<typename Adaptor>
3434
class GenericTypedArrayView : public ArrayBufferView {
3535
protected:
36-
GenericTypedArrayView(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned length);
36+
GenericTypedArrayView(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned length);
3737

3838
public:
3939
static RefPtr<GenericTypedArrayView> create(unsigned length);
4040
static RefPtr<GenericTypedArrayView> create(const typename Adaptor::Type* array, unsigned length);
41-
static RefPtr<GenericTypedArrayView> create(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned length);
41+
static RefPtr<GenericTypedArrayView> create(RefPtr<ArrayBuffer>&&, unsigned byteOffset, unsigned length);
4242

4343
static RefPtr<GenericTypedArrayView> createUninitialized(unsigned length);
4444

‎Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ namespace JSC {
3232

3333
template<typename Adaptor>
3434
GenericTypedArrayView<Adaptor>::GenericTypedArrayView(
35-
PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length)
36-
: ArrayBufferView(buffer, byteOffset)
35+
RefPtr<ArrayBuffer>&& buffer, unsigned byteOffset, unsigned length)
36+
: ArrayBufferView(WTFMove(buffer), byteOffset)
3737
, m_length(length)
3838
{
3939
}
@@ -58,10 +58,10 @@ RefPtr<GenericTypedArrayView<Adaptor>> GenericTypedArrayView<Adaptor>::create(
5858

5959
template<typename Adaptor>
6060
RefPtr<GenericTypedArrayView<Adaptor>> GenericTypedArrayView<Adaptor>::create(
61-
PassRefPtr<ArrayBuffer> passedBuffer, unsigned byteOffset, unsigned length)
61+
RefPtr<ArrayBuffer>&& buffer, unsigned byteOffset, unsigned length)
6262
{
63-
RefPtr<ArrayBuffer> buffer = passedBuffer;
64-
if (!verifySubRangeLength(buffer, byteOffset, length, sizeof(typename Adaptor::Type))
63+
ASSERT(buffer);
64+
if (!ArrayBufferView::verifySubRangeLength(*buffer, byteOffset, length, sizeof(typename Adaptor::Type))
6565
|| !verifyByteOffsetAlignment(byteOffset, sizeof(typename Adaptor::Type))) {
6666
return nullptr;
6767
}
@@ -94,7 +94,8 @@ GenericTypedArrayView<Adaptor>::subarray(int start, int end) const
9494
unsigned offset, length;
9595
calculateOffsetAndLength(start, end, this->length(), &offset, &length);
9696
ArrayBuffer* buffer = possiblySharedBuffer();
97-
clampOffsetAndNumElements<Adaptor::Type>(buffer, byteOffset(), &offset, &length);
97+
ASSERT(buffer);
98+
clampOffsetAndNumElements<Adaptor::Type>(*buffer, byteOffset(), &offset, &length);
9899
return create(buffer, offset, length);
99100
}
100101

0 commit comments

Comments
 (0)