Bug 82382

Summary: webkit_unit_tests crashing on chromium lion in CCLayerTreeHostTestCompositeAndReadbackWhileInvisible
Product: WebKit Reporter: Dirk Pranke <dpranke>
Component: Tools / TestsAssignee: James Robinson <jamesr>
Status: RESOLVED FIXED    
Severity: Normal CC: cc-bugs, danakj, enne, mmocny, nduca, shawnsingh, webkit.review.bot
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch none

Dirk Pranke
Reported 2012-03-27 14:44:01 PDT
on my machine (but not on the bot): src $ out/Debug/webkit_unit_tests --gtest_filter=CCLayerTreeHostTestCompositeAndReadbackWhileInvisible.\* Note: Google Test filter = CCLayerTreeHostTestCompositeAndReadbackWhileInvisible.* [==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from CCLayerTreeHostTestCompositeAndReadbackWhileInvisible [ RUN ] CCLayerTreeHostTestCompositeAndReadbackWhileInvisible.runMultiThread ASSERTION FAILED: !HashTranslator::equal(KeyTraits::emptyValue(), key) ../../third_party/WebKit/Source/WTF/wtf/HashTable.h(480) : void WTF::HashTable<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >::checkKey(const unsigned int &) 1 0x1cc229 void WTF::HashTable<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >::checkKey<WTF::IdentityHashTranslator<WTF::IntHash<unsigned int> >, unsigned int>(unsigned int const&) 2 0x1cbd26 std::pair<WTF::HashTableIterator<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >, bool> WTF::HashTable<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >::add<WTF::IdentityHashTranslator<WTF::IntHash<unsigned int> >, unsigned int, unsigned int>(unsigned int const&, unsigned int const&) 3 0x1cbb5c WTF::HashTable<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >::add(unsigned int const&) 4 0x1cb557 WTF::HashSet<unsigned int, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int> >::add(unsigned int const&) 5 0x19633e (anonymous namespace)::CompositorFakeWebGraphicsContext3DWithTextureTracking::bindTexture(unsigned int, unsigned int) 6 0x19c25a7 WebCore::GraphicsContext3DPrivate::bindTexture(unsigned int, unsigned int) 7 0x19c9f75 WebCore::GraphicsContext3D::bindTexture(unsigned int, unsigned int) 8 0x2731afd WebCore::LayerRendererChromium::getFramebufferPixels(void*, WebCore::IntRect const&) 9 0x27c8383 WebCore::CCLayerTreeHostImpl::readback(void*, WebCore::IntRect const&) 10 0x27f7fab WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal(bool) 11 0x27f83dc WebCore::CCThreadProxy::scheduledActionDrawAndSwapForced() 12 0x27f841c non-virtual thunk to WebCore::CCThreadProxy::scheduledActionDrawAndSwapForced() 13 0x27e36ee WebCore::CCScheduler::processScheduledActions() 14 0x27e3931 WebCore::CCScheduler::setNeedsForcedRedraw() 15 0x27f1eee WebCore::CCThreadProxy::requestReadbackOnImplThread(WebCore::CCThreadProxy::ReadbackRequest*) 16 0x27ff409 WebCore::CCThreadTask1<WebCore::CCThreadProxy, WebCore::CCThreadProxy::ReadbackRequest*, WebCore::CCThreadProxy::ReadbackRequest*>::performTask() 17 0x19948b6 WebKit::CCThreadTaskAdapter::run() 18 0x212f8f4 base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>::Run(WebKit::WebThread::Task*) 19 0x212f7f3 base::internal::InvokeHelper<false, void, base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>, void ()(WebKit::WebThread::Task*)>::MakeItSo(base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>, WebKit::WebThread::Task*) 20 0x212f72e base::internal::Invoker<1, base::internal::BindState<base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>, void ()(WebKit::WebThread::Task*), void ()(base::internal::OwnedWrapper<WebKit::WebThread::Task>)>, void ()(WebKit::WebThread::Task*)>::Run(base::internal::BindStateBase*) 21 0x1b36e4b base::Callback<void ()()>::Run() const 22 0x1ba14be MessageLoop::RunTask(base::PendingTask const&) 23 0x1ba1861 MessageLoop::DeferOrRunPendingTask(base::PendingTask const&) 24 0x1ba1a98 MessageLoop::DoWork() 25 0x1bb24ac base::MessagePumpDefault::Run(base::MessagePump::Delegate*) 26 0x1ba0e23 MessageLoop::RunInternal() 27 0x1ba013b MessageLoop::RunHandler() 28 0x1ba0080 MessageLoop::Run() 29 0x1c46052 base::Thread::Run(MessageLoop*) 30 0x1c461ff base::Thread::ThreadMain() 31 0x1c44436 base::(anonymous namespace)::ThreadFunc(void*) [18799:-1323257856:0327/144309:593964388165610:ERROR:process_util_posix.cc(142)] Received signal 11 0 webkit_unit_tests 0x01b41fef base::debug::StackTrace::StackTrace() + 63 1 webkit_unit_tests 0x01b41f8b base::debug::StackTrace::StackTrace() + 43 2 webkit_unit_tests 0x01bf0967 base::(anonymous namespace)::StackDumpSignalHandler(int, __siginfo*, __darwin_ucontext*) + 295 3 libsystem_c.dylib 0x958b259b _sigtramp + 43 4 ??? 0xffffffff 0x0 + 4294967295 5 webkit_unit_tests 0x001cbd26 std::pair<WTF::HashTableIterator<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >, bool> WTF::HashTable<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >::add<WTF::IdentityHashTranslator<WTF::IntHash<unsigned int> >, unsigned int, unsigned int>(unsigned int const&, unsigned int const&) + 86 6 webkit_unit_tests 0x001cbb5c WTF::HashTable<unsigned int, unsigned int, WTF::IdentityExtractor, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int>, WTF::HashTraits<unsigned int> >::add(unsigned int const&) + 92 7 webkit_unit_tests 0x001cb557 WTF::HashSet<unsigned int, WTF::IntHash<unsigned int>, WTF::HashTraits<unsigned int> >::add(unsigned int const&) + 71 8 webkit_unit_tests 0x0019633e (anonymous namespace)::CompositorFakeWebGraphicsContext3DWithTextureTracking::bindTexture(unsigned int, unsigned int) + 78 9 webkit_unit_tests 0x019c25a7 WebCore::GraphicsContext3DPrivate::bindTexture(unsigned int, unsigned int) + 103 10 webkit_unit_tests 0x019c9f75 WebCore::GraphicsContext3D::bindTexture(unsigned int, unsigned int) + 85 11 webkit_unit_tests 0x02731afd WebCore::LayerRendererChromium::getFramebufferPixels(void*, WebCore::IntRect const&) + 1245 12 webkit_unit_tests 0x027c8383 WebCore::CCLayerTreeHostImpl::readback(void*, WebCore::IntRect const&) + 195 13 webkit_unit_tests 0x027f7fab WebCore::CCThreadProxy::scheduledActionDrawAndSwapInternal(bool) + 1099 14 webkit_unit_tests 0x027f83dc WebCore::CCThreadProxy::scheduledActionDrawAndSwapForced() + 60 15 webkit_unit_tests 0x027f841c non-virtual thunk to WebCore::CCThreadProxy::scheduledActionDrawAndSwapForced() + 28 16 webkit_unit_tests 0x027e36ee WebCore::CCScheduler::processScheduledActions() + 414 17 webkit_unit_tests 0x027e3931 WebCore::CCScheduler::setNeedsForcedRedraw() + 65 18 webkit_unit_tests 0x027f1eee WebCore::CCThreadProxy::requestReadbackOnImplThread(WebCore::CCThreadProxy::ReadbackRequest*) + 334 19 webkit_unit_tests 0x027ff409 WebCore::CCThreadTask1<WebCore::CCThreadProxy, WebCore::CCThreadProxy::ReadbackRequest*, WebCore::CCThreadProxy::ReadbackRequest*>::performTask() + 153 20 webkit_unit_tests 0x019948b6 WebKit::CCThreadTaskAdapter::run() + 70 21 webkit_unit_tests 0x0212f8f4 base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>::Run(WebKit::WebThread::Task*) + 132 22 webkit_unit_tests 0x0212f7f3 base::internal::InvokeHelper<false, void, base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>, void ()(WebKit::WebThread::Task*)>::MakeItSo(base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>, WebKit::WebThread::Task*) + 67 23 webkit_unit_tests 0x0212f72e base::internal::Invoker<1, base::internal::BindState<base::internal::RunnableAdapter<void (WebKit::WebThread::Task::*)()>, void ()(WebKit::WebThread::Task*), void ()(base::internal::OwnedWrapper<WebKit::WebThread::Task>)>, void ()(WebKit::WebThread::Task*)>::Run(base::internal::BindStateBase*) + 110 24 webkit_unit_tests 0x01b36e4b base::Callback<void ()()>::Run() const + 75 25 webkit_unit_tests 0x01ba14be MessageLoop::RunTask(base::PendingTask const&) + 846 26 webkit_unit_tests 0x01ba1861 MessageLoop::DeferOrRunPendingTask(base::PendingTask const&) + 97 27 webkit_unit_tests 0x01ba1a98 MessageLoop::DoWork() + 312 28 webkit_unit_tests 0x01bb24ac base::MessagePumpDefault::Run(base::MessagePump::Delegate*) + 300 29 webkit_unit_tests 0x01ba0e23 MessageLoop::RunInternal() + 291 30 webkit_unit_tests 0x01ba013b MessageLoop::RunHandler() + 43 31 webkit_unit_tests 0x01ba0080 MessageLoop::Run() + 64 32 webkit_unit_tests 0x01c46052 base::Thread::Run(MessageLoop*) + 50 33 webkit_unit_tests 0x01c461ff base::Thread::ThreadMain() + 271 34 webkit_unit_tests 0x01c44436 base::(anonymous namespace)::ThreadFunc(void*) + 134 35 libsystem_c.dylib 0x9585aed9 _pthread_start + 335 36 libsystem_c.dylib 0x9585e6de thread_start + 34 ax: bbadbeef, bx: fc499b63, cx: fc499b63, dx: fc499b63 di: 440d229, si: 440d166, bp: b120a158, sp: b120a110, ss: 23, flags: 10282 ip: 1cc233, cs: 1b, ds: 23, es: 23, fs: 23, gs: f src $
Attachments
Patch (1.80 KB, patch)
2012-03-27 18:05 PDT, James Robinson
no flags
James Robinson
Comment 1 2012-03-27 16:42:50 PDT
Interesting!
Nat Duca
Comment 2 2012-03-27 16:51:22 PDT
Its almost as if the code to create a graphics context from a mock started creating real WGC3D contexts instead of just using the passed in mocks.... See this http://build.chromium.org/p/tryserver.chromium/builders/mac_rel/builds/13411/steps/webkit_unit_tests/logs/stdio
James Robinson
Comment 3 2012-03-27 17:34:22 PDT
This test is failing an ASSERT() in HashSet<WebGLId> since the default traits for numeric types disallow 0 as a value and we're calling bindTexture(0) which is: virtual void bindTexture(WGC3Denum /* target */, WebGLId texture) { m_usedTextures.add(texture); } I'm not sure why this doesn't fail on the bots. Simple fix is to use different traits for this set, or use a different data type (performance here isn't critical).
James Robinson
Comment 4 2012-03-27 18:05:24 PDT
James Robinson
Comment 5 2012-03-27 18:07:55 PDT
This happens only on lion because of the following workaround code in LayerRendererChromium: http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp#L1140 The postamble to this clean does this: 1180 if (doWorkaround) { 1181 // Clean up. 1182 GLC(context, context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, 0)); 1183 GLC(context, context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0)); 1184 GLC(context, context->deleteFramebuffer(temporaryFBO)); 1185 GLC(context, context->deleteTexture(temporaryTexture)); 1186 } the bindTexture(..., 0) call is what's dying. This appears to just be cleanup code to make sure the FBO and texture released, but binding texture ID 0 is a pretty valid thing to do.
Adrienne Walker
Comment 6 2012-03-27 18:15:39 PDT
Comment on attachment 134187 [details] Patch R=me. Thanks for fixing these Lion tests.
WebKit Review Bot
Comment 7 2012-03-27 19:29:36 PDT
Comment on attachment 134187 [details] Patch Clearing flags on attachment: 134187 Committed r112356: <http://trac.webkit.org/changeset/112356>
WebKit Review Bot
Comment 8 2012-03-27 19:29:40 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.