On Friday 28. November 2014 12.20.29 Chris Adams wrote:
> Hi,
> 
> No worries.  Interestingly, when I ran the benchmark against 5.3, I found
> that it hangs after performing several tests.
> 
> Before each test, the benchmark will clear the QML type registrations to
> ensure that the cached compiled type data isn't re-used during the run,
> tainting the results.  It appears that if the call to
> qmlClearTypeRegistrations() is commented out, the benchmark runs all the
> way through (but obviously, with tainted / useless results).  With that
> call left in, it hangs, with CPU spinning at 100%, while trying to load a
> component:
> 
> (gdb) t a a bt
> 
> Thread 290 (Thread 0x7fffee1ba700 (LWP 14829)):
> #0  0x00007fffec1f7c56 in QQuickValueTypeProvider::create
> (this=0x7fffec7b3980 <getValueTypeProvider()::valueTypeProvider>,
> type=1037, v=
>     @0x7fffee1b9080: 0x0) at util/qquickglobal.cpp:404
> #1  0x00007ffff795813f in QQmlValueTypeProvider::createValueType
> (this=0x7fffec7b3980 <getValueTypeProvider()::valueTypeProvider>, type=1037)
> at qml/qqmlglobal.cpp:67
> #2  0x00007ffff7914d41 in (anonymous
> namespace)::QQmlValueTypeFactoryImpl::createValueType (
>     this=0x7ffff7dd7340 <(anonymous
> namespace)::Q_QGS_factoryImpl::innerFunction()::holder>, t=1037) at
> qml/qqmlvaluetype.cpp:121
> #3  0x00007ffff7914e21 in (anonymous
> namespace)::QQmlValueTypeFactoryImpl::valueType (
>     this=0x7ffff7dd7340 <(anonymous
> namespace)::Q_QGS_factoryImpl::innerFunction()::holder>, idx=1037) at
> qml/qqmlvaluetype.cpp:137
> #4  0x00007ffff7915006 in QQmlValueTypeFactory::valueType (idx=1037) at
> qml/qqmlvaluetype.cpp:169
> #5  0x00007ffff7767d09 in QQmlPropertyValidator::validateObject
> (this=0x7fffee1b9580, objectIndex=0, instantiatingBinding=0x0,
>     populatingValueTypeGroupProperty=false) at
> compiler/qqmltypecompiler.cpp:1912
> #6  0x00007ffff7766c6f in QQmlPropertyValidator::validate
> (this=0x7fffee1b9580) at compiler/qqmltypecompiler.cpp:1730
> #7  0x00007ffff775f676 in QQmlTypeCompiler::compile (this=0x7fffee1b96f0)
> at compiler/qqmltypecompiler.cpp:265
> #8  0x00007ffff7904370 in QQmlTypeData::compile (this=0x7dc4b0) at
> qml/qqmltypeloader.cpp:2341
> #9  0x00007ffff7903081 in QQmlTypeData::done (this=0x7dc4b0) at
> qml/qqmltypeloader.cpp:2164
> #10 0x00007ffff78fc2b0 in QQmlDataBlob::tryDone (this=0x7dc4b0) at
> qml/qqmltypeloader.cpp:615
> #11 0x00007ffff78fdf56 in QQmlDataLoader::setData (this=0x7d5b48,
> blob=0x7dc4b0, d=...) at qml/qqmltypeloader.cpp:1208
> #12 0x00007ffff78fde44 in QQmlDataLoader::setData (this=0x7d5b48,
> blob=0x7dc4b0, file=0x7fffee1b9910) at qml/qqmltypeloader.cpp:1190
> #13 0x00007ffff78fd683 in QQmlDataLoader::loadThread (this=0x7d5b48,
> blob=0x7dc4b0) at qml/qqmltypeloader.cpp:1068
> #14 0x00007ffff78fcb03 in QQmlDataLoaderThread::loadThread (this=0x751b90,
> b=0x7dc4b0) at qml/qqmltypeloader.cpp:816
> #15 0x00007ffff7908121 in void
> QQmlThread::callMethodInThread<QQmlDataBlob*, QQmlDataBlob*,
> QQmlDataLoaderThread>(void (QQmlDataLoaderThread::*)(QQmlDataBlob*),
> QQmlDataBlob* const&)::I::call(QQmlThread*) (this=0x7dc7b0, thread=0x751b90)
> at
> /home/chriadam/Code/qt/qt5/qtbase/include/QtQml/5.3.2/QtQml/private/../../..
> /../../../qtdeclarative/src/qml/qml/ftw/qqmlthread_p.h:160 #16
> 0x00007ffff7973eee in QQmlThreadPrivate::threadEvent (this=0x729cd0) at
> qml/ftw/qqmlthread.cpp:198
> #17 0x00007ffff7973c76 in QQmlThreadPrivate::event (this=0x729cd0,
> e=0x7dc7e0) at qml/ftw/qqmlthread.cpp:136
> #18 0x00007ffff6619936 in QCoreApplicationPrivate::notify_helper
> (this=0x60be80, receiver=0x729cd0, event=0x7dc7e0) at
> kernel/qcoreapplication.cpp:1052
> #19 0x00007ffff6619618 in QCoreApplication::notify (this=0x7fffffffdd10,
> receiver=0x729cd0, event=0x7dc7e0) at kernel/qcoreapplication.cpp:997
> #20 0x00007ffff6c7a83c in QGuiApplication::notify (this=0x7fffffffdd10,
> object=0x729cd0, event=0x7dc7e0) at kernel/qguiapplication.cpp:1477
> #21 0x00007ffff6619522 in QCoreApplication::notifyInternal
> (this=0x7fffffffdd10, receiver=0x729cd0, event=0x7dc7e0) at
> kernel/qcoreapplication.cpp:935
> #22 0x00007ffff661d0af in QCoreApplication::sendEvent (receiver=0x729cd0,
> event=0x7dc7e0)
>     at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:237
> #23 0x00007ffff661a7ed in QCoreApplicationPrivate::sendPostedEvents
> (receiver=0x0, event_type=0, data=0x6ce920) at
> kernel/qcoreapplication.cpp:1539
> #24 0x00007ffff668bf85 in QEventDispatcherUNIX::processEvents
> (this=0x7fffe0183690, flags=...) at kernel/qeventdispatcher_unix.cpp:587
> #25 0x00007ffff66162c2 in QEventLoop::processEvents (this=0x7fffee1b9dd0,
> flags=...) at kernel/qeventloop.cpp:136
> #26 0x00007ffff6616583 in QEventLoop::exec (this=0x7fffee1b9dd0, flags=...)
> at kernel/qeventloop.cpp:212
> #27 0x00007ffff63a46ce in QThread::exec (this=0x729cd0) at
> thread/qthread.cpp:511
> #28 0x00007ffff7973ce7 in QQmlThreadPrivate::run (this=0x729cd0) at
> qml/ftw/qqmlthread.cpp:149
> #29 0x00007ffff63ab9c9 in QThreadPrivate::start (arg=0x729cd0) at
> thread/qthread_unix.cpp:345
> ---Type <return> to continue, or q <return> to quit---
> #30 0x00007ffff54aa182 in start_thread (arg=0x7fffee1ba700) at
> pthread_create.c:312
> #31 0x00007ffff5b1530d in clone () at
> ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
> 
> Thread 2 (Thread 0x7fffef01f700 (LWP 14532)):
> #0  0x00007ffff5b07fbd in poll () at ../sysdeps/unix/syscall-template.S:81
> #1  0x00007ffff16d6b72 in poll (__timeout=-1, __nfds=1,
> __fds=0x7fffef01ecc0) at /usr/include/x86_64-linux-gnu/bits/poll2.h:46
> #2  _xcb_conn_wait (c=c@entry=0x658740, cond=cond@entry=0x658780,
> vector=vector@entry=0x0, count=count@entry=0x0) at ../../src/xcb_conn.c:447
> #3  0x00007ffff16d864f in xcb_wait_for_event (c=0x658740) at
> ../../src/xcb_in.c:622
> #4  0x00007ffff0cb5a79 in QXcbEventReader::run (this=0x6663a0) at
> qxcbconnection.cpp:1043
> #5  0x00007ffff63ab9c9 in QThreadPrivate::start (arg=0x6663a0) at
> thread/qthread_unix.cpp:345
> #6  0x00007ffff54aa182 in start_thread (arg=0x7fffef01f700) at
> pthread_create.c:312
> #7  0x00007ffff5b1530d in clone () at
> ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
> 
> Thread 1 (Thread 0x7ffff7fca7c0 (LWP 14524)):
> #0  pthread_cond_wait@@GLIBC_2.3.2 () at
> ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
> #1  0x00007ffff63ad096 in QWaitConditionPrivate::wait (this=0x6b6d00,
> time=18446744073709551615) at thread/qwaitcondition_unix.cpp:136
> #2  0x00007ffff63ace69 in QWaitCondition::wait (this=0x729d48,
> mutex=0x729d40, time=18446744073709551615) at
> thread/qwaitcondition_unix.cpp:208
> #3  0x00007ffff79747ba in QQmlThreadPrivate::wait (this=0x729cd0) at
> qml/ftw/qqmlthread.cpp:64
> #4  0x00007ffff7974409 in QQmlThread::internalCallMethodInThread
> (this=0x751b90, message=0x7dc7b0) at qml/ftw/qqmlthread.cpp:319
> #5  0x00007ffff790817c in QQmlThread::callMethodInThread<QQmlDataBlob*,
> QQmlDataBlob*, QQmlDataLoaderThread> (this=0x751b90, Member=
>     (void (QQmlDataLoaderThread::*)(QQmlDataLoaderThread * const,
> QQmlDataBlob *)) 0x7ffff78fcadc
> <QQmlDataLoaderThread::loadThread(QQmlDataBlob*)>,
>     arg=@0x7fffffffce00: 0x7dc4b0)
>     at
> /home/chriadam/Code/qt/qt5/qtbase/include/QtQml/5.3.2/QtQml/private/../../..
> /../../../qtdeclarative/src/qml/qml/ftw/qqmlthread_p.h:163 #6 
> 0x00007ffff78fc7ab in QQmlDataLoaderThread::load (this=0x751b90,
> b=0x7dc4b0) at qml/qqmltypeloader.cpp:761
> #7  0x00007ffff78fcebb in QQmlDataLoader::load (this=0x7d5b48,
> blob=0x7dc4b0, mode=QQmlDataLoader::PreferSynchronous) at
> qml/qqmltypeloader.cpp:936
> #8  0x00007ffff78ffe95 in QQmlTypeLoader::getType (this=0x7d5b48, url=...,
> mode=QQmlDataLoader::PreferSynchronous) at qml/qqmltypeloader.cpp:1606
> #9  0x00007ffff78dedb0 in QQmlComponentPrivate::loadUrl (this=0x7cb9b0,
> newUrl=..., mode=QQmlComponent::PreferSynchronous) at
> qml/qqmlcomponent.cpp:691
> #10 0x00007ffff78deaba in QQmlComponent::loadUrl (this=0x7fffffffd0a0,
> url=...) at qml/qqmlcomponent.cpp:648
> #11 0x00000000004040e0 in tst_librarymetrics_performance::compilation() ()
> #12 0x00007ffff66256c1 in QMetaMethod::invoke (this=0x7fffffffd3b0,
> object=0x7fffffffdd20, connectionType=Qt::DirectConnection,
> returnValue=...,
>     val0=..., val1=..., val2=..., val3=..., val4=..., val5=..., val6=...,
> val7=..., val8=..., val9=...) at kernel/qmetaobject.cpp:2169
> #13 0x00007ffff6624b99 in QMetaObject::invokeMethod (obj=0x7fffffffdd20,
> member=0x7a3ba0 "compilation", type=Qt::DirectConnection, ret=...,
> val0=...,
>     val1=..., val2=..., val3=..., val4=..., val5=..., val6=..., val7=...,
> val8=..., val9=...) at kernel/qmetaobject.cpp:1464
> #14 0x00007ffff73d6c21 in QMetaObject::invokeMethod (obj=0x7fffffffdd20,
> member=0x7a3ba0 "compilation", type=Qt::DirectConnection, val0=...,
> val1=...,
>     val2=..., val3=..., val4=..., val5=..., val6=..., val7=..., val8=...,
> val9=...) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs.h:399
> #15 0x00007ffff73d26d4 in QTest::qInvokeTestMethodDataEntry (slot=0x7a3ba0
> "compilation") at qtestcase.cpp:1890
> #16 0x00007ffff73d2f64 in QTest::qInvokeTestMethod (slotName=0x7a4d48
> "compilation()", data=0x0) at qtestcase.cpp:2015
> #17 0x00007ffff73d3a81 in QTest::qInvokeTestMethods
> (testObject=0x7fffffffdd20) at qtestcase.cpp:2242
> #18 0x00007ffff73d4047 in QTest::qExec (testObject=0x7fffffffdd20, argc=1,
> argv=0x7fffffffde38) at qtestcase.cpp:2475
> #19 0x00000000004025c4 in main ()
> 
> It appears that the QQuickValueTypeProvider instances are continuously
> recreated (spinning at 100% and locking the incubator thread, which the
> main thread is waiting on).  Lars or Simon, are you able to guess what
> might cause this issue?  The implementation of qmlClearTypeRegistrations
> seems fairly straightforward, but my memory of the complexities of value
> type providers is hazy.

Something looks fishy there :)

The backtrace makes sense, but it shouldn't repeatedly end up in there. The 
last line number in question is a return statement for me. What is it in your 
source tree?

Can you try to step and see where the loop header is?

Simon
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to