Changeset 277438 in webkit
- Timestamp:
- May 13, 2021, 10:03:39 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 6 edited
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/wtf/DataMutex.h (modified) (1 diff)
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp (modified) (20 diffs)
-
WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp (modified) (4 diffs)
-
WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r277437 r277438 1 2021-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 1 15 2021-05-13 Darin Adler <darin@apple.com> 2 16 -
trunk/Source/WTF/wtf/DataMutex.h
r259879 r277438 150 150 }; 151 151 152 template<typename T> 153 typename DataMutex<T>::LockedWrapper holdLock(DataMutex<T>& dataMutex) 154 { 155 return typename DataMutex<T>::LockedWrapper(dataMutex); 156 } 157 152 158 } // namespace WTF -
trunk/Source/WebCore/ChangeLog
r277437 r277438 1 2021-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 1 45 2021-05-13 Darin Adler <darin@apple.com> 2 46 -
trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
r277355 r277438 302 302 priv->minimumBlocksize = gst_base_src_get_blocksize(GST_BASE_SRC_CAST(src)); 303 303 304 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);304 auto members = holdLock(priv->dataMutex); 305 305 members->adapter = adoptGRef(gst_adapter_new()); 306 306 webkitWebSrcReset(src, members, ResetType::Hard); … … 347 347 break; 348 348 case PROP_RESOLVED_LOCATION: { 349 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);349 auto members = holdLock(priv->dataMutex); 350 350 g_value_set_string(value, members->redirectedURI.isNull() ? priv->originalURI.data() : members->redirectedURI.data()); 351 351 break; … … 377 377 if (gst_context_has_context_type(context, WEBKIT_WEB_SRC_PLAYER_CONTEXT_TYPE_NAME)) { 378 378 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); 380 380 members->player = reinterpret_cast<MediaPlayer*>(g_value_get_pointer(value)); 381 381 } … … 460 460 WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc); 461 461 WebKitWebSrcPrivate* priv = src->priv; 462 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);462 auto members = holdLock(priv->dataMutex); 463 463 464 464 // We need members->player to make requests. There are two mechanisms for this. … … 690 690 RunLoop::main().dispatch([protector = WTF::ensureGRef(src), request = WTFMove(request), requestNumber = members->requestNumber] { 691 691 WebKitWebSrcPrivate* priv = protector->priv; 692 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);692 auto members = holdLock(priv->dataMutex); 693 693 // Ignore this task (not making any HTTP request) if by now WebKitWebSrc streaming thread is already waiting 694 694 // for a different request. There is no point anymore in sending this one. … … 717 717 WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc); 718 718 // 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); 720 720 webkitWebSrcReset(src, members, ResetType::Hard); 721 721 GST_DEBUG_OBJECT(src, "Stopped WebKitWebSrc"); … … 726 726 { 727 727 WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc); 728 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);728 auto members = holdLock(src->priv->dataMutex); 729 729 730 730 GST_DEBUG_OBJECT(src, "haveSize: %s, size: %" G_GUINT64_FORMAT, boolForPrinting(members->haveSize), members->size); … … 740 740 { 741 741 WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc); 742 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);742 auto members = holdLock(src->priv->dataMutex); 743 743 GST_DEBUG_OBJECT(src, "isSeekable: %s", boolForPrinting(members->isSeekable)); 744 744 return members->isSeekable; … … 757 757 758 758 WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc); 759 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);759 auto members = holdLock(src->priv->dataMutex); 760 760 761 761 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); … … 787 787 if (GST_QUERY_TYPE(query) == GST_QUERY_URI) { 788 788 gst_query_set_uri(query, priv->originalURI.data()); 789 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);789 auto members = holdLock(src->priv->dataMutex); 790 790 if (!members->redirectedURI.isNull()) 791 791 gst_query_set_uri_redirection(query, members->redirectedURI.data()); … … 810 810 { 811 811 WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc); 812 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);812 auto members = holdLock(src->priv->dataMutex); 813 813 814 814 GST_DEBUG_OBJECT(src, "Unlock"); … … 841 841 { 842 842 WebKitWebSrc* src = WEBKIT_WEB_SRC(baseSrc); 843 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);843 auto members = holdLock(src->priv->dataMutex); 844 844 GST_DEBUG_OBJECT(src, "Unlock stop"); 845 845 members->isFlushing = false; … … 927 927 { 928 928 ASSERT(player); 929 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);929 auto members = holdLock(src->priv->dataMutex); 930 930 members->player = player; 931 931 members->referrer = referrer; … … 934 934 bool webKitSrcPassedCORSAccessCheck(WebKitWebSrc* src) 935 935 { 936 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);936 auto members = holdLock(src->priv->dataMutex); 937 937 return members->didPassAccessControlCheck; 938 938 } … … 989 989 WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); 990 990 WebKitWebSrcPrivate* priv = src->priv; 991 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);991 auto members = holdLock(priv->dataMutex); 992 992 if (members->requestNumber != m_requestNumber) { 993 993 completionHandler(ShouldContinuePolicyCheck::No); … … 1095 1095 WebKitWebSrcPrivate* priv = src->priv; 1096 1096 1097 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(priv->dataMutex);1097 auto members = holdLock(priv->dataMutex); 1098 1098 if (members->requestNumber != m_requestNumber) 1099 1099 return; … … 1131 1131 ASSERT(isMainThread()); 1132 1132 WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); 1133 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);1133 auto members = holdLock(src->priv->dataMutex); 1134 1134 if (members->requestNumber != m_requestNumber) 1135 1135 return; … … 1144 1144 ASSERT(isMainThread()); 1145 1145 WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); 1146 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);1146 auto members = holdLock(src->priv->dataMutex); 1147 1147 if (members->requestNumber != m_requestNumber) 1148 1148 return; … … 1161 1161 ASSERT(isMainThread()); 1162 1162 WebKitWebSrc* src = WEBKIT_WEB_SRC(m_src.get()); 1163 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);1163 auto members = holdLock(src->priv->dataMutex); 1164 1164 if (members->requestNumber != m_requestNumber) 1165 1165 return; … … 1171 1171 bool webKitSrcWouldTaintOrigin(WebKitWebSrc* src, const SecurityOrigin& origin) 1172 1172 { 1173 DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);1173 auto members = holdLock(src->priv->dataMutex); 1174 1174 1175 1175 auto* cachedResourceStreamingClient = reinterpret_cast<CachedResourceStreamingClient*>(members->resource->client()); -
trunk/Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp
r277031 r277438 62 62 { 63 63 ASSERT(isMainThread()); 64 WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);64 auto queue = holdLock(m_queueDataMutex); 65 65 return !queue->isFull(); 66 66 } … … 69 69 { 70 70 ASSERT(isMainThread()); 71 WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);71 auto queue = holdLock(m_queueDataMutex); 72 72 queue->notifyWhenLowLevel(WTFMove(handler)); 73 73 } … … 76 76 { 77 77 ASSERT(isMainThread()); 78 WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);78 auto queue = holdLock(m_queueDataMutex); 79 79 queue->enqueueObject(WTFMove(object)); 80 80 } … … 83 83 { 84 84 ASSERT(isMainThread()); 85 WTF::DataMutex<TrackQueue>::LockedWrapper queue(m_queueDataMutex);85 auto queue = holdLock(m_queueDataMutex); 86 86 queue->clear(); 87 87 } -
trunk/Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp
r277095 r277438 345 345 RefPtr<Stream>& stream = WEBKIT_MEDIA_SRC_PAD(pad)->priv->stream; 346 346 { 347 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);347 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 348 348 streamingMembers->isFlushing = true; 349 349 streamingMembers->padLinkedOrFlushedCondition.notifyOne(); … … 355 355 gst_pad_stop_task(pad); 356 356 { 357 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);357 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 358 358 streamingMembers->isFlushing = false; 359 359 } … … 365 365 { 366 366 RefPtr<Stream>& stream = WEBKIT_MEDIA_SRC_PAD(pad)->priv->stream; 367 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);367 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 368 368 streamingMembers->padLinkedOrFlushedCondition.notifyOne(); 369 369 } … … 375 375 RefPtr<Stream>& stream = WEBKIT_MEDIA_SRC_PAD(pad)->priv->stream; 376 376 377 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);377 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 378 378 if (streamingMembers->isFlushing) { 379 379 gst_pad_pause_task(pad); … … 441 441 GRefPtr<GstMiniObject> object; 442 442 { 443 DataMutex<TrackQueue>::LockedWrapper queue(stream->track->queueDataMutex());443 auto queue = holdLock(stream->track->queueDataMutex()); 444 444 if (!queue->isEmpty()) { 445 445 object = queue->pop(); … … 449 449 queue->notifyWhenNotEmpty([&object, stream](GRefPtr<GstMiniObject>&& receivedObject) { 450 450 ASSERT(isMainThread()); 451 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);451 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 452 452 ASSERT(!streamingMembers->isFlushing); 453 453 … … 466 466 { 467 467 // 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()); 469 469 queue->resetNotEmptyHandler(); 470 470 } … … 541 541 542 542 { 543 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);543 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 544 544 545 545 if (!streamingMembers->hasPoppedFirstObject) { 546 546 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()); 548 548 // We use clear() instead of flush() because the WebKitMediaSrc streaming thread could be waiting 549 549 // for the queue. flush() would cancel the notEmptyCallback therefore leaving the streaming thread … … 559 559 GST_DEBUG_OBJECT(stream->pad.get(), "Taking the StreamingMembers mutex and setting isFlushing = true."); 560 560 { 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()); 563 563 564 564 streamingMembers->isFlushing = true; … … 582 582 // The resulting segment is brand new, but with a different start time. 583 583 WebKitMediaSrcPrivate* priv = stream->source->priv; 584 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);584 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 585 585 streamingMembers->segment.base = 0; 586 586 streamingMembers->segment.rate = priv->rate; … … 596 596 // we don't need to adjust the segment though, as running time has not advanced. 597 597 if (GST_CLOCK_TIME_IS_VALID(pipelineStreamTime)) { 598 DataMutex<Stream::StreamingMembers>::LockedWrapper streamingMembers(stream->streamingMembersDataMutex);598 auto streamingMembers = holdLock(stream->streamingMembersDataMutex); 599 599 // We need to increase the base by the running time accumulated during the previous segment. 600 600 … … 615 615 { 616 616 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); 618 618 GST_DEBUG_OBJECT(stream->pad.get(), "StreamingMembers mutex taken, using it to set isFlushing = false."); 619 619 streamingMembers->isFlushing = false;
Note:
See TracChangeset
for help on using the changeset viewer.