⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 277438 in webkit


Ignore:
Timestamp:
May 13, 2021, 10:03:39 AM (5 years ago)
Author:
aboya@igalia.com
Message:

[WTF] Add holdLock() overload for WTF::DataMutex
https://bugs.webkit.org/show_bug.cgi?id=225652

Reviewed by Xabier Rodriguez-Calvar.

Source/WebCore:

All instantiations of DataMutex::LockedWrapper have been replaced by
holdLock(), for equivalent but more concise code.

This patch introduces no behavior changes.

  • platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:

(webKitWebSrcConstructed):
(webKitWebSrcGetProperty):
(webKitWebSrcSetContext):
(webKitWebSrcCreate):
(webKitWebSrcMakeRequest):
(webKitWebSrcStop):
(webKitWebSrcGetSize):
(webKitWebSrcIsSeekable):
(webKitWebSrcDoSeek):
(webKitWebSrcQuery):
(webKitWebSrcUnLock):
(webKitWebSrcUnLockStop):
(webKitWebSrcSetMediaPlayer):
(webKitSrcPassedCORSAccessCheck):
(CachedResourceStreamingClient::responseReceived):
(CachedResourceStreamingClient::dataReceived):
(CachedResourceStreamingClient::accessControlCheckFailed):
(CachedResourceStreamingClient::loadFailed):
(CachedResourceStreamingClient::loadFinished):
(webKitSrcWouldTaintOrigin):

  • platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:

(WebCore::MediaSourceTrackGStreamer::isReadyForMoreSamples):
(WebCore::MediaSourceTrackGStreamer::notifyWhenReadyForMoreSamples):
(WebCore::MediaSourceTrackGStreamer::enqueueObject):
(WebCore::MediaSourceTrackGStreamer::clearQueue):

  • platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:

(webKitMediaSrcActivateMode):
(webKitMediaSrcPadLinked):
(webKitMediaSrcLoop):
(webKitMediaSrcStreamFlush):

Source/WTF:

This patch adds a holdLock() overload for WTF::DataMutex as syntactic
sugar to simplify usage in a similar way to what holdLock() already
does for WTF::Locker.

  • wtf/DataMutex.h:

(WTF::holdLock):

Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r277437 r277438  
     12021-05-13  Alicia Boya García  <aboya@igalia.com>
     2
     3        [WTF] Add holdLock() overload for WTF::DataMutex
     4        https://bugs.webkit.org/show_bug.cgi?id=225652
     5
     6        Reviewed by Xabier Rodriguez-Calvar.
     7
     8        This patch adds a holdLock() overload for WTF::DataMutex as syntactic
     9        sugar to simplify usage in a similar way to what holdLock() already
     10        does for WTF::Locker.
     11
     12        * wtf/DataMutex.h:
     13        (WTF::holdLock):
     14
    1152021-05-13  Darin Adler  <darin@apple.com>
    216
  • trunk/Source/WTF/wtf/DataMutex.h

    r259879 r277438  
    150150};
    151151
     152template<typename T>
     153typename DataMutex<T>::LockedWrapper holdLock(DataMutex<T>& dataMutex)
     154{
     155    return typename DataMutex<T>::LockedWrapper(dataMutex);
     156}
     157
    152158} // namespace WTF
  • trunk/Source/WebCore/ChangeLog

    r277437 r277438  
     12021-05-13  Alicia Boya García  <aboya@igalia.com>
     2
     3        [WTF] Add holdLock() overload for WTF::DataMutex
     4        https://bugs.webkit.org/show_bug.cgi?id=225652
     5
     6        Reviewed by Xabier Rodriguez-Calvar.
     7
     8        All instantiations of DataMutex::LockedWrapper have been replaced by
     9        holdLock(), for equivalent but more concise code.
     10
     11        This patch introduces no behavior changes.
     12
     13        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
     14        (webKitWebSrcConstructed):
     15        (webKitWebSrcGetProperty):
     16        (webKitWebSrcSetContext):
     17        (webKitWebSrcCreate):
     18        (webKitWebSrcMakeRequest):
     19        (webKitWebSrcStop):
     20        (webKitWebSrcGetSize):
     21        (webKitWebSrcIsSeekable):
     22        (webKitWebSrcDoSeek):
     23        (webKitWebSrcQuery):
     24        (webKitWebSrcUnLock):
     25        (webKitWebSrcUnLockStop):
     26        (webKitWebSrcSetMediaPlayer):
     27        (webKitSrcPassedCORSAccessCheck):
     28        (CachedResourceStreamingClient::responseReceived):
     29        (CachedResourceStreamingClient::dataReceived):
     30        (CachedResourceStreamingClient::accessControlCheckFailed):
     31        (CachedResourceStreamingClient::loadFailed):
     32        (CachedResourceStreamingClient::loadFinished):
     33        (webKitSrcWouldTaintOrigin):
     34        * platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:
     35        (WebCore::MediaSourceTrackGStreamer::isReadyForMoreSamples):
     36        (WebCore::MediaSourceTrackGStreamer::notifyWhenReadyForMoreSamples):
     37        (WebCore::MediaSourceTrackGStreamer::enqueueObject):
     38        (WebCore::MediaSourceTrackGStreamer::clearQueue):
     39        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
     40        (webKitMediaSrcActivateMode):
     41        (webKitMediaSrcPadLinked):
     42        (webKitMediaSrcLoop):
     43        (webKitMediaSrcStreamFlush):
     44
    1452021-05-13  Darin Adler  <darin@apple.com>
    246
  • trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp

    r277355 r277438  
    302302    priv->minimumBlocksize = gst_base_src_get_blocksize(GST_BASE_SRC_CAST(src));
    303303
    304     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);
     304    auto members = holdLock(priv->dataMutex);
    305305    members->adapter = adoptGRef(gst_adapter_new());
    306306    webkitWebSrcReset(src, members, ResetType::Hard);
     
    347347        break;
    348348    case PROP_RESOLVED_LOCATION: {
    349         DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);
     349        auto members = holdLock(priv->dataMutex);
    350350        g_value_set_string(value, members->redirectedURI.isNull() ? priv->originalURI.data() : members->redirectedURI.data());
    351351        break;
     
    377377    if (gst_context_has_context_type(context, WEBKIT_WEB_SRC_PLAYER_CONTEXT_TYPE_NAME)) {
    378378        const GValue* value = gst_structure_get_value(gst_context_get_structure(context), "player");
    379         DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);
     379        auto members = holdLock(priv->dataMutex);
    380380        members->player = reinterpret_cast<MediaPlayer*>(g_value_get_pointer(value));
    381381    }
     
    460460    WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc);
    461461    WebKitWebSrcPrivate* priv = src->priv;
    462     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);
     462    auto members = holdLock(priv->dataMutex);
    463463
    464464    // We need members->player to make requests. There are two mechanisms for this.
     
    690690    RunLoop::main().dispatch([protector = WTF::ensureGRef(src), request = WTFMove(request), requestNumber = members->requestNumber] {
    691691        WebKitWebSrcPrivate* priv = protector->priv;
    692         DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);
     692        auto members = holdLock(priv->dataMutex);
    693693        // Ignore this task (not making any HTTP request) if by now WebKitWebSrc streaming thread is already waiting
    694694        // for a different request. There is no point anymore in sending this one.
     
    717717    WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc);
    718718    // basesrc will always call unLock() and unLockStop() before calling this. See gst_base_src_stop().
    719     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     719    auto members = holdLock(src->priv->dataMutex);
    720720    webkitWebSrcReset(src, members, ResetType::Hard);
    721721    GST_DEBUG_OBJECT(src, "Stopped WebKitWebSrc");
     
    726726{
    727727    WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc);
    728     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     728    auto members = holdLock(src->priv->dataMutex);
    729729
    730730    GST_DEBUG_OBJECT(src, "haveSize: %s, size: %" G_GUINT64_FORMAT, boolForPrinting(members->haveSize), members->size);
     
    740740{
    741741    WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc);
    742     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     742    auto members = holdLock(src->priv->dataMutex);
    743743    GST_DEBUG_OBJECT(src, "isSeekable: %s", boolForPrinting(members->isSeekable));
    744744    return members->isSeekable;
     
    757757
    758758    WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc);
    759     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     759    auto members = holdLock(src->priv->dataMutex);
    760760
    761761    GST_DEBUG_OBJECT(src, "Seek segment: (%" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT ") Position previous to seek: %" G_GUINT64_FORMAT, segment->start, segment->stop, members->readPosition);
     
    787787    if (GST_QUERY_TYPE(query) == GST_QUERY_URI) {
    788788        gst_query_set_uri(query, priv->originalURI.data());
    789         DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     789        auto members = holdLock(src->priv->dataMutex);
    790790        if (!members->redirectedURI.isNull())
    791791            gst_query_set_uri_redirection(query, members->redirectedURI.data());
     
    810810{
    811811    WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc);
    812     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     812    auto members = holdLock(src->priv->dataMutex);
    813813
    814814    GST_DEBUG_OBJECT(src, "Unlock");
     
    841841{
    842842    WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc);
    843     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     843    auto members = holdLock(src->priv->dataMutex);
    844844    GST_DEBUG_OBJECT(src, "Unlock stop");
    845845    members->isFlushing = false;
     
    927927{
    928928    ASSERT(player);
    929     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     929    auto members = holdLock(src->priv->dataMutex);
    930930    members->player = player;
    931931    members->referrer = referrer;
     
    934934bool webKitSrcPassedCORSAccessCheck(WebKitWebSrc* src)
    935935{
    936     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     936    auto members = holdLock(src->priv->dataMutex);
    937937    return members->didPassAccessControlCheck;
    938938}
     
    989989    WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get());
    990990    WebKitWebSrcPrivate* priv = src->priv;
    991     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);
     991    auto members = holdLock(priv->dataMutex);
    992992    if (members->requestNumber != m_requestNumber) {
    993993        completionHandler(ShouldContinuePolicyCheck::No);
     
    10951095    WebKitWebSrcPrivate* priv = src->priv;
    10961096
    1097     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);
     1097    auto members = holdLock(priv->dataMutex);
    10981098    if (members->requestNumber != m_requestNumber)
    10991099        return;
     
    11311131    ASSERT(isMainThread());
    11321132    WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get());
    1133     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     1133    auto members = holdLock(src->priv->dataMutex);
    11341134    if (members->requestNumber != m_requestNumber)
    11351135        return;
     
    11441144    ASSERT(isMainThread());
    11451145    WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get());
    1146     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     1146    auto members = holdLock(src->priv->dataMutex);
    11471147    if (members->requestNumber != m_requestNumber)
    11481148        return;
     
    11611161    ASSERT(isMainThread());
    11621162    WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get());
    1163     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     1163    auto members = holdLock(src->priv->dataMutex);
    11641164    if (members->requestNumber != m_requestNumber)
    11651165        return;
     
    11711171bool webKitSrcWouldTaintOrigin(WebKitWebSrc* src, const SecurityOrigin& origin)
    11721172{
    1173     DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
     1173    auto members = holdLock(src->priv->dataMutex);
    11741174
    11751175    auto* cachedResourceStreamingClient = reinterpret_cast<CachedResourceStreamingClient*>(members->resource->client());
  • trunk/Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp

    r277031 r277438  
    6262{
    6363    ASSERT(isMainThread());
    64     WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);
     64    auto queue = holdLock(m_queueDataMutex);
    6565    return !queue->isFull();
    6666}
     
    6969{
    7070    ASSERT(isMainThread());
    71     WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);
     71    auto queue = holdLock(m_queueDataMutex);
    7272    queue->notifyWhenLowLevel(WTFMove(handler));
    7373}
     
    7676{
    7777    ASSERT(isMainThread());
    78     WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);
     78    auto queue = holdLock(m_queueDataMutex);
    7979    queue->enqueueObject(WTFMove(object));
    8080}
     
    8383{
    8484    ASSERT(isMainThread());
    85     WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);
     85    auto queue = holdLock(m_queueDataMutex);
    8686    queue->clear();
    8787}
  • trunk/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp

    r277095 r277438  
    345345        RefPtr<Stream>& stream = WEBKIT_MEDIA_SRC_PAD(pad)->priv->stream;
    346346        {
    347             DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     347            auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    348348            streamingMembers->isFlushing = true;
    349349            streamingMembers->padLinkedOrFlushedCondition.notifyOne();
     
    355355        gst_pad_stop_task(pad);
    356356        {
    357             DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     357            auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    358358            streamingMembers->isFlushing = false;
    359359        }
     
    365365{
    366366    RefPtr<Stream>& stream = WEBKIT_MEDIA_SRC_PAD(pad)->priv->stream;
    367     DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     367    auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    368368    streamingMembers->padLinkedOrFlushedCondition.notifyOne();
    369369}
     
    375375    RefPtr<Stream>& stream = WEBKIT_MEDIA_SRC_PAD(pad)->priv->stream;
    376376
    377     DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     377    auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    378378    if (streamingMembers->isFlushing) {
    379379        gst_pad_pause_task(pad);
     
    441441    GRefPtr<GstMiniObject> object;
    442442    {
    443         DataMutex<TrackQueue>::LockedWrapper queue(stream->track->queueDataMutex());
     443        auto queue = holdLock(stream->track->queueDataMutex());
    444444        if (!queue->isEmpty()) {
    445445            object = queue->pop();
     
    449449            queue->notifyWhenNotEmpty([&object, stream](GRefPtr<GstMiniObject>&& receivedObject) {
    450450                ASSERT(isMainThread());
    451                 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     451                auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    452452                ASSERT(!streamingMembers->isFlushing);
    453453
     
    466466    {
    467467        // Ensure that notifyWhenNotEmpty()'s callback (if any) is cleared after this point.
    468         DataMutex<TrackQueue>::LockedWrapper queue(stream->track->queueDataMutex());
     468        auto queue = holdLock(stream->track->queueDataMutex());
    469469        queue->resetNotEmptyHandler();
    470470    }
     
    541541
    542542    {
    543         DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     543        auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    544544
    545545        if (!streamingMembers->hasPoppedFirstObject) {
    546546            GST_DEBUG_OBJECT(stream->source, "Flush request for stream '%s' occurred before hasPoppedFirstObject, just clearing the queue and readjusting the segment.", stream->track->trackId().string().utf8().data());
    547             DataMutex<TrackQueue>::LockedWrapper queue(stream->track->queueDataMutex());
     547            auto queue = holdLock(stream->track->queueDataMutex());
    548548            // We use clear() instead of flush() because the WebKitMediaSrc streaming thread could be waiting
    549549            // for the queue. flush() would cancel the notEmptyCallback therefore leaving the streaming thread
     
    559559        GST_DEBUG_OBJECT(stream->pad.get(), "Taking the StreamingMembers mutex and setting isFlushing = true.");
    560560        {
    561             DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
    562             DataMutex<TrackQueue>::LockedWrapper queue(stream->track->queueDataMutex());
     561            auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
     562            auto queue = holdLock(stream->track->queueDataMutex());
    563563
    564564            streamingMembers->isFlushing = true;
     
    582582        // The resulting segment is brand new, but with a different start time.
    583583        WebKitMediaSrcPrivate* priv = stream->source->priv;
    584         DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     584        auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    585585        streamingMembers->segment.base = 0;
    586586        streamingMembers->segment.rate = priv->rate;
     
    596596        // we don't need to adjust the segment though, as running time has not advanced.
    597597        if (GST_CLOCK_TIME_IS_VALID(pipelineStreamTime)) {
    598             DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     598            auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    599599            // We need to increase the base by the running time accumulated during the previous segment.
    600600
     
    615615        {
    616616            GST_DEBUG_OBJECT(stream->pad.get(), "Taking the StreamingMembers mutex again.");
    617             DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);
     617            auto streamingMembers = holdLock(stream->streamingMembersDataMutex);
    618618            GST_DEBUG_OBJECT(stream->pad.get(), "StreamingMembers mutex taken, using it to set isFlushing = false.");
    619619            streamingMembers->isFlushing = false;
Note: See TracChangeset for help on using the changeset viewer.