• haraken@chromium.org's avatar
    Oilpan: Move MediaStreamSource, MediaStreamComponent and MediaStreamDescriptor · 66df2e32
    haraken@chromium.org authored
    to oilpan's heap
    
    - MediaStreamSource, MediaStreamComponent and MediaStreamDescriptor must be moved
    to oilpan's heap in one go because their lifetime are tightly coupled.
    
    - Removed m_descriptor->setClient(0) from MediaStream's destructor. This is OK
    because MediaStreamDescriptor has a strong Member back to the Client
    (i.e., MediaStream).
    
    - Removed m_component->source()->removeObserver(this) from MediaStreamTrack's
    destructor. This is OK because this CL made the observers weak
    (i.e., MediaStreamSource::m_observers is a hash set of weak members to
    MediaStreamTrack objects).
    
    - Removed WebMediaStreamTrack::ExtraData::m_owner because it's unused.
    
    - Introduced MediaStreamComponentDisposer to delay the destruction of
    MediaStreamComponent::m_extraData. The ExtraData is exposed to the web
    and some Chromium objects inherit from the ExtraData. If we clear the
    m_extraData in the MediaStreamComponent's destructor, those Chromium-side
    objects are also destructed in the MediaStreamComponent's destructor.
    This is problematic because the destructors of the Chromium-side classes
    can touch other on-heap objects in the Blink side. To avoid the issue,
    we need to delay the destruction of the ExtraData to thread-specific
    weak processing. The disposer pattern actually makes the deletion of
    the extra data happen earlier and not later. The disposer makes sure
    that the extra data is destructed in weak processing which is run before
    sweeping and therefore all the objects are still alive and can be touched.
    
    
    - The same problem arises for MediaStreamDescriptor and MediaStreamSource.
    This CL adds MediaStreamDescriptorDisposer and MediaStreamSourceDisposer.
    
    - This CL depends on https://codereview.chromium.org/543603003/ and https://codereview.chromium.org/549153002.
    
    BUG=340522
    
    Review URL: https://codereview.chromium.org/552653005
    
    git-svn-id: svn://svn.chromium.org/blink/trunk@181702 bbb929c8-8fbe-4397-9dbb-9b2b20218538
    66df2e32
MediaStream.cpp 12.6 KB