New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 749315 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Last visit > 30 days ago
Closed: Aug 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 3
Type: Bug

Blocking:
issue 368525



Sign in to add a comment

Racy access to raster/skia global in browser_tests

Project Member Reported by gab@chromium.org, Jul 26 2017

Issue description

@Dana: any idea? The access stack seems to be the same on both sides from "CompositorTileW" threads?

In WebUIWebViewBrowserTest.AddContentScriptsWithNewWindowAPI and others, log:

WARNING: ThreadSanitizer: data race (pid=27578)
  Write of size 4 at 0x000010673208 by thread T12:
    #0 SkPathStroker::conicStroke(SkConic const&, SkQuadConstruct*) third_party/skia/src/core/SkStroke.cpp:1180:5 (browser_tests+0x5727f41)
    #1 SkPathStroker::conicTo(SkPoint const&, SkPoint const&, float) third_party/skia/src/core/SkStroke.cpp:713:18 (browser_tests+0x5727c31)
    #2 SkStroke::strokePath(SkPath const&, SkPath*) const third_party/skia/src/core/SkStroke.cpp:1416:25 (browser_tests+0x572ac5a)
    #3 SkStrokeRec::applyToPath(SkPath*, SkPath const&) const third_party/skia/src/core/SkStrokeRec.cpp:121:13 (browser_tests+0x541db56)
    #4 SkPaint::getFillPath(SkPath const&, SkPath*, SkRect const*, float) const third_party/skia/src/core/SkPaint.cpp:1969:14 (browser_tests+0x53b783c)
    #5 SkDraw::drawPath(SkPath const&, SkPaint const&, SkMatrix const*, bool, bool, SkBlitter*) const third_party/skia/src/core/SkDraw.cpp:1099:25 (browser_tests+0x536b85e)
    #6 drawPath third_party/skia/src/core/SkDraw.h:56:15 (browser_tests+0x56a00a1)
    #7 SkBitmapDevice::drawPath(SkPath const&, SkPaint const&, SkMatrix const*, bool) third_party/skia/src/core/SkBitmapDevice.cpp:222 (browser_tests+0x56a00a1)
    #8 SkCanvas::onDrawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkCanvas.cpp:2158:23 (browser_tests+0x533dbcc)
    #9 SkCanvas::drawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkCanvas.cpp:1758:11 (browser_tests+0x5339db1)
    #10 SkColorSpaceXformCanvas::onDrawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkColorSpaceXformCanvas.cpp:69:18 (browser_tests+0x5899513)
    #11 SkCanvas::drawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkCanvas.cpp:1758:11 (browser_tests+0x5339db1)
    #12 RasterWithFlags cc/paint/paint_op_buffer.cc:1200:11 (browser_tests+0x604401a)
    #13 cc::DrawPathOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.h:662 (browser_tests+0x604401a)
    #14 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #15 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #16 Playback cc/paint/paint_op_buffer.cc:1600:3 (browser_tests+0x6040d0e)
    #17 cc::DrawRecordOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.cc:1217 (browser_tests+0x6040d0e)
    #18 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #19 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #20 Playback cc/paint/paint_op_buffer.cc:1600:3 (browser_tests+0x6040d0e)
    #21 cc::DrawRecordOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.cc:1217 (browser_tests+0x6040d0e)
    #22 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #23 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #24 Playback cc/paint/paint_op_buffer.cc:1600:3 (browser_tests+0x6040d0e)
    #25 cc::DrawRecordOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.cc:1217 (browser_tests+0x6040d0e)
    #26 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #27 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #28 cc::DisplayItemList::Raster(SkCanvas*, SkPicture::AbortCallback*) const cc/paint/display_item_list.cc:57:20 (browser_tests+0xb900441)
    #29 RasterCommon cc/raster/raster_source.cc:195:20 (browser_tests+0x63d6f25)
    #30 cc::RasterSource::PlaybackToCanvas(SkCanvas*, gfx::ColorSpace const&, cc::RasterSource::PlaybackSettings const&) const cc/raster/raster_source.cc:97 (browser_tests+0x63d6f25)
    #31 cc::RasterSource::PlaybackToCanvas(SkCanvas*, gfx::ColorSpace const&, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, cc::RasterSource::PlaybackSettings const&) const cc/raster/raster_source.cc:61:3 (browser_tests+0x63d6d01)
    #32 cc::RasterBufferProvider::PlaybackToMemory(void*, viz::ResourceFormat, gfx::Size const&, unsigned long, cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, gfx::ColorSpace const&, cc::RasterSource::PlaybackSettings const&) cc/raster/raster_buffer_provider.cc:91:22 (browser_tests+0x63d5de6)
    #33 cc::OneCopyRasterBufferProvider::PlaybackToStagingBuffer(cc::StagingBuffer*, cc::Resource const*, cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, gfx::ColorSpace const&, cc::RasterSource::PlaybackSettings const&, unsigned long, unsigned long) cc/raster/one_copy_raster_buffer_provider.cc:312:5 (browser_tests+0x63d4f24)
    #34 cc::OneCopyRasterBufferProvider::PlaybackAndCopyOnWorkerThread(cc::Resource const*, cc::ResourceProvider::ScopedWriteLockGL*, gpu::SyncToken const&, cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, cc::RasterSource::PlaybackSettings const&, unsigned long, unsigned long) cc/raster/one_copy_raster_buffer_provider.cc:248:3 (browser_tests+0x63d3b4b)
    #35 cc::OneCopyRasterBufferProvider::RasterBufferImpl::Playback(cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, unsigned long, gfx::AxisTransform2d const&, cc::RasterSource::PlaybackSettings const&) cc/raster/one_copy_raster_buffer_provider.cc:63:12 (browser_tests+0x63d38cb)
    #36 cc::(anonymous namespace)::RasterTaskImpl::RunOnWorkerThread() cc/tiles/tile_manager.cc:130:21 (browser_tests+0x64430f4)
    #37 content::CategorizedWorkerPool::RunTaskInCategoryWithLockAcquired(cc::TaskCategory) content/renderer/categorized_worker_pool.cc:362:28 (browser_tests+0xaf113fb)
    #38 RunTaskWithLockAcquired content/renderer/categorized_worker_pool.cc:341:7 (browser_tests+0xaf0fbe3)
    #39 content::CategorizedWorkerPool::Run(std::__1::vector<cc::TaskCategory, std::__1::allocator<cc::TaskCategory> > const&, base::ConditionVariable*) content/renderer/categorized_worker_pool.cc:233 (browser_tests+0xaf0fbe3)
    #40 content::(anonymous namespace)::CategorizedWorkerPoolThread::Run() content/renderer/categorized_worker_pool.cc:35:32 (browser_tests+0xaf1185e)
    #41 base::SimpleThread::ThreadMain() base/threading/simple_thread.cc:68:3 (browser_tests+0x427caf6)
    #42 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (browser_tests+0x42725a8)
  Previous write of size 4 at 0x000010673208 by thread T13:
    #0 SkPathStroker::conicStroke(SkConic const&, SkQuadConstruct*) third_party/skia/src/core/SkStroke.cpp:1180:5 (browser_tests+0x5727f41)
    #1 SkPathStroker::conicTo(SkPoint const&, SkPoint const&, float) third_party/skia/src/core/SkStroke.cpp:713:18 (browser_tests+0x5727c31)
    #2 SkStroke::strokePath(SkPath const&, SkPath*) const third_party/skia/src/core/SkStroke.cpp:1416:25 (browser_tests+0x572ac5a)
    #3 SkStrokeRec::applyToPath(SkPath*, SkPath const&) const third_party/skia/src/core/SkStrokeRec.cpp:121:13 (browser_tests+0x541db56)
    #4 SkPaint::getFillPath(SkPath const&, SkPath*, SkRect const*, float) const third_party/skia/src/core/SkPaint.cpp:1969:14 (browser_tests+0x53b783c)
    #5 SkDraw::drawPath(SkPath const&, SkPaint const&, SkMatrix const*, bool, bool, SkBlitter*) const third_party/skia/src/core/SkDraw.cpp:1099:25 (browser_tests+0x536b85e)
    #6 drawPath third_party/skia/src/core/SkDraw.h:56:15 (browser_tests+0x56a00a1)
    #7 SkBitmapDevice::drawPath(SkPath const&, SkPaint const&, SkMatrix const*, bool) third_party/skia/src/core/SkBitmapDevice.cpp:222 (browser_tests+0x56a00a1)
    #8 SkCanvas::onDrawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkCanvas.cpp:2158:23 (browser_tests+0x533dbcc)
    #9 SkCanvas::drawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkCanvas.cpp:1758:11 (browser_tests+0x5339db1)
    #10 SkColorSpaceXformCanvas::onDrawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkColorSpaceXformCanvas.cpp:69:18 (browser_tests+0x5899513)
    #11 SkCanvas::drawPath(SkPath const&, SkPaint const&) third_party/skia/src/core/SkCanvas.cpp:1758:11 (browser_tests+0x5339db1)
    #12 RasterWithFlags cc/paint/paint_op_buffer.cc:1200:11 (browser_tests+0x604401a)
    #13 cc::DrawPathOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.h:662 (browser_tests+0x604401a)
    #14 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #15 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #16 Playback cc/paint/paint_op_buffer.cc:1600:3 (browser_tests+0x6040d0e)
    #17 cc::DrawRecordOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.cc:1217 (browser_tests+0x6040d0e)
    #18 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #19 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #20 Playback cc/paint/paint_op_buffer.cc:1600:3 (browser_tests+0x6040d0e)
    #21 cc::DrawRecordOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.cc:1217 (browser_tests+0x6040d0e)
    #22 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #23 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #24 Playback cc/paint/paint_op_buffer.cc:1600:3 (browser_tests+0x6040d0e)
    #25 cc::DrawRecordOp::Raster(cc::PaintOp const*, SkCanvas*, SkMatrix const&) cc/paint/paint_op_buffer.cc:1217 (browser_tests+0x6040d0e)
    #26 Raster cc/paint/paint_op_buffer.cc:1329:3 (browser_tests+0x6042a79)
    #27 cc::PaintOpBuffer::Playback(SkCanvas*, SkPicture::AbortCallback*, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const*) const cc/paint/paint_op_buffer.cc:1682 (browser_tests+0x6042a79)
    #28 cc::DisplayItemList::Raster(SkCanvas*, SkPicture::AbortCallback*) const cc/paint/display_item_list.cc:57:20 (browser_tests+0xb900441)
    #29 RasterCommon cc/raster/raster_source.cc:195:20 (browser_tests+0x63d6f25)
    #30 cc::RasterSource::PlaybackToCanvas(SkCanvas*, gfx::ColorSpace const&, cc::RasterSource::PlaybackSettings const&) const cc/raster/raster_source.cc:97 (browser_tests+0x63d6f25)
    #31 cc::RasterSource::PlaybackToCanvas(SkCanvas*, gfx::ColorSpace const&, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, cc::RasterSource::PlaybackSettings const&) const cc/raster/raster_source.cc:61:3 (browser_tests+0x63d6d01)
    #32 cc::RasterBufferProvider::PlaybackToMemory(void*, viz::ResourceFormat, gfx::Size const&, unsigned long, cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, gfx::ColorSpace const&, cc::RasterSource::PlaybackSettings const&) cc/raster/raster_buffer_provider.cc:91:22 (browser_tests+0x63d5de6)
    #33 cc::OneCopyRasterBufferProvider::PlaybackToStagingBuffer(cc::StagingBuffer*, cc::Resource const*, cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, gfx::ColorSpace const&, cc::RasterSource::PlaybackSettings const&, unsigned long, unsigned long) cc/raster/one_copy_raster_buffer_provider.cc:312:5 (browser_tests+0x63d4f24)
    #34 cc::OneCopyRasterBufferProvider::PlaybackAndCopyOnWorkerThread(cc::Resource const*, cc::ResourceProvider::ScopedWriteLockGL*, gpu::SyncToken const&, cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, gfx::AxisTransform2d const&, cc::RasterSource::PlaybackSettings const&, unsigned long, unsigned long) cc/raster/one_copy_raster_buffer_provider.cc:248:3 (browser_tests+0x63d3b4b)
    #35 cc::OneCopyRasterBufferProvider::RasterBufferImpl::Playback(cc::RasterSource const*, gfx::Rect const&, gfx::Rect const&, unsigned long, gfx::AxisTransform2d const&, cc::RasterSource::PlaybackSettings const&) cc/raster/one_copy_raster_buffer_provider.cc:63:12 (browser_tests+0x63d38cb)
    #36 cc::(anonymous namespace)::RasterTaskImpl::RunOnWorkerThread() cc/tiles/tile_manager.cc:130:21 (browser_tests+0x64430f4)
    #37 content::CategorizedWorkerPool::RunTaskInCategoryWithLockAcquired(cc::TaskCategory) content/renderer/categorized_worker_pool.cc:362:28 (browser_tests+0xaf113fb)
    #38 RunTaskWithLockAcquired content/renderer/categorized_worker_pool.cc:341:7 (browser_tests+0xaf0fbe3)
    #39 content::CategorizedWorkerPool::Run(std::__1::vector<cc::TaskCategory, std::__1::allocator<cc::TaskCategory> > const&, base::ConditionVariable*) content/renderer/categorized_worker_pool.cc:233 (browser_tests+0xaf0fbe3)
    #40 content::(anonymous namespace)::CategorizedWorkerPoolThread::Run() content/renderer/categorized_worker_pool.cc:35:32 (browser_tests+0xaf1185e)
    #41 base::SimpleThread::ThreadMain() base/threading/simple_thread.cc:68:3 (browser_tests+0x427caf6)
    #42 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (browser_tests+0x42725a8)
  Location is global 'gMaxRecursion' of size 16 at 0x000010673200 (browser_tests+0x000010673208)
  Thread T12 'CompositorTileW' (tid=27592, running) created by main thread at:
    #0 pthread_create <null> (browser_tests+0x58da23)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (browser_tests+0x4271ee6)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (browser_tests+0x4271da5)
    #3 base::SimpleThread::Start() base/threading/simple_thread.cc:34:13 (browser_tests+0x427c7ba)
    #4 content::CategorizedWorkerPool::Start(int) content/renderer/categorized_worker_pool.cc:145:13 (browser_tests+0xaf0ee09)
    #5 content::RenderThreadImpl::Init(scoped_refptr<base::SingleThreadTaskRunner> const&) content/renderer/render_thread_impl.cc:900:29 (browser_tests+0xad57e9b)
    #6 content::RenderThreadImpl::RenderThreadImpl(std::__1::unique_ptr<base::MessageLoop, std::__1::default_delete<base::MessageLoop> >, std::__1::unique_ptr<blink::scheduler::RendererScheduler, std::__1::default_delete<blink::scheduler::RendererScheduler> >) content/renderer/render_thread_impl.cc:640:3 (browser_tests+0xad55846)
    #7 content::RenderThreadImpl::Create(std::__1::unique_ptr<base::MessageLoop, std::__1::default_delete<base::MessageLoop> >, std::__1::unique_ptr<blink::scheduler::RendererScheduler, std::__1::default_delete<blink::scheduler::RendererScheduler> >) content/renderer/render_thread_impl.cc:564:14 (browser_tests+0xad55166)
    #8 content::RendererMain(content::MainFunctionParams const&) content/renderer/renderer_main.cc:207:5 (browser_tests+0xada7e72)
    #9 content::RunZygote(content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:337:14 (browser_tests+0x4177149)
    #10 content::RunNamedProcessTypeMain(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:416:12 (browser_tests+0x4177ddd)
    #11 content::ContentMainRunnerImpl::Run() content/app/content_main_runner.cc:687:12 (browser_tests+0x4178af7)
    #12 content::ContentServiceManagerMainDelegate::RunEmbedderProcess() content/app/content_service_manager_main_delegate.cc:51:32 (browser_tests+0x41765af)
    #13 service_manager::Main(service_manager::MainParams const&) services/service_manager/embedder/main.cc:469:29 (browser_tests+0x6fc686a)
    #14 content::ContentMain(content::ContentMainParams const&) content/app/content_main.cc:19:10 (browser_tests+0x4176d4b)
    #15 content::LaunchTests(content::TestLauncherDelegate*, unsigned long, int, char**) content/public/test/test_launcher.cc:526:12 (browser_tests+0x4d32297)
    #16 LaunchChromeTests(unsigned long, content::TestLauncherDelegate*, int, char**) chrome/test/base/chrome_test_launcher.cc:149:10 (browser_tests+0x419fac0)
    #17 main chrome/test/base/browser_tests_main.cc:21:10 (browser_tests+0x419f3fa)
  Thread T13 'CompositorTileW' (tid=27593, running) created by main thread at:
    #0 pthread_create <null> (browser_tests+0x58da23)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (browser_tests+0x4271ee6)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (browser_tests+0x4271da5)
    #3 base::SimpleThread::Start() base/threading/simple_thread.cc:34:13 (browser_tests+0x427c7ba)
    #4 content::CategorizedWorkerPool::Start(int) content/renderer/categorized_worker_pool.cc:145:13 (browser_tests+0xaf0ee09)
    #5 content::RenderThreadImpl::Init(scoped_refptr<base::SingleThreadTaskRunner> const&) content/renderer/render_thread_impl.cc:900:29 (browser_tests+0xad57e9b)
    #6 content::RenderThreadImpl::RenderThreadImpl(std::__1::unique_ptr<base::MessageLoop, std::__1::default_delete<base::MessageLoop> >, std::__1::unique_ptr<blink::scheduler::RendererScheduler, std::__1::default_delete<blink::scheduler::RendererScheduler> >) content/renderer/render_thread_impl.cc:640:3 (browser_tests+0xad55846)
    #7 content::RenderThreadImpl::Create(std::__1::unique_ptr<base::MessageLoop, std::__1::default_delete<base::MessageLoop> >, std::__1::unique_ptr<blink::scheduler::RendererScheduler, std::__1::default_delete<blink::scheduler::RendererScheduler> >) content/renderer/render_thread_impl.cc:564:14 (browser_tests+0xad55166)
    #8 content::RendererMain(content::MainFunctionParams const&) content/renderer/renderer_main.cc:207:5 (browser_tests+0xada7e72)
    #9 content::RunZygote(content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:337:14 (browser_tests+0x4177149)
    #10 content::RunNamedProcessTypeMain(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:416:12 (browser_tests+0x4177ddd)
    #11 content::ContentMainRunnerImpl::Run() content/app/content_main_runner.cc:687:12 (browser_tests+0x4178af7)
    #12 content::ContentServiceManagerMainDelegate::RunEmbedderProcess() content/app/content_service_manager_main_delegate.cc:51:32 (browser_tests+0x41765af)
    #13 service_manager::Main(service_manager::MainParams const&) services/service_manager/embedder/main.cc:469:29 (browser_tests+0x6fc686a)
    #14 content::ContentMain(content::ContentMainParams const&) content/app/content_main.cc:19:10 (browser_tests+0x4176d4b)
    #15 content::LaunchTests(content::TestLauncherDelegate*, unsigned long, int, char**) content/public/test/test_launcher.cc:526:12 (browser_tests+0x4d32297)
    #16 LaunchChromeTests(unsigned long, content::TestLauncherDelegate*, int, char**) chrome/test/base/chrome_test_launcher.cc:149:10 (browser_tests+0x419fac0)
    #17 main chrome/test/base/browser_tests_main.cc:21:10 (browser_tests+0x419f3fa)
SUMMARY: ThreadSanitizer: data race third_party/skia/src/core/SkStroke.cpp:1180:5 in SkPathStroker::conicStroke(SkConic const&, SkQuadConstruct*)
 

Comment 1 by danakj@chromium.org, Jul 26 2017

Cc: reve...@chromium.org boliu@chromium.org ericrk@chromium.org
Owner: vmp...@chromium.org
=> cc/ owners for raster stuff + webview

Comment 2 by vmp...@chromium.org, Jul 27 2017

Cc: senorblanco@chromium.org enne@chromium.org khushals...@chromium.org
Owner: reed@google.com
It seems to be hitting debug only code that accesses a global variable. Since the raster here is multithreaded, this is a race (it is indeed likely to execute the exact same path module clips on skcanvas just from a different thread). 

I think the raster for these ops should still remain multithreaded, since there don't seem to be races outside of the debug code.

It's unclear to me why we haven't hit this before though. That code has been there since 2015, but maybe we're now using the op where before we weren't?

-> reed@ for triage.

Comment 3 by gab@chromium.org, Jul 27 2017

Re. why we haven't hit this before: we have never enabled browser_tests on TSAN bots and I'm desperately trying to do so right now churning through all the existing issues :)

Comment 4 by vmp...@chromium.org, Jul 27 2017

Ah that makes sense, I forgot this was browser_tests instead of chrome in debug mode :P

Comment 5 by vmp...@chromium.org, Jul 27 2017

Or that this was tsan. I forget things. Anyway, the point is that I think this is technically not an issue in things like release builds, but probably should still be addressed.

Comment 6 by gab@chromium.org, Jul 27 2017

Yes should be addressed, read this if you're not convinced :) : https://software.intel.com/en-us/blogs/2013/01/06/benign-data-races-what-could-possibly-go-wrong

Comment 7 by gab@chromium.org, Jul 31 2017

Can this be addressed ASAP (or add a temporary suppression in tsan_suppressions.cc)? This is blocking enabling browser_tests on TSAN bots as it triggers on a large set of tests.

Comment 8 by bsalo...@google.com, Jul 31 2017

Cc: caryclark@chromium.org
Owner: caryclark@google.com
Status: Started (was: Assigned)
Fix in flight at skia-review.googlesource.com/c/28780
Project Member

Comment 11 by bugdroid1@chromium.org, Jul 31 2017

The following revision refers to this bug:
  https://skia.googlesource.com/skia/+/d9b6773052951b86b20f4ff078920089d888a67c

commit d9b6773052951b86b20f4ff078920089d888a67c
Author: Cary Clark <caryclark@skia.org>
Date: Mon Jul 31 17:21:52 2017

disable single threaded debugging code

Stroking has some debug code that is examined
by StrokerTest.cpp; this test is not thread-safe.

Chrome detects this in TSAN, so disable the
test code in SkStroker.cpp the same way it
is disabled in StrokerTest.cpp

R=bsalomon@google.com
Bug:  749315 
Change-Id: I6e424648b4d28509789e3e4123112e0fc95e34ed
Reviewed-on: https://skia-review.googlesource.com/28780
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Cary Clark <caryclark@skia.org>

[modify] https://crrev.com/d9b6773052951b86b20f4ff078920089d888a67c/src/core/SkStroke.cpp
[modify] https://crrev.com/d9b6773052951b86b20f4ff078920089d888a67c/src/core/SkStrokerPriv.h

Components: -Blink>Compositing Internals>Compositing

Comment 14 by gab@chromium.org, Aug 7 2017

Calling this fixed as it no longer blocks issue 368525 (or did you want to keep it open for you tracking?)

Comment 15 by gab@chromium.org, Aug 7 2017

Status: Fixed (was: Started)

Sign in to add a comment