On Oct 4, 2006, at 2:00 PM, Grant Baillie wrote:


On 4 Oct, 2006, at 10:03, Morgen Sagen wrote:

I'm looking into improving the performance of going backwards/ forwards a week in the calendar view (bug 5651), so first I got some profiling numbers under the following circumstances (on my dual-1.8MHz G5):

Imported the test 3000 event calendar into Chandler and quit. Restarted Chandler and jumped forward a week, which takes 2.0 seconds. 0.75 seconds is spent generating occurrences; of that 0.75, 0.54 seconds is taken up by inserting keys into indexes.

Restarted Chandler and repeated jumping between the same weeks as before. This takes 1.0 seconds. In this case, the occurrence items are already generated, and instead we're loading them from the repository. 0.3 seconds is spent loading the items.

Repeating the jump again takes 0.6 seconds, which is further proof that item loading is taking between 0.3 and 0.4 seconds in this example.

My thought was that if we could generate occurrences and/or load relevant items from the next and previous weeks in the background (Andi suggested OnIdle), that could save some time when the user clicks the week navigation arrows. Does anyone see any pitfalls in this approach? Is it possible to load items into the main repository view from another thread? Also, I would need some guidance in determining exactly which items need to be pre-loaded.

Along these lines, BTW, it seems that there are gains to be had by removing the loading of items from the mEnd() and mStart() functions in Calendar.py. I'm testing changes that do this, and these do improve things a lot (0.59s to 0.22s for PerfLargeDataJumpWeek in the measurement I did).

I did try replacing those mStart and mEnd calls like this:

   testVal = getattr(EventStamp(view[key]), startAttrName)

with calls like this:

testVal = view.findValue(key, getattr(EventStamp, startAttrName).name)

to avoid loading, but overall a similar number of items was being loaded anyway (32 items loaded versus 34, if I recall). Also, there are some cases where findValue( ) doesn't work -- when an attribute is Calculated, the item needs to be loaded and getattr used.

~morgen
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

Reply via email to