This morning I wrote a small script to profile full_redraw method. The 
script is:
import cProfile
p1 = p.nodeAfterTree()
g.es('starting')
pr = cProfile.Profile()
pr.enable()
c.selectPosition(p1)
for i in range(20):
    c.executeMinibufferCommand('demote')
    c.executeMinibufferCommand('promote')
pr.disable()
g.es('finished')
pr.dump_stats('/tmp/stat.txt')
pr.print_stats('time')

The node with this script is at the end of my version of LeoPyRef.leo, 
followed by three nodes at the root level a, b and c. After fully expanding 
the outline, select this node and execute script. In the console you'll get 
stats list sorted by time spent in each function.

I was very surprised to see a lot of functions I didn't expect to see like 
g.toUnicodeFileEncoding, os.path.normpath, g.os_path_finalize. ...
g.toUnicodeFileEncoding was called 2504395 times during the exection of my 
script?! os.path.normpath was called 1128328 times.

Paths certainly haven't changed during the script execution. There might be 
10 (20 at most) different icons in the outline, so I would expect to see at 
most 10-20 calls to these functions. How is it possible that there were so 
many calls. It turned out that declutter_node was computing icon list for 
each node. And for each node on each redraw it was calculating all paths to 
themes folder, icons folder, checking every time for the existence of file 
icons.

The solution was quite simple, one dict to hold the cached declutter data 
and the execution time for the script above went from 31.307 s down to 
17.116 s.

New code is already in the devel branch. Revision f71fc76c45.

Once again it turned out that the first step in any optimization effort 
must be profiling the code. I would never guess that the full_redraw used 
to make so many calls in to the path handling and file system functions.

Vitalije

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/9bf28eb8-de1d-47f5-8b7b-3915b6e1b6fb%40googlegroups.com.

Reply via email to