Gary:<br><br>I was just starting to reduce my somewhat scattered data to concise notes, when I read your post.  There is a lot of information, and I want to make sure whatever I add actually helps.  The qbzr bundled in the stand-alone 2.2.1 installer for Windows is 0.18.4.  You&#39;ve made improvements since then.  And a lot of what I have done is wander around looking for patterns.  Now that we think we see some patterns, I think the right thing for me to do is repeat the init/add/stat+/commit/stat+ test in these ways:<br>
<br>  1. bzr builtin commands<br>  2. bzr qbzr comands<br>  3. bzr explorer 1.0.1<br><br>under the conditions:<br><br>  A. fixed version of bzr (currently 2.2.1)<br>  B. two versions of qbr: 0.18.4<br>  C. latest from lp:qbzr<br>
<br>and collecting the callgrind profiles for each.<br><br>The bzr builtin test is a one-off, not affected by qbzr.  And there <br>So there are tests 2 and 3 under conditions B and C, which gives four more test runs.<br><br>
I will probably start on this late today.  Any suggestions to improve the data collection are welcome.<br><br>[FYI although I appreciate (and often use!) the ability to show&amp;add unversioned files in qcommit (great feature!) I actually am very careful about who I show.  I have some non-developers using bzr to control mark-up documents.  They don&#39;t have a deep understanding of version control (as if I do!) so I have to give them simple recipes to follow.   So thanks and thanks.]<br>
<br>[I think your comment about collapsing the qbrowse tree for sparse directories is significant.  Whether this helps or hurts may depend on whether the tree is created in the collapsed form or if it is a &quot;tree rewrite/copy&quot; of a proper tree already allocated.  I also notice that the commit and add operations use a lot of memory -- typically 250 to 280 MB.  The language translation and compiler folks deal with this sort of thing, as you probably know, where way to limit peak memory demand is to process the tree in small sub-trees on demand.  For a context-free &quot;grammar&quot; like a recursive directory without symlinks, this may help.  Symlinks have the potential to add context bridging sub-trees, so some care would be needed.  (Sub)Trees are great UI for selecting files for building a flat list, but then maybe the (sub)tree can be discarded.  I suspect Nautilus and Windows Explorer do something like this, because browsing the same directories is almost instantaneous.]<br>
<br>Thanks for the clue on kcachegrind.  I get the idea, so I just need to learn the particulars.  This helps.<br><br>Obviously I think these are important usability issues, and I appreciate the interest here.  But I also want to emphasize that qbzr and bzr-explorer are already excellent tools.<br>
<br>Thanks<br>~M<br><br><br><br><div class="gmail_quote">On Wed, Jun 30, 2010 at 1:09 AM, Gary van der Merwe <span dir="ltr">&lt;<a href="mailto:garyvdm@gmail.com">garyvdm@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>Sorry I did not mention this before (I actually forgot about it.) In<br>
qbzr trunk revisions 1220-1224, I made some performance improvements<br>
to qadd and qcommit. You mentioned elsewhere that you are using<br>
0.18.4, in which case, you wont have these improvements.<br>
<br>
Note that you can do the add and commit steps from the qcommit dialog.<br>
Tick &quot;Show non-versioned files&quot; and then either tick &quot;Select /<br>
deselect all&quot; or manually choose file to add. Any files that are not<br>
versioned will be added before committing.<br>
<br>
I&#39;m glad to see that qbrowse is not much slower than bzr status. I&#39;m<br>
sad to see that qcommit and qadd are much slower. The tree widgets in<br>
qcommit and qadd share alot of code with qbrowse. Thing that happen in<br>
qcommit and qadd that don&#39;t happen in qbrowse:<br>
<br>
1.) Folders are merged together with their sub item if they contain a<br>
small number items. For example in this screenshot:<br>
<a href="http://qbzr.googlegroups.com/web/gtk_qadd.png" target="_blank">http://qbzr.googlegroups.com/web/gtk_qadd.png</a> we don&#39;t show:<br>
docs<br>
    gettext_usage (copy).txt<br>
but rather:<br>
docs/gettext_usage (copy).txt<br>
<br>
2.) All folders are loaded at startup. (In qbrowse only the root is<br>
loaded at startup, and sub folders are loaded when you expand them.)<br>
<br>
Currently, when you press Ok in qadd/qcommit, it runs a bzr<br>
subprocess. (You can see the command that it ran.) Because of this,<br>
there can&#39;t be any sharing of data. I&#39;m currently working on<br>
refactoring qbzr so that we have 2 threads, one for the gui, and one<br>
for bzrlib. Once this is done, I plan on removing the subprocess, i.e.<br>
the command will be run in the same process. This will mean the caches<br>
will be shared, and hopefully this will improve the performance of<br>
pressing Ok.<br>
<br>
<br>
On Wed, Jun 30, 2010 at 1:23 AM, Maritza Mendez &lt;<a href="mailto:martitzam@gmail.com">martitzam@gmail.com</a>&gt; wrote:<br>
&gt; I&#39;m afraid I don&#39;t read lsprof output -- although it looks plain enough --lsprof-file test.callgrind<br>
<div class="im">&gt; but I can run it as you suggest.<br>
<br>
</div>.callgrind files typically open with kcachegrind [1]. You can also do<br>
--lsprof-file test.txt which will output a csv file which you can open<br>
with OO Calc. But if you are going to send it to us, please send a<br>
.callgrind<br>
<br>
[1] <a href="http://kcachegrind.sourceforge.net/" target="_blank">http://kcachegrind.sourceforge.net/</a><br>
<div class="im"><br>
&gt; When using lsprof, should I capture the<br>
&gt; whole session in a single callgrind file, or would it be more appropriate to<br>
&gt; launch and profile a separate session for each action (qadd, qbrowse,<br>
&gt; qcommit, qbrowse, et cetera)?<br>
<br>
</div>As qcommit, qadd, etc are launched as a subprocess from bzr explorer,<br>
these would not be included in the output of bzr explorer<br>
--lsprof-file test.callgrind.<br>
<br>
I would like to take a look at the output of:<br>
<br>
bzr explorer --lsprof-file explorer.callgrind<br>
bzr qcommit --lsprof-file qcommit.callgrind<br>
bzr qbrowse --lsprof-file qbrowse.callgrind<br>
</blockquote></div><br>