[webkit-reviews] review granted: [Bug 221608] Split RemoteRealtimeMediaSource in two audio-specific and video-specific classes : [Attachment 419725] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Feb 10 08:53:12 PST 2021


Eric Carlson <eric.carlson at apple.com> has granted youenn fablet
<youennf at gmail.com>'s request for review:
Bug 221608: Split RemoteRealtimeMediaSource in two audio-specific and
video-specific classes
https://bugs.webkit.org/show_bug.cgi?id=221608

Attachment 419725: Patch

https://bugs.webkit.org/attachment.cgi?id=419725&action=review




--- Comment #3 from Eric Carlson <eric.carlson at apple.com> ---
Comment on attachment 419725
  --> https://bugs.webkit.org/attachment.cgi?id=419725
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=419725&action=review

> Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:131
> +void RemoteRealtimeAudioSource::whenReady(CompletionHandler<void(String)>&&
callback)
> +{
> +    if (m_isReady)
> +	   return callback(WTFMove(m_errorMessage));
> +    m_callback = WTFMove(callback);
> +}
> +
> +void RemoteRealtimeAudioSource::didFail(String&& errorMessage)
> +{
> +    m_isReady = true;
> +    m_errorMessage = WTFMove(errorMessage);
> +    if (m_callback)
> +	   m_callback(m_errorMessage);
> +}
> +
> +void RemoteRealtimeAudioSource::setAsReady()
> +{
> +    m_isReady = true;
> +    if (m_callback)
> +	   m_callback({ });
> +}
> +
> +void
RemoteRealtimeAudioSource::setCapabilities(RealtimeMediaSourceCapabilities&&
capabilities)
> +{
> +    m_capabilities = WTFMove(capabilities);
> +}
> +
> +void RemoteRealtimeAudioSource::setSettings(RealtimeMediaSourceSettings&&
settings)
> +{
> +    auto changed = m_settings.difference(settings);
> +    m_settings = WTFMove(settings);
> +    notifySettingsDidChangeObservers(changed);
> +}
> +

These methods are identical in the Audio and Video classes, can they be moved
into a base class?

> Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:182
> +IPC::Connection* RemoteRealtimeAudioSource::connection()
> +{
> +    ASSERT(isMainThread());
> +#if ENABLE(GPU_PROCESS)
> +    if (m_shouldCaptureInGPUProcess)
> +	   return
&WebProcess::singleton().ensureGPUProcessConnection().connection();
> +#endif
> +    return WebProcess::singleton().parentProcessConnection();
> +}
> +
> +void RemoteRealtimeAudioSource::startProducingData()
> +{
> +   
connection()->send(Messages::UserMediaCaptureManagerProxy::StartProducingData {
m_identifier }, 0);
> +}
> +
> +void RemoteRealtimeAudioSource::stopProducingData()
> +{
> +   
connection()->send(Messages::UserMediaCaptureManagerProxy::StopProducingData {
m_identifier }, 0);
> +}
> +
> +const WebCore::RealtimeMediaSourceCapabilities&
RemoteRealtimeAudioSource::capabilities()
> +{
> +    return m_capabilities;
> +}
> +
> +void RemoteRealtimeAudioSource::applyConstraints(const MediaConstraints&
constraints, ApplyConstraintsHandler&& completionHandler)
> +{
> +    m_pendingApplyConstraintsCallbacks.append(WTFMove(completionHandler));
> +    // FIXME: Use sendAsyncWithReply.
> +   
connection()->send(Messages::UserMediaCaptureManagerProxy::ApplyConstraints {
m_identifier, constraints }, 0);
> +}
> +
> +void
RemoteRealtimeAudioSource::applyConstraintsSucceeded(RealtimeMediaSourceSetting
s&& settings)
> +{
> +    setSettings(WTFMove(settings));
> +
> +    auto callback = m_pendingApplyConstraintsCallbacks.takeFirst();
> +    callback({ });
> +}
> +
> +void RemoteRealtimeAudioSource::applyConstraintsFailed(String&&
failedConstraint, String&& errorMessage)
> +{
> +    auto callback = m_pendingApplyConstraintsCallbacks.takeFirst();
> +    callback(ApplyConstraintsError { WTFMove(failedConstraint),
WTFMove(errorMessage) });
> +}

Ditto

> Source/WebKit/WebProcess/cocoa/RemoteRealtimeAudioSource.cpp:215
> +void RemoteRealtimeAudioSource::captureStopped()
> +{
> +    stop();
> +    hasEnded();
> +}
> +
> +void RemoteRealtimeAudioSource::captureFailed()
> +{
> +    RealtimeMediaSource::captureFailed();
> +    hasEnded();
> +}
> +
> +#if ENABLE(GPU_PROCESS)
> +void
RemoteRealtimeAudioSource::gpuProcessConnectionDidClose(GPUProcessConnection&)
> +{
> +    ASSERT(m_shouldCaptureInGPUProcess);
> +    if (isEnded())
> +	   return;
> +
> +    m_manager.remoteCaptureSampleManager().didUpdateSourceConnection(*this);
> +    createRemoteMediaSource();
> +    // FIXME: We should update the track according current settings.
> +    if (isProducingData())
> +	   startProducingData();
> +}

Ditto.

> Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp:118
> +    if (auto source = m_audioSources.get(id))
>	   source->captureStopped();
> +    else if (auto source = m_videoSources.get(id))
> +	   source->captureStopped();

This pattern is used in enough places this it would be good to have a method
that returned the source given an identifier.


More information about the webkit-reviews mailing list