Index: third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp |
diff --git a/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp b/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp |
index 30fbd6188a7edeb9d1cd57ceefebf55114d00c69..8dc7707fafd625e7a34163a788324da05a4f00a5 100644 |
--- a/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp |
+++ b/third_party/WebKit/Source/wtf/typed_arrays/ArrayBufferContents.cpp |
@@ -68,12 +68,12 @@ ArrayBufferContents::ArrayBufferContents( |
m_holder->allocateNew(totalSize, isShared, policy); |
} |
-ArrayBufferContents::ArrayBufferContents(void* data, |
+ArrayBufferContents::ArrayBufferContents(DataHandle data, |
unsigned sizeInBytes, |
SharingType isShared) |
: m_holder(adoptRef(new DataHolder())) { |
if (data) { |
- m_holder->adopt(data, sizeInBytes, isShared); |
+ m_holder->adopt(std::move(data), sizeInBytes, isShared); |
} else { |
DCHECK_EQ(sizeInBytes, 0u); |
sizeInBytes = 0; |
@@ -107,42 +107,40 @@ void ArrayBufferContents::copyTo(ArrayBufferContents& other) { |
other.m_holder->copyMemoryFrom(*m_holder); |
} |
-void ArrayBufferContents::allocateMemoryWithFlags(size_t size, |
- InitializationPolicy policy, |
- int flags, |
- void*& data) { |
- data = PartitionAllocGenericFlags( |
+void* ArrayBufferContents::allocateMemoryWithFlags(size_t size, |
+ InitializationPolicy policy, |
+ int flags) { |
+ void* data = PartitionAllocGenericFlags( |
Partitions::arrayBufferPartition(), flags, size, |
WTF_HEAP_PROFILER_TYPE_NAME(ArrayBufferContents)); |
if (policy == ZeroInitialize && data) |
memset(data, '\0', size); |
+ return data; |
} |
-void ArrayBufferContents::allocateMemory(size_t size, |
- InitializationPolicy policy, |
- void*& data) { |
- allocateMemoryWithFlags(size, policy, 0, data); |
+void* ArrayBufferContents::allocateMemoryOrNull(size_t size, |
+ InitializationPolicy policy) { |
+ return allocateMemoryWithFlags(size, policy, base::PartitionAllocReturnNull); |
} |
-void ArrayBufferContents::allocateMemoryOrNull(size_t size, |
- InitializationPolicy policy, |
- void*& data) { |
- allocateMemoryWithFlags(size, policy, base::PartitionAllocReturnNull, data); |
+void ArrayBufferContents::freeMemory(void* data) { |
+ PartitionFreeGeneric(Partitions::arrayBufferPartition(), data); |
} |
-void ArrayBufferContents::freeMemory(void* data, size_t size) { |
- PartitionFreeGeneric(Partitions::arrayBufferPartition(), data); |
+ArrayBufferContents::DataHandle ArrayBufferContents::createDataHandle( |
+ size_t size, |
+ InitializationPolicy policy) { |
+ return DataHandle(ArrayBufferContents::allocateMemoryOrNull(size, policy), |
+ freeMemory); |
} |
ArrayBufferContents::DataHolder::DataHolder() |
- : m_data(nullptr), m_sizeInBytes(0), m_isShared(NotShared) {} |
+ : m_data(nullptr, freeMemory), m_sizeInBytes(0), m_isShared(NotShared) {} |
ArrayBufferContents::DataHolder::~DataHolder() { |
- ArrayBufferContents::freeMemory(m_data, m_sizeInBytes); |
- |
adjustAmountOfExternalAllocatedMemory(-static_cast<int64_t>(m_sizeInBytes)); |
- m_data = nullptr; |
+ m_data.reset(); |
m_sizeInBytes = 0; |
m_isShared = NotShared; |
} |
@@ -153,7 +151,7 @@ void ArrayBufferContents::DataHolder::allocateNew(unsigned sizeInBytes, |
DCHECK(!m_data); |
DCHECK_EQ(m_sizeInBytes, 0u); |
- ArrayBufferContents::allocateMemory(sizeInBytes, policy, m_data); |
+ m_data = createDataHandle(sizeInBytes, policy); |
if (!m_data) |
return; |
@@ -163,13 +161,13 @@ void ArrayBufferContents::DataHolder::allocateNew(unsigned sizeInBytes, |
adjustAmountOfExternalAllocatedMemory(m_sizeInBytes); |
} |
-void ArrayBufferContents::DataHolder::adopt(void* data, |
+void ArrayBufferContents::DataHolder::adopt(DataHandle data, |
unsigned sizeInBytes, |
SharingType isShared) { |
DCHECK(!m_data); |
DCHECK_EQ(m_sizeInBytes, 0u); |
- m_data = data; |
+ m_data = std::move(data); |
m_sizeInBytes = sizeInBytes; |
m_isShared = isShared; |
@@ -180,13 +178,12 @@ void ArrayBufferContents::DataHolder::copyMemoryFrom(const DataHolder& source) { |
DCHECK(!m_data); |
DCHECK_EQ(m_sizeInBytes, 0u); |
- ArrayBufferContents::allocateMemory(source.sizeInBytes(), DontInitialize, |
- m_data); |
+ m_data = createDataHandle(source.sizeInBytes(), DontInitialize); |
if (!m_data) |
return; |
m_sizeInBytes = source.sizeInBytes(); |
- memcpy(m_data, source.data(), source.sizeInBytes()); |
+ memcpy(m_data.get(), source.data(), source.sizeInBytes()); |
adjustAmountOfExternalAllocatedMemory(m_sizeInBytes); |
} |