Bug 82382 - webkit_unit_tests crashing on chromium lion in CCLayerTreeHostTestCompositeAndReadbackWhileInvisible
Summary: webkit_unit_tests crashing on chromium lion in CCLayerTreeHostTestCompositeAn...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Tools / Tests (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: James Robinson
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-03-27 14:44 PDT by Dirk Pranke
Modified: 2012-03-27 19:29 PDT (History)
7 users (show)

See Also:


Attachments
Patch (1.80 KB, patch)
2012-03-27 18:05 PDT, James Robinson
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Dirk Pranke 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 $
Comment 1 James Robinson 2012-03-27 16:42:50 PDT
Interesting!
Comment 2 Nat Duca 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
Comment 3 James Robinson 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).
Comment 4 James Robinson 2012-03-27 18:05:24 PDT
Created attachment 134187 [details]
Patch
Comment 5 James Robinson 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.
Comment 6 Adrienne Walker 2012-03-27 18:15:39 PDT
Comment on attachment 134187 [details]
Patch

R=me.  Thanks for fixing these Lion tests.
Comment 7 WebKit Review Bot 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>
Comment 8 WebKit Review Bot 2012-03-27 19:29:40 PDT
All reviewed patches have been landed.  Closing bug.