WebKit Bugzilla
Attachment 368483 Details for
Bug 197382
: Make Document audio producers use WeakPtr
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-197382-20190429133044.patch (text/plain), 7.79 KB, created by
youenn fablet
on 2019-04-29 13:30:47 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2019-04-29 13:30:47 PDT
Size:
7.79 KB
patch
obsolete
>Subversion Revision: 244694 >diff --git a/Source/WTF/ChangeLog b/Source/WTF/ChangeLog >index 475cdd28b74cf6c19251851e75de9c279aebd116..de9b29ebb42d6953e58a41a869a3707448fb8d4d 100644 >--- a/Source/WTF/ChangeLog >+++ b/Source/WTF/ChangeLog >@@ -1,3 +1,13 @@ >+2019-04-29 Youenn Fablet <youenn@apple.com> >+ >+ Make Document audio producers use WeakPtr >+ https://bugs.webkit.org/show_bug.cgi?id=197382 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * wtf/WeakHashSet.h: >+ (WTF::WeakHashSet::hasNullReferences const): >+ > 2019-04-26 Don Olmstead <don.olmstead@sony.com> > > Add WTF::findIgnoringASCIICaseWithoutLength to replace strcasestr >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 3500ca7458df23f4953f1ae33ba3fa55b51bdbd1..83a5570adea3d55df64ea767b4b5aa71bb39ed4e 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,26 @@ >+2019-04-29 Youenn Fablet <youenn@apple.com> >+ >+ Make Document audio producers use WeakPtr >+ https://bugs.webkit.org/show_bug.cgi?id=197382 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Move from a hash set of raw pointers to a hash set of weak pointers. >+ This helps make the code cleaner. >+ No observable change of behavior. >+ >+ * Modules/mediastream/MediaStreamTrack.h: >+ * dom/Document.cpp: >+ (WebCore::Document::addAudioProducer): >+ (WebCore::Document::removeAudioProducer): >+ (WebCore::Document::updateIsPlayingMedia): >+ (WebCore::Document::pageMutedStateDidChange): >+ * dom/Document.h: >+ * html/HTMLMediaElement.cpp: >+ (WebCore::HTMLMediaElement::updateActiveTextTrackCues): >+ * html/HTMLMediaElement.h: >+ * page/MediaProducer.h: >+ > 2019-04-28 Youenn Fablet <youenn@apple.com> > > getDisplayMedia should be called on user gesture >diff --git a/Source/WTF/wtf/WeakHashSet.h b/Source/WTF/wtf/WeakHashSet.h >index 8c8987b192c4a98e5280b6bf52c6d2e92301b513..092011cfcd1f0916c93d689eebb62fef66755c1a 100644 >--- a/Source/WTF/wtf/WeakHashSet.h >+++ b/Source/WTF/wtf/WeakHashSet.h >@@ -25,6 +25,7 @@ > > #pragma once > >+#include <wtf/Algorithms.h> > #include <wtf/HashSet.h> > #include <wtf/HashTraits.h> > #include <wtf/WeakPtr.h> >@@ -123,6 +124,11 @@ public: > return true; > } > >+ bool hasNullReferences() const >+ { >+ return WTF::anyOf(m_set, [] (auto& value) { return !value->get(); }); >+ } >+ > unsigned computeSize() const > { > const_cast<WeakReferenceSet&>(m_set).removeIf([] (auto& value) { return !value->get(); }); >diff --git a/Source/WebCore/Modules/mediastream/MediaStreamTrack.h b/Source/WebCore/Modules/mediastream/MediaStreamTrack.h >index 7c11f3fe0855ea4c038cdf03e21815307c374e56..de8b5a6f89fe88c44fa2c77638253c3086908331 100644 >--- a/Source/WebCore/Modules/mediastream/MediaStreamTrack.h >+++ b/Source/WebCore/Modules/mediastream/MediaStreamTrack.h >@@ -51,8 +51,7 @@ class MediaStreamTrack > : public RefCounted<MediaStreamTrack> > , public ActiveDOMObject > , public EventTargetWithInlineData >- , public CanMakeWeakPtr<MediaStreamTrack> >- , private MediaProducer >+ , public MediaProducer > , private MediaStreamTrackPrivate::Observer > #if !RELEASE_LOG_DISABLED > , private LoggerHelper >diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp >index 1794bed75a5bd9600331d2520f26b0ec70cd0f21..224ea10e2d8add44748b91cfb9321784b7ee6a8a 100644 >--- a/Source/WebCore/dom/Document.cpp >+++ b/Source/WebCore/dom/Document.cpp >@@ -3902,13 +3902,13 @@ void Document::updateViewportUnitsOnResize() > > void Document::addAudioProducer(MediaProducer& audioProducer) > { >- m_audioProducers.add(&audioProducer); >+ m_audioProducers.add(audioProducer); > updateIsPlayingMedia(); > } > > void Document::removeAudioProducer(MediaProducer& audioProducer) > { >- m_audioProducers.remove(&audioProducer); >+ m_audioProducers.remove(audioProducer); > updateIsPlayingMedia(); > } > >@@ -3926,9 +3926,11 @@ void Document::noteUserInteractionWithMediaElement() > > void Document::updateIsPlayingMedia(uint64_t sourceElementID) > { >+ ASSERT(!m_audioProducers.hasNullReferences()); >+ > MediaProducer::MediaStateFlags state = MediaProducer::IsNotPlaying; >- for (auto* audioProducer : m_audioProducers) >- state |= audioProducer->mediaState(); >+ for (auto& audioProducer : m_audioProducers) >+ state |= audioProducer.mediaState(); > > #if ENABLE(MEDIA_SESSION) > if (HTMLMediaElement* sourceElement = HTMLMediaElement::elementWithID(sourceElementID)) { >@@ -3969,8 +3971,8 @@ void Document::updateIsPlayingMedia(uint64_t sourceElementID) > > void Document::pageMutedStateDidChange() > { >- for (auto* audioProducer : m_audioProducers) >- audioProducer->pageMutedStateDidChange(); >+ for (auto& audioProducer : m_audioProducers) >+ audioProducer.pageMutedStateDidChange(); > } > > static bool isNodeInSubtree(Node& node, Node& container, Document::NodeRemoval nodeRemoval) >diff --git a/Source/WebCore/dom/Document.h b/Source/WebCore/dom/Document.h >index 1417c2e126e10936d9289f4d49de5eb24624cac4..45f85989a593d804d1a1543347db10960332896f 100644 >--- a/Source/WebCore/dom/Document.h >+++ b/Source/WebCore/dom/Document.h >@@ -66,6 +66,7 @@ > #include <wtf/Logger.h> > #include <wtf/ObjectIdentifier.h> > #include <wtf/UniqueRef.h> >+#include <wtf/WeakHashSet.h> > #include <wtf/WeakPtr.h> > #include <wtf/text/AtomicStringHash.h> > >@@ -1891,7 +1892,7 @@ private: > > Ref<CSSFontSelector> m_fontSelector; > >- HashSet<MediaProducer*> m_audioProducers; >+ WeakHashSet<MediaProducer> m_audioProducers; > > HashSet<ShadowRoot*> m_inDocumentShadowRoots; > >diff --git a/Source/WebCore/html/HTMLMediaElement.cpp b/Source/WebCore/html/HTMLMediaElement.cpp >index f223ebb18f61f6e03e945c5e60b795cfed60f8d2..804a9a74f9c4edfeb071bb02acec88fc2174c2fb 100644 >--- a/Source/WebCore/html/HTMLMediaElement.cpp >+++ b/Source/WebCore/html/HTMLMediaElement.cpp >@@ -1764,13 +1764,13 @@ void HTMLMediaElement::updateActiveTextTrackCues(const MediaTime& movieTime) > INFO_LOG(LOGIDENTIFIER, "nextInterestingTime:", nextInterestingTime); > > if (nextInterestingTime.isValid() && m_player) { >- m_player->performTaskAtMediaTime([this, weakThis = makeWeakPtr(this), nextInterestingTime] { >+ m_player->performTaskAtMediaTime([this, weakThis = makeWeakPtr(static_cast<HTMLElement*>(this)), nextInterestingTime] { > if (!weakThis) > return; > >- auto currentMediaTime = weakThis->currentMediaTime(); >+ auto currentMediaTime = this->currentMediaTime(); > INFO_LOG(LOGIDENTIFIER, " lambda, currentMediaTime: ", currentMediaTime); >- weakThis->updateActiveTextTrackCues(currentMediaTime); >+ this->updateActiveTextTrackCues(currentMediaTime); > }, nextInterestingTime); > } > >diff --git a/Source/WebCore/html/HTMLMediaElement.h b/Source/WebCore/html/HTMLMediaElement.h >index 576c7dce9bd1f0088e88d0d5ac281f62083ecef2..2296c66df97bac4bcc9ea3c27b200fb30bb6e289 100644 >--- a/Source/WebCore/html/HTMLMediaElement.h >+++ b/Source/WebCore/html/HTMLMediaElement.h >@@ -573,6 +573,8 @@ public: > > enum class AutoplayEventPlaybackState { None, PreventedAutoplay, StartedWithUserGesture, StartedWithoutUserGesture }; > >+ using HTMLElement::weakPtrFactory; >+ > protected: > HTMLMediaElement(const QualifiedName&, Document&, bool createdByParser); > virtual void finishInitialization(); >diff --git a/Source/WebCore/page/MediaProducer.h b/Source/WebCore/page/MediaProducer.h >index b01ab94b3b41d9244425173ef2ac80d8ac9c1d70..92c19e85c8d6d0d5209e1d35bd40b064857e014c 100644 >--- a/Source/WebCore/page/MediaProducer.h >+++ b/Source/WebCore/page/MediaProducer.h >@@ -25,9 +25,11 @@ > > #pragma once > >+#include <wtf/WeakPtr.h> >+ > namespace WebCore { > >-class MediaProducer { >+class MediaProducer : public CanMakeWeakPtr<MediaProducer> { > public: > enum MediaState { > IsNotPlaying = 0,
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197382
:
368483
|
368513
|
368618