Dash startup causes unity8 GUI thread to block for 500ms+
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
unity8 (Ubuntu) |
Fix Released
|
Medium
|
Gerry Boland |
Bug Description
Dash & Unity8 communicate via DBus, so unity8 can tell Dash to switch to a scope when needed. This implemented by a DashCommunicator plugin.
DashCommunicator inherits AbstractDBusSer
QDBusInterface, on creation, introspects the Dash's DBus interface, and this is performed on the GUI thread (see qtbase/
But it's also happening to unity8 on every startup, it's just not noticeable visually as the QML engine is also busy creating objects.
It's easier to see by running in a shell:
stop unity8-dash && start unity8-dash
and watching the spinner. You will see the spinner block for 500ms+ before the Dash appears.
Here is the DBus traffic during this time:
QDBusConnection
QDBusConnection
QDBusConnection
QDBusConnection
<BLOCK>
and here is the backtrace of unity8 during this blockage:
38 ../sysdeps/
(gdb) bt
#0 syscall () at ../sysdeps/
#1 0x00007f4d03a39470 in _q_futex (op=<optimized out>, val=<optimized out>, timeout=<optimized out>, addr=<optimized out>) at thread/
#2 lockInternal_
#3 QBasicMutex:
#4 0x00007f4d03a39548 in lock (this=0xe8f9c8) at thread/qmutex.h:67
#5 lock (timeout=-1, this=0xe8f9b0) at thread/
#6 QMutex::lock (this=this@
#7 0x00007f4d02000d5e in QDBusMutexLocker (m=0xe8fd30, s=0xe8fcf0, a=RealAddTimeou
#8 QDBusDispatchLocker (s=0xe8fcf0, a=RealAddTimeou
#9 QDBusConnection
#10 0x00007f4d03cae9c3 in QObject::event (this=0xe8fcf0, e=<optimized out>) at kernel/
#11 0x00007f4d03c7e7c5 in QCoreApplicatio
#12 0x00007f4d03c7e8fb in QCoreApplicatio
#13 0x00007f4d03c808f3 in sendEvent (event=
#14 QCoreApplicatio
#15 0x00007f4d03c80ef8 in QCoreApplicatio
#16 0x00007f4d03cd68d3 in postEventSource
#17 0x00007f4d01388eed in g_main_
#18 0x00007f4d013891d0 in ?? () from /lib/x86_
#19 0x00007f4d0138927c in g_main_
#20 0x00007f4d03cd6ce7 in QEventDispatche
#21 0x00007f4d03c7c042 in QEventLoop::exec (this=this@
#22 0x00007f4d03c83c8c in QCoreApplicatio
#23 0x00000000004050a5 in ?? ()
#24 0x00007f4d030daec5 in __libc_start_main (main=0x4045f0, argc=1, argv=0x7fff264c
stack_
#25 0x0000000000405bef in _start ()
Related branches
- Michael Zanetti (community): Approve
- PS Jenkins bot (community): Needs Fixing (continuous-integration)
-
Diff: 187 lines (+64/-14)4 files modifiedplugins/Unity/DashCommunicator/dashconnection.cpp (+30/-0)
plugins/Unity/DashCommunicator/dashconnection.h (+4/-1)
src/libunity8-private/abstractdbusservicemonitor.cpp (+21/-8)
src/libunity8-private/abstractdbusservicemonitor.h (+9/-5)
Changed in unity8 (Ubuntu): | |
status: | New → In Progress |
importance: | Undecided → Medium |
assignee: | nobody → Gerry Boland (gerboland) |
This bug was fixed in the package unity8 - 8.02+15. 04.20150113. 1-0ubuntu1
--------------- 04.20150113. 1-0ubuntu1) vivid; urgency=low
unity8 (8.02+15.
[ Andrea Cimitan ]
* support background on horizontal cards with summary (LP: #1393008)
[ Gerry Boland ]
* DashCommunicator: replace QDBusInterface with a non-blocking
simplification which does not introspect the service on creation
(LP: #1403508)
[ Leo Arias ]
* Added an autopilot test for the edges demo.
[ Albert Astals ] destruction of
* Don't show the manage dash pull up arrow on temp scopes (LP:
#1401869)
* Remove hack, newer Qt already support keyClick(char)
* Tests: Add Qt 5.5 removal TODOs
* Make sure we use fPIC when compiling files for the static library
too
* Make sure changing a scope doesn't trigger creation/
delegates until it's finished (LP: #1410122)
[ Michael Zanetti ]
* patch debian/control file before using it to make it work with mk-
build-deps
-- Ubuntu daily release <email address hidden> Tue, 13 Jan 2015 20:58:08 +0000