Racy access to raster/skia global in browser_tests |
||||||
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*)
,
Jul 27 2017
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.
,
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 :)
,
Jul 27 2017
Ah that makes sense, I forgot this was browser_tests instead of chrome in debug mode :P
,
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.
,
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
,
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.
,
Jul 31 2017
,
Jul 31 2017
,
Jul 31 2017
,
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
,
Jul 31 2017
The following revision refers to this bug: https://skia.googlesource.com/skia/+/66e393c68982ce6f097b6e0f7dd1eb656f25f944 commit 66e393c68982ce6f097b6e0f7dd1eb656f25f944 Author: Cary Clark <caryclark@skia.org> Date: Mon Jul 31 17:48:38 2017 longer is better R=robertphillips@google.com Bug: 749315 Change-Id: Id8091a077771553b313aaf3aff20b7b37765cc53 Reviewed-on: https://skia-review.googlesource.com/28787 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Cary Clark <caryclark@skia.org> [modify] https://crrev.com/66e393c68982ce6f097b6e0f7dd1eb656f25f944/tests/StrokerTest.cpp [modify] https://crrev.com/66e393c68982ce6f097b6e0f7dd1eb656f25f944/src/core/SkStroke.cpp [modify] https://crrev.com/66e393c68982ce6f097b6e0f7dd1eb656f25f944/src/core/SkStrokerPriv.h
,
Aug 1 2017
,
Aug 7 2017
Calling this fixed as it no longer blocks issue 368525 (or did you want to keep it open for you tracking?)
,
Aug 7 2017
|
||||||
►
Sign in to add a comment |
||||||
Comment 1 by danakj@chromium.org
, Jul 26 2017Owner: vmp...@chromium.org