Contents
Profiling of DBUS Port of EDS vis-a-vis CORBA BONOBO based EDS
Addressbook used
Local Addressbook with 9981 contact.
These contacts were in the form of a vcf file, so imported the file into evolution. The DBUS based version imported the file successfully and was significantly faster in importing the file. But it is not reporting the right number of contacts in evolution (it shows around 3200 contacts instead of 9981 contacts although it has imported all the contacts). There are around 900 contacts with names starting with 'a' which it displays correctly when searches for in evolution.
The DBUS based version sometimes stops responding (hangs) printing the following repeatedly on the terminal
dbus_g_proxy_cancel_call: assertion `pending != NULL' failed
This is arising because of the g_return_if_fail (pending != NULL) in the file dbus_gproxy.c
It is trying to cancel a pending call which is not there in DBusGProxy->pending_calls list. Might be happening due to some bug in DBUS code or wrongly calling dbus_g_proxy_cancel_call somewhere from eds code.
Test 1
The following statements were run 10 times in a loop
query = e_book_query_any_field_contains ("")
e_book_get_book_view (book, query, NULL, 0, &view, &error
DBUS
real 0m16.927s
user 0m11.809s
sys 0m0.168s
CORBA
real 1m11.952s
user 0m33.792s
sys 0m0.191s
For detailed timing reports on this test download the following files and open them with sysprof.http://sysprofwww.daimi.au.dk/~sandmann/sysprof/
Test 2
The following statements were run 10 times in a loop
query = e_book_query_field_exists (E_CONTACT_FULL_NAME)
e_book_get_contacts (book, query, &contacts, &error)
DBUS
real 2m16.289s
user 1m44.399s
sys 0m0.432s
CORBA
real 1m9.436s
user 0m20.536s
sys 0m0.345s
For this test dbus looks like taking too much time executing but some sysprof analysis tells that almost all the time is spent in glib, time spent in contacting the backend over dbus and getting the contacts is actually very less. I didn't explored the problem any deeper but appears that there is some problem with e_book_get_contacts code.
For detailed timing reports on this test download the following files and open them with sysprof.
Calendar
In personal calendar i.e. with uri "$HOME/.evolution/calendar/local/system/calendar.ics" a number of calendar items were randomly generated with and without alarms over a span of three months. The generation was done with help of srand () and rand () from stdlib.
Test with e_cal_view_start
The function e_cal_view_start is chosen as it involves a lot of data transfer from eds. The values given here indicate the amount of time spent in the function e_cal_view_start (). The table here indicates the number of calendar items for which the test was performed. The values are averaged over each query iterated 100 times.
Number of Calendar Items DBUS BONOBO 100 1.040 0.321 120 1.046 0.324 140 1.071 0.357
With the current code written for eds-dbus, bonobo seems faster for calendar.
I should say I am rather surprised here and would like to dig a bit deeper - Evolution/User:Harish