Motown: Stop requiring size when releasing payload buffers. PayloadAllocator and related classes in Motown have required the size of a payload buffer to be specified on release. This was done to check for agreement with the allocation. Providing the size on release isn't always convenient. In getting video to work, a case has come up in which the added code complexity required to provide the size parameter is too high a penalty to pay for the small increment in safety. R=kulakowski@chromium.org Review URL: https://codereview.chromium.org/2081753002 .
diff --git a/mojo/services/media/common/cpp/fifo_allocator.cc b/mojo/services/media/common/cpp/fifo_allocator.cc index 0823b44..b92b4e1 100644 --- a/mojo/services/media/common/cpp/fifo_allocator.cc +++ b/mojo/services/media/common/cpp/fifo_allocator.cc
@@ -67,22 +67,20 @@ return allocated->offset; } -void FifoAllocator::ReleaseRegion(uint64_t size, uint64_t offset) { +void FifoAllocator::ReleaseRegion(uint64_t offset) { // Start at active_->next. That's usually the region we're looking for. - bool released = Release(size, offset, active_->next, nullptr) || - Release(size, offset, front_, active_); + bool released = Release(offset, active_->next, nullptr) || + Release(offset, front_, active_); MOJO_DCHECK(released); } -bool FifoAllocator::Release(uint64_t size, - uint64_t offset, +bool FifoAllocator::Release(uint64_t offset, Region* begin, Region* end) { MOJO_DCHECK(begin != nullptr || end == nullptr); for (Region* region = begin; region != end; region = region->next) { if (region->offset == offset) { MOJO_DCHECK(region->allocated); - MOJO_DCHECK(region->size == size); region->allocated = false; Region* prev = region->prev;
diff --git a/mojo/services/media/common/cpp/fifo_allocator.h b/mojo/services/media/common/cpp/fifo_allocator.h index 06e66e5..f2e07d4 100644 --- a/mojo/services/media/common/cpp/fifo_allocator.h +++ b/mojo/services/media/common/cpp/fifo_allocator.h
@@ -77,7 +77,7 @@ uint64_t AllocateRegion(uint64_t size); // Releases a previously-allocated region. - void ReleaseRegion(uint64_t size, uint64_t offset); + void ReleaseRegion(uint64_t offset); private: // List element to track allocated and free regions. @@ -93,7 +93,7 @@ // Releases the specified region if it's found between begin (inclusive) and // end (exclusive). - bool Release(uint64_t size, uint64_t offset, Region* begin, Region* end); + bool Release(uint64_t offset, Region* begin, Region* end); // Advances the active region to one that's at least the specified size. // Returns false if none could be found.
diff --git a/mojo/services/media/common/cpp/shared_media_buffer_allocator.h b/mojo/services/media/common/cpp/shared_media_buffer_allocator.h index 994e83f..3700a13 100644 --- a/mojo/services/media/common/cpp/shared_media_buffer_allocator.h +++ b/mojo/services/media/common/cpp/shared_media_buffer_allocator.h
@@ -36,9 +36,9 @@ // Releases a region of the buffer previously allocated by calling // AllocateRegionByOffset. - void ReleaseRegionByOffset(uint64_t size, uint64_t offset) { + void ReleaseRegionByOffset(uint64_t offset) { std::lock_guard<std::mutex> lock(lock_); - fifo_allocator_.ReleaseRegion(size, offset); + fifo_allocator_.ReleaseRegion(offset); } // Allocates a region of the buffer returning a pointer. If the requested @@ -49,8 +49,8 @@ // Releases a region of the buffer previously allocated by calling // AllocateRegion. - void ReleaseRegion(uint64_t size, void* ptr) { - ReleaseRegionByOffset(size, OffsetFromPtr(ptr)); + void ReleaseRegion(void* ptr) { + ReleaseRegionByOffset(OffsetFromPtr(ptr)); } protected:
diff --git a/services/media/framework/packet.cc b/services/media/framework/packet.cc index eef3e3e..3c96701 100644 --- a/services/media/framework/packet.cc +++ b/services/media/framework/packet.cc
@@ -32,7 +32,7 @@ // payload() and handling deallocation themselves, so allocator_ can be // nullptr even when payload() is not. if (payload() != nullptr && allocator_ != nullptr) { - allocator_->ReleasePayloadBuffer(size(), payload()); + allocator_->ReleasePayloadBuffer(payload()); } delete this; }
diff --git a/services/media/framework/payload_allocator.cc b/services/media/framework/payload_allocator.cc index 3687100..45198f8 100644 --- a/services/media/framework/payload_allocator.cc +++ b/services/media/framework/payload_allocator.cc
@@ -19,7 +19,7 @@ // PayloadAllocator implementation. void* AllocatePayloadBuffer(size_t size) override; - void ReleasePayloadBuffer(size_t size, void* buffer) override; + void ReleasePayloadBuffer(void* buffer) override; }; void* DefaultAllocator::AllocatePayloadBuffer(size_t size) { @@ -27,8 +27,7 @@ return std::malloc(static_cast<size_t>(size)); } -void DefaultAllocator::ReleasePayloadBuffer(size_t size, void* buffer) { - DCHECK(size > 0); +void DefaultAllocator::ReleasePayloadBuffer(void* buffer) { DCHECK(buffer); std::free(buffer); }
diff --git a/services/media/framework/payload_allocator.h b/services/media/framework/payload_allocator.h index 8e398f3..633cdaa 100644 --- a/services/media/framework/payload_allocator.h +++ b/services/media/framework/payload_allocator.h
@@ -21,7 +21,7 @@ virtual void* AllocatePayloadBuffer(size_t size) = 0; // Releases a buffer previously allocated via AllocatePayloadBuffer. - virtual void ReleasePayloadBuffer(size_t size, void* buffer) = 0; + virtual void ReleasePayloadBuffer(void* buffer) = 0; }; } // namespace media
diff --git a/services/media/framework_ffmpeg/ffmpeg_decoder_base.h b/services/media/framework_ffmpeg/ffmpeg_decoder_base.h index 63dd2ed..e829fca 100644 --- a/services/media/framework_ffmpeg/ffmpeg_decoder_base.h +++ b/services/media/framework_ffmpeg/ffmpeg_decoder_base.h
@@ -57,7 +57,7 @@ if (size_ != 0) { DCHECK(buffer_ != nullptr); - allocator_->ReleasePayloadBuffer(size_, buffer_); + allocator_->ReleasePayloadBuffer(buffer_); return; }
diff --git a/services/media/framework_mojo/mojo_allocator.cc b/services/media/framework_mojo/mojo_allocator.cc index 6622357..65298fd 100644 --- a/services/media/framework_mojo/mojo_allocator.cc +++ b/services/media/framework_mojo/mojo_allocator.cc
@@ -13,8 +13,8 @@ return AllocateRegion(size); } -void MojoAllocator::ReleasePayloadBuffer(size_t size, void* buffer) { - ReleaseRegion(size, buffer); +void MojoAllocator::ReleasePayloadBuffer(void* buffer) { + ReleaseRegion(buffer); } } // namespace media
diff --git a/services/media/framework_mojo/mojo_allocator.h b/services/media/framework_mojo/mojo_allocator.h index 75a8371..a32d600 100644 --- a/services/media/framework_mojo/mojo_allocator.h +++ b/services/media/framework_mojo/mojo_allocator.h
@@ -20,7 +20,7 @@ // PayloadAllocator implementation. void* AllocatePayloadBuffer(size_t size) override; - void ReleasePayloadBuffer(size_t size, void* buffer) override; + void ReleasePayloadBuffer(void* buffer) override; }; } // namespace media