Changeset 270731 in webkit
- Timestamp:
- Dec 11, 2020, 10:56:28 PM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r270730 r270731 1 2020-12-11 Peng Liu <peng.liu6@apple.com> 2 3 [Media in GPU Process][MSE] Implement SourceBuffer::reportExtraMemoryAllocated() 4 https://bugs.webkit.org/show_bug.cgi?id=219812 5 6 Reviewed by Eric Carlson. 7 8 Refactor the implementation of `SourceBuffer::reportExtraMemoryAllocated()` to let 9 `SourceBufferPrivate` calculate the extra memory cost and report the value to 10 `SourceBuffer` when necessary. This approach is better than the current one when 11 `SourceBufferPrivate` runs in the GPU process because track buffer management 12 has been moved to `SourceBufferPrivate` in r270435. 13 14 * Modules/mediasource/SourceBuffer.cpp: 15 (WebCore::SourceBuffer::appendBufferInternal): 16 (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete): 17 (WebCore::SourceBuffer::sourceBufferPrivateReportExtraMemoryCost): 18 (WebCore::SourceBuffer::reportExtraMemoryAllocated): 19 (WebCore::SourceBuffer::extraMemoryCost const): Deleted. 20 * Modules/mediasource/SourceBuffer.h: 21 * platform/graphics/SourceBufferPrivate.cpp: 22 (WebCore::SourceBufferPrivate::appendCompleted): 23 (WebCore::SourceBufferPrivate::evictCodedFrames): 24 * platform/graphics/SourceBufferPrivateClient.h: 25 * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: 26 (WebCore::SourceBufferPrivateAVFObjC::append): 27 1 28 2020-12-11 Jiewen Tan <jiewen_tan@apple.com> 2 29 -
trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp
r270708 r270731 513 513 m_appendBufferTimer.startOneShot(0_s); 514 514 515 reportExtraMemoryAllocated();516 517 515 return { }; 518 516 } … … 585 583 m_source->monitorSourceBuffers(); 586 584 m_private->reenqueueMediaIfNeeded(m_source->currentTime(), m_pendingAppendData.capacity(), maximumBufferSize()); 587 588 reportExtraMemoryAllocated();589 585 590 586 DEBUG_LOG(LOGIDENTIFIER); … … 1196 1192 } 1197 1193 1198 uint64_t SourceBuffer::extraMemoryCost() const 1199 { 1200 uint64_t extraMemoryCost = m_pendingAppendData.capacity(); 1201 extraMemoryCost += m_private->totalTrackBufferSizeInBytes(); 1202 1203 return extraMemoryCost; 1204 } 1205 1206 void SourceBuffer::reportExtraMemoryAllocated() 1207 { 1208 uint64_t extraMemoryCost = this->extraMemoryCost(); 1194 void SourceBuffer::sourceBufferPrivateReportExtraMemoryCost(uint64_t extraMemory) 1195 { 1196 reportExtraMemoryAllocated(extraMemory); 1197 } 1198 1199 void SourceBuffer::reportExtraMemoryAllocated(uint64_t extraMemory) 1200 { 1201 uint64_t extraMemoryCost = m_pendingAppendData.capacity() + extraMemory; 1209 1202 if (extraMemoryCost <= m_reportedExtraMemoryCost) 1210 1203 return; -
trunk/Source/WebCore/Modules/mediasource/SourceBuffer.h
r270708 r270731 159 159 void sourceBufferPrivateBufferedRangesChanged(const PlatformTimeRanges&) final; 160 160 void sourceBufferPrivateDidReceiveRenderingError(int64_t errorCode) final; 161 void sourceBufferPrivateReportExtraMemoryCost(uint64_t) final; 161 162 162 163 // AudioTrackClient … … 192 193 void removeTimerFired(); 193 194 194 uint64_t extraMemoryCost() const; 195 void reportExtraMemoryAllocated(); 195 void reportExtraMemoryAllocated(uint64_t extraMemory); 196 196 197 197 void appendError(bool); -
trunk/Source/WebCore/platform/graphics/SourceBufferPrivate.cpp
r270612 r270731 163 163 updateBufferedFromTrackBuffers(isEnded); 164 164 165 if (m_client) 165 if (m_client) { 166 166 m_client->sourceBufferPrivateAppendComplete(parsingSucceeded ? SourceBufferPrivateClient::AppendResult::AppendSucceeded : SourceBufferPrivateClient::AppendResult::ParsingFailed); 167 m_client->sourceBufferPrivateReportExtraMemoryCost(totalTrackBufferSizeInBytes()); 168 } 167 169 } 168 170 … … 618 620 MediaTime maximumRangeEnd = currentTime - thirtySeconds; 619 621 620 #if !RELEASE_LOG_DISABLED && false621 DEBUG_LOG(LOGIDENTIFIER, "currentTime = ", currentTime, ", require ", extraMemoryCost() + newDataSize, " bytes, maximum buffer size is ", maximumBufferSize);622 uint64_t initialBufferedSize = extraMemoryCost();622 #if !RELEASE_LOG_DISABLED 623 uint64_t initialBufferedSize = totalTrackBufferSizeInBytes(); 624 DEBUG_LOG(LOGIDENTIFIER, "currentTime = ", currentTime, ", require ", initialBufferedSize + newDataSize, " bytes, maximum buffer size is ", maximumBufferSize); 623 625 #endif 624 626 … … 639 641 640 642 if (!m_bufferFull) { 641 #if !RELEASE_LOG_DISABLED && false642 DEBUG_LOG(LOGIDENTIFIER, "evicted ", initialBufferedSize - extraMemoryCost());643 #if !RELEASE_LOG_DISABLED 644 DEBUG_LOG(LOGIDENTIFIER, "evicted ", initialBufferedSize - totalTrackBufferSizeInBytes()); 643 645 #endif 644 646 return; … … 651 653 uint64_t currentTimeRange = buffered.find(currentTime); 652 654 if (currentTimeRange == buffered.length() - 1) { 653 #if !RELEASE_LOG_DISABLED && false654 ERROR_LOG(LOGIDENTIFIER, "FAILED to free enough after evicting ", initialBufferedSize - extraMemoryCost());655 #if !RELEASE_LOG_DISABLED 656 ERROR_LOG(LOGIDENTIFIER, "FAILED to free enough after evicting ", initialBufferedSize - totalTrackBufferSizeInBytes()); 655 657 #endif 656 658 return; … … 692 694 } 693 695 694 #if !RELEASE_LOG_DISABLED && false696 #if !RELEASE_LOG_DISABLED 695 697 if (m_bufferFull) 696 ERROR_LOG(LOGIDENTIFIER, "FAILED to free enough after evicting ", initialBufferedSize - extraMemoryCost());698 ERROR_LOG(LOGIDENTIFIER, "FAILED to free enough after evicting ", initialBufferedSize - totalTrackBufferSizeInBytes()); 697 699 else 698 DEBUG_LOG(LOGIDENTIFIER, "evicted ", initialBufferedSize - extraMemoryCost());700 DEBUG_LOG(LOGIDENTIFIER, "evicted ", initialBufferedSize - totalTrackBufferSizeInBytes()); 699 701 #endif 700 702 } -
trunk/Source/WebCore/platform/graphics/SourceBufferPrivateClient.h
r270708 r270731 67 67 virtual void sourceBufferPrivateDidReceiveInitializationSegment(InitializationSegment&&, CompletionHandler<void()>&&) = 0; 68 68 virtual void sourceBufferPrivateStreamEndedWithDecodeError() = 0; 69 70 69 virtual void sourceBufferPrivateAppendError(bool decodeError) = 0; 71 70 enum class AppendResult : uint8_t { … … 80 79 virtual void sourceBufferPrivateBufferedDirtyChanged(bool) = 0; 81 80 virtual void sourceBufferPrivateBufferedRangesChanged(const PlatformTimeRanges&) = 0; 82 83 81 virtual void sourceBufferPrivateDidReceiveRenderingError(int64_t errorCode) = 0; 82 virtual void sourceBufferPrivateReportExtraMemoryCost(uint64_t) = 0; 84 83 }; 85 84 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm
r270668 r270731 516 516 ASSERT(!m_abortSemaphore); 517 517 518 if (m_client) 519 m_client->sourceBufferPrivateReportExtraMemoryCost(totalTrackBufferSizeInBytes()); 520 518 521 m_abortSemaphore = Box<Semaphore>::create(0); 519 522 m_parser->setWillProvideContentKeyRequestInitializationDataForTrackIDCallback([weakThis = makeWeakPtr(this), abortSemaphore = m_abortSemaphore] (uint64_t trackID) mutable { -
trunk/Source/WebKit/ChangeLog
r270730 r270731 1 2020-12-11 Peng Liu <peng.liu6@apple.com> 2 3 [Media in GPU Process][MSE] Implement SourceBuffer::reportExtraMemoryAllocated() 4 https://bugs.webkit.org/show_bug.cgi?id=219812 5 6 Reviewed by Eric Carlson. 7 8 Add a new IPC message `SourceBufferPrivateReportExtraMemoryCost` to forward the callback 9 to the web process. 10 11 * GPUProcess/media/RemoteSourceBufferProxy.cpp: 12 (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateReportExtraMemoryCost): 13 * GPUProcess/media/RemoteSourceBufferProxy.h: 14 * WebProcess/GPU/media/SourceBufferPrivateRemote.cpp: 15 (WebKit::SourceBufferPrivateRemote::sourceBufferPrivateReportExtraMemoryCost): 16 * WebProcess/GPU/media/SourceBufferPrivateRemote.h: 17 * WebProcess/GPU/media/SourceBufferPrivateRemote.messages.in: 18 1 19 2020-12-11 Jiewen Tan <jiewen_tan@apple.com> 2 20 -
trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp
r270708 r270731 139 139 } 140 140 141 void RemoteSourceBufferProxy::sourceBufferPrivateReportExtraMemoryCost(uint64_t extraMemory) 142 { 143 m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateReportExtraMemoryCost(extraMemory), m_identifier); 144 } 145 141 146 void RemoteSourceBufferProxy::sourceBufferPrivateBufferedDirtyChanged(bool flag) 142 147 { -
trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h
r270708 r270731 76 76 void sourceBufferPrivateBufferedDirtyChanged(bool) final; 77 77 void sourceBufferPrivateBufferedRangesChanged(const WebCore::PlatformTimeRanges&) final; 78 79 78 void sourceBufferPrivateDidReceiveRenderingError(int64_t errorCode) final; 79 void sourceBufferPrivateReportExtraMemoryCost(uint64_t extraMemory) final; 80 80 81 81 // IPC::MessageReceiver -
trunk/Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp
r270708 r270731 248 248 } 249 249 250 void SourceBufferPrivateRemote::sourceBufferPrivateReportExtraMemoryCost(uint64_t extraMemory) 251 { 252 if (m_client) 253 m_client->sourceBufferPrivateReportExtraMemoryCost(extraMemory); 254 } 255 250 256 #if !RELEASE_LOG_DISABLED 251 257 WTFLogChannel& SourceBufferPrivateRemote::logChannel() const -
trunk/Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.h
r270708 r270731 101 101 void sourceBufferPrivateBufferedDirtyChanged(bool dirty); 102 102 void sourceBufferPrivateBufferedRangesChanged(const WebCore::PlatformTimeRanges&); 103 void sourceBufferPrivateReportExtraMemoryCost(uint64_t extraMemory); 103 104 104 105 GPUProcessConnection& m_gpuProcessConnection; -
trunk/Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.messages.in
r270708 r270731 37 37 SourceBufferPrivateBufferedRangesChanged(WebCore::PlatformTimeRanges timeRanges) 38 38 SourceBufferPrivateDidReceiveRenderingError(int64_t errorCode) 39 SourceBufferPrivateReportExtraMemoryCost(uint64_t extraMemory) 39 40 } 40 41
Note:
See TracChangeset
for help on using the changeset viewer.