Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 7f582bce96ed45d1a34d2061696482b8bcf2fd8d
      
https://github.com/WebKit/WebKit/commit/7f582bce96ed45d1a34d2061696482b8bcf2fd8d
  Author: Jean-Yves Avenard <[email protected]>
  Date:   2025-12-16 (Tue, 16 Dec 2025)

  Changed paths:
    M Source/WebCore/Headers.cmake
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/platform/MediaSamplesBlock.cpp
    M Source/WebCore/platform/MediaSamplesBlock.h
    A Source/WebCore/platform/graphics/MediaSampleConverter.cpp
    A Source/WebCore/platform/graphics/MediaSampleConverter.h
    M Source/WebCore/platform/graphics/cocoa/CMUtilities.mm
    M Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.cpp
    M Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.h
    M 
Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.messages.in
    M Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.cpp
    M Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.h

  Log Message:
  -----------
  AudioVideoRendererRemote should only serialise TrackInfo if it changes
https://bugs.webkit.org/show_bug.cgi?id=303433
rdar://165725525

Reviewed by Youenn Fablet.

The MediaSamplesBlock's TrackInfo object was fully serialised/deserialised
when sent over IPC, even when it didn't change.
This conversion was one of the top CPU's ms/cpu usage in the web content process
and caused unnecessary elevated power usage.

We add a new MediaSampleConverter utility class that will track if the metadata 
(init segment)
of a MediaSample has changed, and if not will re-use the previously converted 
TrackInfo instead.
A new IPC newTrackInfoForTrack to RemoteAudioVideoRendererProxyManager is added 
so that we can
send separately the TrackInfo object when it has changed.
MediaSamplesBlock will have their TrackInfo set to null before being set to
the GPU process so that upon receiving we can re-use the existing, previously 
received,
 TrackInfo.

No change in observable behaviour, covered by existing tests.

* Source/WebCore/Headers.cmake:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/MediaSamplesBlock.cpp:
(WebCore::MediaSamplesBlock::toMediaSample const):
* Source/WebCore/platform/MediaSamplesBlock.h:
* Source/WebCore/platform/graphics/MediaSampleConverter.cpp: Added.
(WebCore::hasSameInitSegment):
(WebCore::MediaSampleConverter::convert):
(WebCore::MediaSampleConverter::hasFormatChanged):
(WebCore::MediaSampleConverter::currentTrackInfo const):
* Source/WebCore/platform/graphics/MediaSampleConverter.h:
* Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:
(WebCore::samplesBlockFromCMSampleBuffer):
* Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.cpp:
(WebKit::RemoteAudioVideoRendererProxyManager::converterContextFor):
(WebKit::RemoteAudioVideoRendererProxyManager::newTrackInfoForTrack):
(WebKit::RemoteAudioVideoRendererProxyManager::enqueueSample):
* Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.h:
* 
Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.messages.in:
* Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.cpp:
(WebKit::AudioVideoRendererRemote::enqueueSample):
* Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.h:

Canonical link: https://commits.webkit.org/304579@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to