Hi all,
I have a wide range of CEDET changes to talk about this week to
tempt you to pull down the latest from CVS. Some issues have already
been found and fixed thanks to the mailing list.
EIEIO Performance Changes:
EIEIO has a new method invocation optimization. My Semantic related
performance changes caused the EIEIO method invocation to rise up
dominating the time. A single invocation only takes .0003 seconds,
but it happens 2-3 thousand times per smart-completion, so it can add
up.
I did some research, and over 90% of all methods are primary only
methods. Over half of those only have a single optimization. By
identifying this at load time, optimized versions of the invocation
engine that ignores generic and :BEFORE/:AFTER methods makes the
primary only methods ~50% faster, and single method invocations a
little over 70% faster.
See these commands for more:
M-x eieio-display-method-list RET
M-x eieio-perftest-onemethodcall RET
If you see stacks with "primary-only" in the names, then it may be a
bug in this new system.
SemanticDB performance changes:
I found a bug in the function that calculates the current list of
includes that caused it to recalculate too often. Fixing this
prevents duplicate work, and can shave off a couple seconds in a big
project.
EDE Performance changes:
I think I discussed this once already. EDE's file lookup system
used to hit the disk many times. I added a caching system so a
typical file load will do only 2 or 3 lookups instead of 38 or so.
When doing smart completion and looking up many header files, this is
a huge win.
Overall:
For a system I have at work, a difficult problem used to take 3.5
seconds or so. It is now down around 1.7 seconds. Huzazh!
EDE Changes:
EDE can now use GNU Global for file lookup. Some project times,
notably the ede-cpp-root, needed a lot of fancy hand-written-by-user
code to get everything to work well. Now you can customize the
variable `ede-locate-setup-options' to add either GNU Global, or the
typical unix "locate" command to the list. For new projects it will
pick the best lookup tool and use that. Be sure to keep the 'base'
option at the end of the list.
For good measure, there is ede-find-file on C-c . f. Type in a file
name, and it will find it in your project for you iff you have a
locate system setup.
Linux support:
There is a new ede-linux project type. If you hack on the linux
kernel and have a big custom setup, you can now skip it, as EDE will
automatically detect a Linux kernel and set you up. I've found in my
old 2.4 based kernel a typical completion is calculated in less than a
second. Sweet.
semantic-symref:
By request, there is now a `semantic-symref-symbol' command which
will lookup any old symbol.
Let me know if any troubles arise from these changes.
Thanks
Eric
--
Eric Ludlam: eric@...
Siege: http://www.siege-engine.com Emacs: http://cedet.sourceforge.net
|