New issue
Advanced search Search tips

Issue 701712 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: May 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Bug



Sign in to add a comment

Race in WebMediaPlayerMSCompositor

Project Member Reported by maxmorin@chromium.org, Mar 15 2017

Issue description

Race on total/dropped frame count. Sample tsan reports:

==================
WARNING: ThreadSanitizer: data race (pid=138444)
  Read of size 8 at 0x7b3400052f40 by main thread:
    #0 content::WebMediaPlayerMSCompositor::total_frame_count() const content/renderer/media/webmediaplayer_ms_compositor.cc:181 (chrome+0x7d2078a)
    #1 decodedFrameCount content/renderer/media/webmediaplayer_ms.cc:483 (chrome+0x7d1e3e9)
    #2 webkitDecodedFrameCount third_party/WebKit/Source/core/html/HTMLVideoElement.cpp:297 (chrome+0x6bf5a1d)
    #3 webkitDecodedFrameCountAttributeGetter /usr/local/google/home/maxmorin/chromium/src/out/tsan-lin/gen/blink/bindings/core/v8/V8HTMLVideoElement.cpp:172 (chrome+0x63f0062)
    #4 webkitDecodedFrameCountAttributeGetterCallback /usr/local/google/home/maxmorin/chromium/src/out/tsan-lin/gen/blink/bindings/core/v8/V8HTMLVideoElement.cpp:278 (chrome+0x63f0062)
    #5 <null> <null> (0x7f621e804601)
    #6 CallInternal v8/src/execution.cc:181 (chrome+0x1f13e9e)
    #7 Call v8/src/execution.cc:191 (chrome+0x1f13e9e)
    #8 Call v8/src/api.cc:5121 (chrome+0x196c6fa)
    #9 callFunction third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp:656 (chrome+0x633e7a3)
    #10 handleEvent /usr/local/google/home/maxmorin/chromium/src/out/tsan-lin/gen/blink/bindings/modules/v8/V8RTCStatsCallback.cpp:48 (chrome+0x7455b3e)
    #11 requestSucceeded third_party/WebKit/Source/modules/peerconnection/RTCStatsRequestImpl.cpp:69 (chrome+0x77b414d)
    #12 requestSucceeded third_party/WebKit/Source/platform/exported/WebRTCStatsRequest.cpp:66 (chrome+0x8f9b44e)
    #13 requestSucceeded content/renderer/media/rtc_peer_connection_handler.cc:948 (chrome+0x7bfee3f)
    #14 DeliverCallback content/renderer/media/rtc_peer_connection_handler.cc:673 (chrome+0x7c0d6fb)
    #15 Invoke<const scoped_refptr<content::(anonymous namespace)::StatsResponse> &, std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *> base/bind_internal.h:214 (chrome+0x7c0e84c)
    #16 MakeItSo<void (content::(anonymous namespace)::StatsResponse::*const &)(const std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *), const scoped_refptr<content::(anonymous namespace)::StatsResponse> &, std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *> base/bind_internal.h:285 (chrome+0x7c0e84c)
    #17 RunImpl<void (content::(anonymous namespace)::StatsResponse::*const &)(const std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *), const std::__1::tuple<scoped_refptr<content::(anonymous namespace)::StatsResponse>, base::internal::UnretainedWrapper<std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > > > &, 0, 1> base/bind_internal.h:361 (chrome+0x7c0e84c)
    #18 Run base/bind_internal.h:339 (chrome+0x7c0e84c)
    #19 Run base/callback.h:85 (chrome+0x31c3484)
    #20 RunTaskAndPostReply base/threading/post_task_and_reply_impl.cc:47 (chrome+0x31c3484)
    #21 Invoke<base::(anonymous namespace)::PostTaskAndReplyRelay *> base/bind_internal.h:214 (chrome+0x31c3635)
    #22 MakeItSo<void (base::(anonymous namespace)::PostTaskAndReplyRelay::*const &)(), base::(anonymous namespace)::PostTaskAndReplyRelay *> base/bind_internal.h:285 (chrome+0x31c3635)
    #23 RunImpl<void (base::(anonymous namespace)::PostTaskAndReplyRelay::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::(anonymous namespace)::PostTaskAndReplyRelay> > &, 0> base/bind_internal.h:361 (chrome+0x31c3635)
    #24 Run base/bind_internal.h:339 (chrome+0x31c3635)
    #25 Run base/callback.h:68 (chrome+0x3213c8a)
    #26 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #27 ProcessTaskFromWorkQueue third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:533 (chrome+0x61d6b3c)
    #28 DoWork third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:331 (chrome+0x61d47e3)
    #29 Invoke<const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:214 (chrome+0x61d8dbf)
    #30 MakeItSo<void (blink::scheduler::TaskQueueManager::*const &)(bool), const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:305 (chrome+0x61d8dbf)
    #31 RunImpl<void (blink::scheduler::TaskQueueManager::*const &)(bool), const std::__1::tuple<base::WeakPtr<blink::scheduler::TaskQueueManager>, bool> &, 0, 1> base/bind_internal.h:361 (chrome+0x61d8dbf)
    #32 Run base/bind_internal.h:339 (chrome+0x61d8dbf)
    #33 Run base/callback.h:68 (chrome+0x3213c8a)
    #34 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #35 RunTask base/message_loop/message_loop.cc:423 (chrome+0x315a8c2)
    #36 DeferOrRunPendingTask base/message_loop/message_loop.cc:434 (chrome+0x315ae8d)
    #37 DoWork base/message_loop/message_loop.cc:527 (chrome+0x315b664)
    #38 Run base/message_loop/message_pump_default.cc:33 (chrome+0x315f161)
    #39 RunHandler base/message_loop/message_loop.cc:387 (chrome+0x315a3ab)
    #40 Run base/run_loop.cc:37 (chrome+0x318fbe9)
    #41 RendererMain content/renderer/renderer_main.cc:200 (chrome+0x7bb4a6f)
    #42 RunZygote content/app/content_main_runner.cc:420 (chrome+0x2bf9afd)
    #43 RunNamedProcessTypeMain content/app/content_main_runner.cc:499 (chrome+0x2bfa657)
    #44 Run content/app/content_main_runner.cc:836 (chrome+0x2bfb1e4)
    #45 ContentMain content/app/content_main.cc:20 (chrome+0x2bf930e)
    #46 ChromeMain chrome/app/chrome_main.cc:121 (chrome+0xc3ebfb)
    #47 main chrome/app/chrome_exe_main_aura.cc:17 (chrome+0xc3eb4e)

  Previous write of size 8 at 0x7b3400052f40 by thread T2 (mutexes: write M102029404838113136):
    #0 EnqueueFrame content/renderer/media/webmediaplayer_ms_compositor.cc:205 (chrome+0x7d208a1)
    #1 Invoke<const scoped_refptr<content::WebMediaPlayerMSCompositor> &, scoped_refptr<media::VideoFrame> > base/bind_internal.h:214 (chrome+0x7d1fd0e)
    #2 MakeItSo<void (content::WebMediaPlayerMSCompositor::*const &)(scoped_refptr<media::VideoFrame>), const scoped_refptr<content::WebMediaPlayerMSCompositor> &, scoped_refptr<media::VideoFrame> > base/bind_internal.h:285 (chrome+0x7d1fd0e)
    #3 RunImpl<void (content::WebMediaPlayerMSCompositor::*const &)(scoped_refptr<media::VideoFrame>), const std::__1::tuple<scoped_refptr<content::WebMediaPlayerMSCompositor> > &, 0> base/bind_internal.h:361 (chrome+0x7d1fd0e)
    #4 Run base/bind_internal.h:339 (chrome+0x7d1fd0e)
    #5 Run base/callback.h:85 (chrome+0x7d1f644)
    #6 OnVideoFrame content/renderer/media/webmediaplayer_ms.cc:107 (chrome+0x7d1f644)
    #7 Invoke<const base::WeakPtr<content::WebMediaPlayerMS::FrameDeliverer> &, scoped_refptr<media::VideoFrame> > base/bind_internal.h:214 (chrome+0x7d1f83c)
    #8 MakeItSo<void (content::WebMediaPlayerMS::FrameDeliverer::*const &)(scoped_refptr<media::VideoFrame>), const base::WeakPtr<content::WebMediaPlayerMS::FrameDeliverer> &, scoped_refptr<media::VideoFrame> > base/bind_internal.h:305 (chrome+0x7d1f83c)
    #9 RunImpl<void (content::WebMediaPlayerMS::FrameDeliverer::*const &)(scoped_refptr<media::VideoFrame>), const std::__1::tuple<base::WeakPtr<content::WebMediaPlayerMS::FrameDeliverer> > &, 0> base/bind_internal.h:361 (chrome+0x7d1f83c)
    #10 Run base/bind_internal.h:339 (chrome+0x7d1f83c)
    #11 Run base/callback.h:85 (chrome+0x7bf3012)
    #12 FrameReady content/renderer/media/media_stream_video_renderer_sink.cc:101 (chrome+0x7bf3012)
    #13 OnVideoFrame content/renderer/media/media_stream_video_renderer_sink.cc:77 (chrome+0x7bf28a7)
    #14 Invoke<content::MediaStreamVideoRendererSink::FrameDeliverer *, const scoped_refptr<media::VideoFrame> &, base::TimeTicks> base/bind_internal.h:214 (chrome+0x7bf363e)
    #15 MakeItSo<void (content::MediaStreamVideoRendererSink::FrameDeliverer::*const &)(const scoped_refptr<media::VideoFrame> &, base::TimeTicks), content::MediaStreamVideoRendererSink::FrameDeliverer *, const scoped_refptr<media::VideoFrame> &, base::TimeTicks> base/bind_internal.h:285 (chrome+0x7bf363e)
    #16 RunImpl<void (content::MediaStreamVideoRendererSink::FrameDeliverer::*const &)(const scoped_refptr<media::VideoFrame> &, base::TimeTicks), const std::__1::tuple<base::internal::UnretainedWrapper<content::MediaStreamVideoRendererSink::FrameDeliverer> > &, 0> base/bind_internal.h:361 (chrome+0x7bf363e)
    #17 Run base/bind_internal.h:339 (chrome+0x7bf363e)
    #18 Run base/callback.h:85 (chrome+0x7bf73a7)
    #19 DeliverFrameOnIO content/renderer/media/media_stream_video_track.cc:163 (chrome+0x7bf73a7)
    #20 Invoke<const scoped_refptr<content::MediaStreamVideoTrack::FrameDeliverer> &, const scoped_refptr<media::VideoFrame> &, base::TimeTicks> base/bind_internal.h:214 (chrome+0x7bf8c80)
    #21 MakeItSo<void (content::MediaStreamVideoTrack::FrameDeliverer::*const &)(const scoped_refptr<media::VideoFrame> &, base::TimeTicks), const scoped_refptr<content::MediaStreamVideoTrack::FrameDeliverer> &, const scoped_refptr<media::VideoFrame> &, base::TimeTicks> base/bind_internal.h:285 (chrome+0x7bf8c80)
    #22 RunImpl<void (content::MediaStreamVideoTrack::FrameDeliverer::*const &)(const scoped_refptr<media::VideoFrame> &, base::TimeTicks), const std::__1::tuple<scoped_refptr<content::MediaStreamVideoTrack::FrameDeliverer> > &, 0> base/bind_internal.h:361 (chrome+0x7bf8c80)
    #23 Run base/bind_internal.h:339 (chrome+0x7bf8c80)
    #24 Run base/callback.h:85 (chrome+0x7c1c610)
    #25 DoDeliverFrame content/renderer/media/video_track_adapter.cc:307 (chrome+0x7c1c610)
    #26 DeliverFrame content/renderer/media/video_track_adapter.cc:282 (chrome+0x7c1c610)
    #27 DeliverFrameOnIO content/renderer/media/video_track_adapter.cc:496 (chrome+0x7c1d965)
    #28 Invoke<const scoped_refptr<content::VideoTrackAdapter> &, const scoped_refptr<media::VideoFrame> &, base::TimeTicks> base/bind_internal.h:214 (chrome+0x7bf68e0)
    #29 MakeItSo<void (content::VideoTrackAdapter::*const &)(const scoped_refptr<media::VideoFrame> &, base::TimeTicks), const scoped_refptr<content::VideoTrackAdapter> &, const scoped_refptr<media::VideoFrame> &, base::TimeTicks> base/bind_internal.h:285 (chrome+0x7bf68e0)
    #30 RunImpl<void (content::VideoTrackAdapter::*const &)(const scoped_refptr<media::VideoFrame> &, base::TimeTicks), const std::__1::tuple<scoped_refptr<content::VideoTrackAdapter> > &, 0> base/bind_internal.h:361 (chrome+0x7bf68e0)
    #31 Run base/bind_internal.h:339 (chrome+0x7bf68e0)
    #32 Run base/callback.h:85 (chrome+0x7d4c9a2)
    #33 DoRenderFrameOnIOThread content/renderer/media/webrtc/media_stream_remote_video_source.cc:165 (chrome+0x7d4c9a2)
    #34 Invoke<const scoped_refptr<content::MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate> &, const scoped_refptr<media::VideoFrame> &> base/bind_internal.h:214 (chrome+0x7d4d46d)
    #35 MakeItSo<void (content::MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::*const &)(const scoped_refptr<media::VideoFrame> &), const scoped_refptr<content::MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate> &, const scoped_refptr<media::VideoFrame> &> base/bind_internal.h:285 (chrome+0x7d4d46d)
    #36 RunImpl<void (content::MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::*const &)(const scoped_refptr<media::VideoFrame> &), const std::__1::tuple<scoped_refptr<content::MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate>, scoped_refptr<media::VideoFrame> > &, 0, 1> base/bind_internal.h:361 (chrome+0x7d4d46d)
    #37 Run base/bind_internal.h:339 (chrome+0x7d4d46d)
    #38 Run base/callback.h:68 (chrome+0x3213c8a)
    #39 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #40 RunTask base/message_loop/message_loop.cc:423 (chrome+0x315a8c2)
    #41 DeferOrRunPendingTask base/message_loop/message_loop.cc:434 (chrome+0x315ae8d)
    #42 DoWork base/message_loop/message_loop.cc:527 (chrome+0x315b664)
    #43 Run base/message_loop/message_pump_libevent.cc:219 (chrome+0x31606f0)
    #44 RunHandler base/message_loop/message_loop.cc:387 (chrome+0x315a3ab)
    #45 Run base/run_loop.cc:37 (chrome+0x318fbe9)
    #46 base::Thread::Run(base::RunLoop*) base/threading/thread.cc:250 (chrome+0x31ca799)
    #47 ThreadMain base/threading/thread.cc:333 (chrome+0x31ca9e4)
    #48 ThreadFunc base/threading/platform_thread_posix.cc:71 (chrome+0x31c325d)

  Location is heap block of size 200 at 0x7b3400052ed0 allocated by main thread:
    #0 operator new(unsigned long) ??:? (chrome+0xc3e692)
    #1 load content/renderer/media/webmediaplayer_ms.cc:228 (chrome+0x7d1cc95)
    #2 startPlayerLoad third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1224 (chrome+0x6b9e66d)
    #3 loadResource third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1150 (chrome+0x6b9d017)
    #4 loadSourceFromAttribute third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1064 (chrome+0x6b9c6c2)
    #5 selectMediaResource third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1019 (chrome+0x6b9c1fc)
    #6 loadInternal third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:963 (chrome+0x6b9ab76)
    #7 blink::HTMLMediaElement::loadTimerFired(blink::TimerBase*) third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:729 (chrome+0x6b9773c)
    #8 blink::TaskRunnerTimer<blink::HTMLMediaElement>::fired() third_party/WebKit/Source/platform/Timer.h:144 (chrome+0x6baf126)
    #9 runInternal third_party/WebKit/Source/platform/Timer.cpp:174 (chrome+0x60a0a73)
    #10 Invoke<const base::WeakPtr<blink::TimerBase> &> base/bind_internal.h:214 (chrome+0x60a0bf7)
    #11 MakeItSo<void (blink::TimerBase::*const &)(), const base::WeakPtr<blink::TimerBase> &> base/bind_internal.h:305 (chrome+0x60a0bf7)
    #12 RunImpl<void (blink::TimerBase::*const &)(), const std::__1::tuple<base::WeakPtr<blink::TimerBase> > &, 0> base/bind_internal.h:361 (chrome+0x60a0bf7)
    #13 Run base/bind_internal.h:339 (chrome+0x60a0bf7)
    #14 Run base/callback.h:68 (chrome+0x3213c8a)
    #15 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #16 ProcessTaskFromWorkQueue third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:533 (chrome+0x61d6b3c)
    #17 DoWork third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:331 (chrome+0x61d47e3)
    #18 Invoke<const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:214 (chrome+0x61d8dbf)
    #19 MakeItSo<void (blink::scheduler::TaskQueueManager::*const &)(bool), const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:305 (chrome+0x61d8dbf)
    #20 RunImpl<void (blink::scheduler::TaskQueueManager::*const &)(bool), const std::__1::tuple<base::WeakPtr<blink::scheduler::TaskQueueManager>, bool> &, 0, 1> base/bind_internal.h:361 (chrome+0x61d8dbf)
    #21 Run base/bind_internal.h:339 (chrome+0x61d8dbf)
    #22 Run base/callback.h:68 (chrome+0x3213c8a)
    #23 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #24 RunTask base/message_loop/message_loop.cc:423 (chrome+0x315a8c2)
    #25 DeferOrRunPendingTask base/message_loop/message_loop.cc:434 (chrome+0x315ae8d)
    #26 DoWork base/message_loop/message_loop.cc:527 (chrome+0x315b664)
    #27 Run base/message_loop/message_pump_default.cc:33 (chrome+0x315f161)
    #28 RunHandler base/message_loop/message_loop.cc:387 (chrome+0x315a3ab)
    #29 Run base/run_loop.cc:37 (chrome+0x318fbe9)
    #30 RendererMain content/renderer/renderer_main.cc:200 (chrome+0x7bb4a6f)
    #31 RunZygote content/app/content_main_runner.cc:420 (chrome+0x2bf9afd)
    #32 RunNamedProcessTypeMain content/app/content_main_runner.cc:499 (chrome+0x2bfa657)
    #33 Run content/app/content_main_runner.cc:836 (chrome+0x2bfb1e4)
    #34 ContentMain content/app/content_main.cc:20 (chrome+0x2bf930e)
    #35 ChromeMain chrome/app/chrome_main.cc:121 (chrome+0xc3ebfb)
    #36 main chrome/app/chrome_exe_main_aura.cc:17 (chrome+0xc3eb4e)

  Mutex M102029404838113136 is already destroyed.

  Thread T2 'Chrome_ChildIOThread' (tid=138447, running) created by main thread at:
    #0 pthread_create ??:? (chrome+0xbe0985)
    #1 CreateThread base/threading/platform_thread_posix.cc:110 (chrome+0x31c2d57)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191 (chrome+0x31c2c55)
    #3 StartWithOptions base/threading/thread.cc:112 (chrome+0x31ca335)
    #4 ChildProcess content/child/child_process.cc:78 (chrome+0x5fee80c)
    #5 RenderProcess content/renderer/render_process.cc:15 (chrome+0x7d35cc2)
    #6 RenderProcessImpl content/renderer/render_process_impl.cc:138 (chrome+0x7b6f78d)
    #7 Create content/renderer/render_process_impl.cc:223 (chrome+0x7b6ffc2)
    #8 RendererMain content/renderer/renderer_main.cc:187 (chrome+0x7bb49af)
    #9 RunZygote content/app/content_main_runner.cc:420 (chrome+0x2bf9afd)
    #10 RunNamedProcessTypeMain content/app/content_main_runner.cc:499 (chrome+0x2bfa657)
    #11 Run content/app/content_main_runner.cc:836 (chrome+0x2bfb1e4)
    #12 ContentMain content/app/content_main.cc:20 (chrome+0x2bf930e)
    #13 ChromeMain chrome/app/chrome_main.cc:121 (chrome+0xc3ebfb)
    #14 main chrome/app/chrome_exe_main_aura.cc:17 (chrome+0xc3eb4e)

SUMMARY: ThreadSanitizer: data race content/renderer/media/webmediaplayer_ms_compositor.cc:181 in content::WebMediaPlayerMSCompositor::total_frame_count() const
==================
==================
WARNING: ThreadSanitizer: data race (pid=138444)
  Write of size 8 at 0x7b3400052f48 by thread T4 (mutexes: write M807968543349198456, write M102029404838113136):
    #0 Render content/renderer/media/webmediaplayer_ms_compositor.cc:372 (chrome+0x7d212f6)
    #1 UpdateCurrentFrame content/renderer/media/webmediaplayer_ms_compositor.cc:274 (chrome+0x7d21016)
    #2 OnBeginFrame cc/layers/video_frame_provider_client_impl.cc:157 (chrome+0x87a7052)
    #3 non-virtual thunk to cc::VideoFrameProviderClientImpl::OnBeginFrame(cc::BeginFrameArgs const&) cc/layers/video_frame_provider_client_impl.cc:? (chrome+0x87a7194)
    #4 WillBeginImplFrame cc/trees/layer_tree_host_impl.cc:1899 (chrome+0x4580c7f)
    #5 WillBeginImplFrame cc/trees/proxy_impl.cc:442 (chrome+0x464e29f)
    #6 <null> cc/trees/proxy_impl.cc:? (chrome+0x464e29f)
    #7 BeginImplFrame cc/scheduler/scheduler.cc:477 (chrome+0x461101e)
    #8 BeginImplFrameWithDeadline cc/scheduler/scheduler.cc:412 (chrome+0x461098e)
    #9 OnBeginFrameDerivedImpl cc/scheduler/scheduler.cc:297 (chrome+0x460fe79)
    #10 OnBeginFrame cc/scheduler/begin_frame_source.cc:45 (chrome+0x4534b0c)
    #11 OnBeginFrame cc/scheduler/begin_frame_source.cc:423 (chrome+0x4537aae)
    #12 content::CompositorExternalBeginFrameSource::OnBeginFrame(cc::BeginFrameArgs const&) content/renderer/gpu/compositor_external_begin_frame_source.cc:90 (chrome+0x7cd2674)
    #13 DispatchToMethodImpl<content::CompositorExternalBeginFrameSource *, void (content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &), const std::__1::tuple<cc::BeginFrameArgs> &, 0> base/tuple.h:91 (chrome+0x7cd2535)
    #14 DispatchToMethod<content::CompositorExternalBeginFrameSource *, void (content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &), const std::__1::tuple<cc::BeginFrameArgs> &> base/tuple.h:98 (chrome+0x7cd2535)
    #15 DispatchToMethod<content::CompositorExternalBeginFrameSource, void (content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &), void, std::__1::tuple<cc::BeginFrameArgs> > ipc/ipc_message_templates.h:26 (chrome+0x7cd2535)
    #16 Dispatch<content::CompositorExternalBeginFrameSource, content::CompositorExternalBeginFrameSource, void, void (content::CompositorExternalBeginFrameSource::*)(const cc::BeginFrameArgs &)> ipc/ipc_message_templates.h:121 (chrome+0x7cd2535)
    #17 OnMessageReceived content/renderer/gpu/compositor_external_begin_frame_source.cc:79 (chrome+0x7cd2217)
    #18 content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::OnMessageReceived(IPC::Message const&) content/renderer/gpu/compositor_external_begin_frame_source.h:66 (chrome+0x7cd1f1f)
    #19 Invoke<const scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> &, const IPC::Message &> base/bind_internal.h:214 (chrome+0x7cd275f)
    #20 MakeItSo<void (content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*const &)(const IPC::Message &), const scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> &, const IPC::Message &> base/bind_internal.h:285 (chrome+0x7cd275f)
    #21 RunImpl<void (content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy::*const &)(const IPC::Message &), const std::__1::tuple<scoped_refptr<content::CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSourceProxy> > &, 0> base/bind_internal.h:361 (chrome+0x7cd275f)
    #22 Run base/bind_internal.h:339 (chrome+0x7cd275f)
    #23 Run base/callback.h:85 (chrome+0x7cd310e)
    #24 ProcessMessageOnCompositorThread content/renderer/gpu/compositor_forwarding_message_filter.cc:75 (chrome+0x7cd310e)
    #25 Invoke<const scoped_refptr<content::CompositorForwardingMessageFilter> &, const IPC::Message &> base/bind_internal.h:214 (chrome+0x7cd326d)
    #26 MakeItSo<void (content::CompositorForwardingMessageFilter::*const &)(const IPC::Message &), const scoped_refptr<content::CompositorForwardingMessageFilter> &, const IPC::Message &> base/bind_internal.h:285 (chrome+0x7cd326d)
    #27 RunImpl<void (content::CompositorForwardingMessageFilter::*const &)(const IPC::Message &), const std::__1::tuple<scoped_refptr<content::CompositorForwardingMessageFilter>, IPC::Message> &, 0, 1> base/bind_internal.h:361 (chrome+0x7cd326d)
    #28 Run base/bind_internal.h:339 (chrome+0x7cd326d)
    #29 Run base/callback.h:68 (chrome+0x3213c8a)
    #30 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #31 RunTask base/message_loop/message_loop.cc:423 (chrome+0x315a8c2)
    #32 DeferOrRunPendingTask base/message_loop/message_loop.cc:434 (chrome+0x315ae8d)
    #33 DoWork base/message_loop/message_loop.cc:527 (chrome+0x315b664)
    #34 Run base/message_loop/message_pump_default.cc:33 (chrome+0x315f161)
    #35 RunHandler base/message_loop/message_loop.cc:387 (chrome+0x315a3ab)
    #36 Run base/run_loop.cc:37 (chrome+0x318fbe9)
    #37 base::Thread::Run(base::RunLoop*) base/threading/thread.cc:250 (chrome+0x31ca799)
    #38 ThreadMain base/threading/thread.cc:333 (chrome+0x31ca9e4)
    #39 ThreadFunc base/threading/platform_thread_posix.cc:71 (chrome+0x31c325d)

  Previous read of size 8 at 0x7b3400052f48 by main thread:
    #0 content::WebMediaPlayerMSCompositor::dropped_frame_count() const content/renderer/media/webmediaplayer_ms_compositor.cc:187 (chrome+0x7d207ba)
    #1 droppedFrameCount content/renderer/media/webmediaplayer_ms.cc:488 (chrome+0x7d1e429)
    #2 webkitDroppedFrameCount third_party/WebKit/Source/core/html/HTMLVideoElement.cpp:304 (chrome+0x6bf5a7d)
    #3 webkitDroppedFrameCountAttributeGetter /usr/local/google/home/maxmorin/chromium/src/out/tsan-lin/gen/blink/bindings/core/v8/V8HTMLVideoElement.cpp:180 (chrome+0x63f0172)
    #4 webkitDroppedFrameCountAttributeGetterCallback /usr/local/google/home/maxmorin/chromium/src/out/tsan-lin/gen/blink/bindings/core/v8/V8HTMLVideoElement.cpp:284 (chrome+0x63f0172)
    #5 <null> <null> (0x7f621e804601)
    #6 CallInternal v8/src/execution.cc:181 (chrome+0x1f13e9e)
    #7 Call v8/src/execution.cc:191 (chrome+0x1f13e9e)
    #8 Call v8/src/api.cc:5121 (chrome+0x196c6fa)
    #9 callFunction third_party/WebKit/Source/bindings/core/v8/V8ScriptRunner.cpp:656 (chrome+0x633e7a3)
    #10 handleEvent /usr/local/google/home/maxmorin/chromium/src/out/tsan-lin/gen/blink/bindings/modules/v8/V8RTCStatsCallback.cpp:48 (chrome+0x7455b3e)
    #11 requestSucceeded third_party/WebKit/Source/modules/peerconnection/RTCStatsRequestImpl.cpp:69 (chrome+0x77b414d)
    #12 requestSucceeded third_party/WebKit/Source/platform/exported/WebRTCStatsRequest.cpp:66 (chrome+0x8f9b44e)
    #13 requestSucceeded content/renderer/media/rtc_peer_connection_handler.cc:948 (chrome+0x7bfee3f)
    #14 DeliverCallback content/renderer/media/rtc_peer_connection_handler.cc:673 (chrome+0x7c0d6fb)
    #15 Invoke<const scoped_refptr<content::(anonymous namespace)::StatsResponse> &, std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *> base/bind_internal.h:214 (chrome+0x7c0e84c)
    #16 MakeItSo<void (content::(anonymous namespace)::StatsResponse::*const &)(const std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *), const scoped_refptr<content::(anonymous namespace)::StatsResponse> &, std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *> base/bind_internal.h:285 (chrome+0x7c0e84c)
    #17 RunImpl<void (content::(anonymous namespace)::StatsResponse::*const &)(const std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > *), const std::__1::tuple<scoped_refptr<content::(anonymous namespace)::StatsResponse>, base::internal::UnretainedWrapper<std::__1::vector<content::(anonymous namespace)::StatsResponse::Report *, std::__1::allocator<content::(anonymous namespace)::StatsResponse::Report *> > > > &, 0, 1> base/bind_internal.h:361 (chrome+0x7c0e84c)
    #18 Run base/bind_internal.h:339 (chrome+0x7c0e84c)
    #19 Run base/callback.h:85 (chrome+0x31c3484)
    #20 RunTaskAndPostReply base/threading/post_task_and_reply_impl.cc:47 (chrome+0x31c3484)
    #21 Invoke<base::(anonymous namespace)::PostTaskAndReplyRelay *> base/bind_internal.h:214 (chrome+0x31c3635)
    #22 MakeItSo<void (base::(anonymous namespace)::PostTaskAndReplyRelay::*const &)(), base::(anonymous namespace)::PostTaskAndReplyRelay *> base/bind_internal.h:285 (chrome+0x31c3635)
    #23 RunImpl<void (base::(anonymous namespace)::PostTaskAndReplyRelay::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::(anonymous namespace)::PostTaskAndReplyRelay> > &, 0> base/bind_internal.h:361 (chrome+0x31c3635)
    #24 Run base/bind_internal.h:339 (chrome+0x31c3635)
    #25 Run base/callback.h:68 (chrome+0x3213c8a)
    #26 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #27 ProcessTaskFromWorkQueue third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:533 (chrome+0x61d6b3c)
    #28 DoWork third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:331 (chrome+0x61d47e3)
    #29 Invoke<const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:214 (chrome+0x61d8dbf)
    #30 MakeItSo<void (blink::scheduler::TaskQueueManager::*const &)(bool), const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:305 (chrome+0x61d8dbf)
    #31 RunImpl<void (blink::scheduler::TaskQueueManager::*const &)(bool), const std::__1::tuple<base::WeakPtr<blink::scheduler::TaskQueueManager>, bool> &, 0, 1> base/bind_internal.h:361 (chrome+0x61d8dbf)
    #32 Run base/bind_internal.h:339 (chrome+0x61d8dbf)
    #33 Run base/callback.h:68 (chrome+0x3213c8a)
    #34 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #35 RunTask base/message_loop/message_loop.cc:423 (chrome+0x315a8c2)
    #36 DeferOrRunPendingTask base/message_loop/message_loop.cc:434 (chrome+0x315ae8d)
    #37 DoWork base/message_loop/message_loop.cc:527 (chrome+0x315b664)
    #38 Run base/message_loop/message_pump_default.cc:33 (chrome+0x315f161)
    #39 RunHandler base/message_loop/message_loop.cc:387 (chrome+0x315a3ab)
    #40 Run base/run_loop.cc:37 (chrome+0x318fbe9)
    #41 RendererMain content/renderer/renderer_main.cc:200 (chrome+0x7bb4a6f)
    #42 RunZygote content/app/content_main_runner.cc:420 (chrome+0x2bf9afd)
    #43 RunNamedProcessTypeMain content/app/content_main_runner.cc:499 (chrome+0x2bfa657)
    #44 Run content/app/content_main_runner.cc:836 (chrome+0x2bfb1e4)
    #45 ContentMain content/app/content_main.cc:20 (chrome+0x2bf930e)
    #46 ChromeMain chrome/app/chrome_main.cc:121 (chrome+0xc3ebfb)
    #47 main chrome/app/chrome_exe_main_aura.cc:17 (chrome+0xc3eb4e)

  Location is heap block of size 200 at 0x7b3400052ed0 allocated by main thread:
    #0 operator new(unsigned long) ??:? (chrome+0xc3e692)
    #1 load content/renderer/media/webmediaplayer_ms.cc:228 (chrome+0x7d1cc95)
    #2 startPlayerLoad third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1224 (chrome+0x6b9e66d)
    #3 loadResource third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1150 (chrome+0x6b9d017)
    #4 loadSourceFromAttribute third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1064 (chrome+0x6b9c6c2)
    #5 selectMediaResource third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:1019 (chrome+0x6b9c1fc)
    #6 loadInternal third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:963 (chrome+0x6b9ab76)
    #7 blink::HTMLMediaElement::loadTimerFired(blink::TimerBase*) third_party/WebKit/Source/core/html/HTMLMediaElement.cpp:729 (chrome+0x6b9773c)
    #8 blink::TaskRunnerTimer<blink::HTMLMediaElement>::fired() third_party/WebKit/Source/platform/Timer.h:144 (chrome+0x6baf126)
    #9 runInternal third_party/WebKit/Source/platform/Timer.cpp:174 (chrome+0x60a0a73)
    #10 Invoke<const base::WeakPtr<blink::TimerBase> &> base/bind_internal.h:214 (chrome+0x60a0bf7)
    #11 MakeItSo<void (blink::TimerBase::*const &)(), const base::WeakPtr<blink::TimerBase> &> base/bind_internal.h:305 (chrome+0x60a0bf7)
    #12 RunImpl<void (blink::TimerBase::*const &)(), const std::__1::tuple<base::WeakPtr<blink::TimerBase> > &, 0> base/bind_internal.h:361 (chrome+0x60a0bf7)
    #13 Run base/bind_internal.h:339 (chrome+0x60a0bf7)
    #14 Run base/callback.h:68 (chrome+0x3213c8a)
    #15 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #16 ProcessTaskFromWorkQueue third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:533 (chrome+0x61d6b3c)
    #17 DoWork third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:331 (chrome+0x61d47e3)
    #18 Invoke<const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:214 (chrome+0x61d8dbf)
    #19 MakeItSo<void (blink::scheduler::TaskQueueManager::*const &)(bool), const base::WeakPtr<blink::scheduler::TaskQueueManager> &, const bool &> base/bind_internal.h:305 (chrome+0x61d8dbf)
    #20 RunImpl<void (blink::scheduler::TaskQueueManager::*const &)(bool), const std::__1::tuple<base::WeakPtr<blink::scheduler::TaskQueueManager>, bool> &, 0, 1> base/bind_internal.h:361 (chrome+0x61d8dbf)
    #21 Run base/bind_internal.h:339 (chrome+0x61d8dbf)
    #22 Run base/callback.h:68 (chrome+0x3213c8a)
    #23 RunTask base/debug/task_annotator.cc:59 (chrome+0x3213c8a)
    #24 RunTask base/message_loop/message_loop.cc:423 (chrome+0x315a8c2)
    #25 DeferOrRunPendingTask base/message_loop/message_loop.cc:434 (chrome+0x315ae8d)
    #26 DoWork base/message_loop/message_loop.cc:527 (chrome+0x315b664)
    #27 Run base/message_loop/message_pump_default.cc:33 (chrome+0x315f161)
    #28 RunHandler base/message_loop/message_loop.cc:387 (chrome+0x315a3ab)
    #29 Run base/run_loop.cc:37 (chrome+0x318fbe9)
    #30 RendererMain content/renderer/renderer_main.cc:200 (chrome+0x7bb4a6f)
    #31 RunZygote content/app/content_main_runner.cc:420 (chrome+0x2bf9afd)
    #32 RunNamedProcessTypeMain content/app/content_main_runner.cc:499 (chrome+0x2bfa657)
    #33 Run content/app/content_main_runner.cc:836 (chrome+0x2bfb1e4)
    #34 ContentMain content/app/content_main.cc:20 (chrome+0x2bf930e)
    #35 ChromeMain chrome/app/chrome_main.cc:121 (chrome+0xc3ebfb)
    #36 main chrome/app/chrome_exe_main_aura.cc:17 (chrome+0xc3eb4e)

  Mutex M807968543349198456 is already destroyed.

  Mutex M102029404838113136 is already destroyed.

  Thread T4 'Compositor' (tid=138449, running) created by main thread at:
    #0 pthread_create ??:? (chrome+0xbe0985)
    #1 CreateThread base/threading/platform_thread_posix.cc:110 (chrome+0x31c2d57)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191 (chrome+0x31c2c55)
    #3 StartWithOptions base/threading/thread.cc:112 (chrome+0x31ca335)
    #4 WebThreadImplForWorkerScheduler third_party/WebKit/Source/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc:31 (chrome+0x6153cee)
    #5 WebThreadForCompositor content/renderer/render_thread_impl.cc:290 (chrome+0x7b78638)
    #6 InitializeCompositorThread content/renderer/render_thread_impl.cc:1083 (chrome+0x7b78638)
    #7 InitializeWebKit content/renderer/render_thread_impl.cc:1171 (chrome+0x7b74f58)
    #8 Init content/renderer/render_thread_impl.cc:639 (chrome+0x7b728a0)
    #9 RenderThreadImpl content/renderer/render_thread_impl.cc:606 (chrome+0x7b72322)
    #10 Create content/renderer/render_thread_impl.cc:536 (chrome+0x7b71cc6)
    #11 RendererMain content/renderer/renderer_main.cc:188 (chrome+0x7bb49d0)
    #12 RunZygote content/app/content_main_runner.cc:420 (chrome+0x2bf9afd)
    #13 RunNamedProcessTypeMain content/app/content_main_runner.cc:499 (chrome+0x2bfa657)
    #14 Run content/app/content_main_runner.cc:836 (chrome+0x2bfb1e4)
    #15 ContentMain content/app/content_main.cc:20 (chrome+0x2bf930e)
    #16 ChromeMain chrome/app/chrome_main.cc:121 (chrome+0xc3ebfb)
    #17 main chrome/app/chrome_exe_main_aura.cc:17 (chrome+0xc3eb4e)

SUMMARY: ThreadSanitizer: data race content/renderer/media/webmediaplayer_ms_compositor.cc:372 in Render
==================
 
Cc: emir...@chromium.org
Status: Assigned (was: Started)
Hello emircan. I found this race, but I figure I'll ask you as OWNER what you think is the best approach for fixing it: make {total,dropped}_frame_count atomic (in this case, change them to always be 32 bit wide?) or protect them by |current_frame_lock_|?
Cc: qiangchen@chromium.org
Thanks for the catch. +cc qiangchen@ for his input as well. I think atomic32 would be enough. These getters for stats can be called many times from JS end and we should keep |current_frame_lock_| available.
What is the effect we observe? A wrong count we get?
Labels: Stability-ThreadSanitizer
It's a data race, which is undefined behavior by the C++ standard.
Owner: qiangchen@chromium.org
Project Member

Comment 6 by bugdroid1@chromium.org, Mar 17 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5

commit 4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5
Author: qiangchen <qiangchen@chromium.org>
Date: Fri Mar 17 16:08:26 2017

Bug Fix: Data Race For WebMediaPlayerMS' Frame Count Variable

On thread sanitizer, we found a data race issue for WebMediaPlayerMS' frame
count variables |total_frame_count_| and |dropped_frame_count_|. In this CL
We make those two variables atomic.

BUG= 701712 

Review-Url: https://codereview.chromium.org/2751353003
Cr-Commit-Position: refs/heads/master@{#457786}

[modify] https://crrev.com/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5/content/renderer/media/webmediaplayer_ms_compositor.cc
[modify] https://crrev.com/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5/content/renderer/media/webmediaplayer_ms_compositor.h

Project Member

Comment 7 by bugdroid1@chromium.org, Mar 17 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5

commit 4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5
Author: qiangchen <qiangchen@chromium.org>
Date: Fri Mar 17 16:08:26 2017

Bug Fix: Data Race For WebMediaPlayerMS' Frame Count Variable

On thread sanitizer, we found a data race issue for WebMediaPlayerMS' frame
count variables |total_frame_count_| and |dropped_frame_count_|. In this CL
We make those two variables atomic.

BUG= 701712 

Review-Url: https://codereview.chromium.org/2751353003
Cr-Commit-Position: refs/heads/master@{#457786}

[modify] https://crrev.com/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5/content/renderer/media/webmediaplayer_ms_compositor.cc
[modify] https://crrev.com/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5/content/renderer/media/webmediaplayer_ms_compositor.h

Status: Fixed (was: Assigned)
Project Member

Comment 9 by bugdroid1@chromium.org, Mar 29 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/5591e262e49dfbf3f23ad6e54717e9dcd2771fe3

commit 5591e262e49dfbf3f23ad6e54717e9dcd2771fe3
Author: qiangchen <qiangchen@chromium.org>
Date: Wed Mar 29 22:31:35 2017

Revert of Bug Fix: Data Race For WebMediaPlayerMS' Frame Count Variable (patchset #3 id:60001 of https://codereview.chromium.org/2751353003/ )

Reason for revert:
Lock contention, increase chrome_public_test_apk run time a lot.

We might need a finer lock.

Original issue's description:
> Bug Fix: Data Race For WebMediaPlayerMS' Frame Count Variable
>
> On thread sanitizer, we found a data race issue for WebMediaPlayerMS' frame
> count variables |total_frame_count_| and |dropped_frame_count_|. In this CL
> We make those two variables atomic.
>
> BUG= 701712 
>
> Review-Url: https://codereview.chromium.org/2751353003
> Cr-Commit-Position: refs/heads/master@{#457786}
> Committed: https://chromium.googlesource.com/chromium/src/+/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5

TBR=dalecurtis@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG= 701712 

Review-Url: https://codereview.chromium.org/2777183009
Cr-Commit-Position: refs/heads/master@{#460556}

[modify] https://crrev.com/5591e262e49dfbf3f23ad6e54717e9dcd2771fe3/content/renderer/media/webmediaplayer_ms_compositor.cc
[modify] https://crrev.com/5591e262e49dfbf3f23ad6e54717e9dcd2771fe3/content/renderer/media/webmediaplayer_ms_compositor.h

Status: Assigned (was: Fixed)
If locks are too slow, how about implementing the counter using nobarrier atomic store/load ops? It should have very similar performance to the racy version.
Hmm, I feel like there are opportunities for updating these on the thread without locking, then post updates every once in a while. This is what we do in VideoRendererImpl.
Project Member

Comment 12 by bugdroid1@chromium.org, Apr 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/278b26a717794d67f361145e0a4a72a758839d8a

commit 278b26a717794d67f361145e0a4a72a758839d8a
Author: qiangchen <qiangchen@chromium.org>
Date: Mon Apr 03 22:13:50 2017

Reland of Bug Fix: Data Race For WebMediaPlayerMS' Frame Count Variable (patchset #1 id:1 of https://codereview.chromium.org/2777183009/ )

Reason for revert:
By testing, this CL is not the cause of increase of chrome_public_test_apk run time.

Original issue's description:
> Revert of Bug Fix: Data Race For WebMediaPlayerMS' Frame Count Variable (patchset #3 id:60001 of https://codereview.chromium.org/2751353003/ )
>
> Reason for revert:
> Lock contention, increase chrome_public_test_apk run time a lot.
>
> We might need a finer lock.
>
> Original issue's description:
> > Bug Fix: Data Race For WebMediaPlayerMS' Frame Count Variable
> >
> > On thread sanitizer, we found a data race issue for WebMediaPlayerMS' frame
> > count variables |total_frame_count_| and |dropped_frame_count_|. In this CL
> > We make those two variables atomic.
> >
> > BUG= 701712 
> >
> > Review-Url: https://codereview.chromium.org/2751353003
> > Cr-Commit-Position: refs/heads/master@{#457786}
> > Committed: https://chromium.googlesource.com/chromium/src/+/4cb6dcab2e3d9b4f14ff3bd5dc8f3fd3a57e19e5
>
> TBR=dalecurtis@chromium.org
> # Not skipping CQ checks because original CL landed more than 1 days ago.
> BUG= 701712 
>
> Review-Url: https://codereview.chromium.org/2777183009
> Cr-Commit-Position: refs/heads/master@{#460556}
> Committed: https://chromium.googlesource.com/chromium/src/+/5591e262e49dfbf3f23ad6e54717e9dcd2771fe3

TBR=dalecurtis@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG= 701712 

Review-Url: https://codereview.chromium.org/2789973002
Cr-Commit-Position: refs/heads/master@{#461555}

[modify] https://crrev.com/278b26a717794d67f361145e0a4a72a758839d8a/content/renderer/media/webmediaplayer_ms_compositor.cc
[modify] https://crrev.com/278b26a717794d67f361145e0a4a72a758839d8a/content/renderer/media/webmediaplayer_ms_compositor.h

Status: Fixed (was: Assigned)

Sign in to add a comment