KDevelop/RandomTODO: Difference between revisions

From KDE Community Wiki
No edit summary
No edit summary
Line 2: Line 2:


So far our API and codebase passes shared pointers by value. This should be made const& to optimize the superflous refcounting in such cases. This was also mentioned in one of the talks here: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012 I (milian) will try to find out which one it was if anyone doubts the above statement.
So far our API and codebase passes shared pointers by value. This should be made const& to optimize the superflous refcounting in such cases. This was also mentioned in one of the talks here: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012 I (milian) will try to find out which one it was if anyone doubts the above statement.
= Improve Session-Workflow =
Beautify/redesign the "pick session" dialog ("kdevelop -ps")


= Prevent .kdevduchain leakage =
= Prevent .kdevduchain leakage =
Line 11: Line 7:
Some unit tests, maybe even temporary sessions in general, allocate a .kdevduchain session cache but never clean that up, leading to a huge mess there... It should also be tested whether this can happen if users create temporary sessions for debugging ("kdevelop -d ..."). And of course it must be asserted that the cache gets removed when a session gets removed.
Some unit tests, maybe even temporary sessions in general, allocate a .kdevduchain session cache but never clean that up, leading to a huge mess there... It should also be tested whether this can happen if users create temporary sessions for debugging ("kdevelop -d ..."). And of course it must be asserted that the cache gets removed when a session gets removed.


= Leverage Plasma for Welcome-Screen  =
-> See Ivan's branch
 
Aleix worked on this in his GSOC, someone should pick that up and finish it properly.


= Refactor Project Filtering =
= Refactor Project Filtering =


Centralize filtering of project files, share code between managers. Take generic-manager as basis.
Centralize filtering of project files, share code between managers. Take generic-manager as basis.
= Optimize C++ Preprocessor+Lexer =
Instead of using IndexedString for string interning, use a thread local class which achieves the same without the QMutex overhead. Only convert to IndexedString when using the strings in the DUChain.
= Refactor ParseJob to use a Stream API =
Instead of the monolithic QString/QByteArray in ParseJob::Contents we should have some API that yields the contents on a line-by-line basis. This would be especially good for files that are read from disk. For files that are open in the editor though we'll have to see what to do. Probably copying a QVector<QString> would be good there, since Kate stores the strings also on a line-by-line basis - this could potentially share some memory then.
= Optimize ItemRepositories =
Redo what I did for the IndexedString item repository for the other repository. This includes:
- use fast hash methods (no RunningHash, investigate hashlittle, ...)
- no recursive mutex locking
- no superfluous type conversions (like const char* <-> QString or similar)
= Reduce C++ AST sizes =
Many of the AST nodes are quite large and/or very often instantiated. Especially UnqualifiedNameAST and NameAST are memory hogs. Either use more specialized AST nodes or use unions to reduce the memory size.

Revision as of 04:48, 25 December 2012

Optimize Shared-Pointer Usage

So far our API and codebase passes shared pointers by value. This should be made const& to optimize the superflous refcounting in such cases. This was also mentioned in one of the talks here: http://channel9.msdn.com/Events/GoingNative/GoingNative-2012 I (milian) will try to find out which one it was if anyone doubts the above statement.

Prevent .kdevduchain leakage

Some unit tests, maybe even temporary sessions in general, allocate a .kdevduchain session cache but never clean that up, leading to a huge mess there... It should also be tested whether this can happen if users create temporary sessions for debugging ("kdevelop -d ..."). And of course it must be asserted that the cache gets removed when a session gets removed.

-> See Ivan's branch

Refactor Project Filtering

Centralize filtering of project files, share code between managers. Take generic-manager as basis.

Optimize C++ Preprocessor+Lexer

Instead of using IndexedString for string interning, use a thread local class which achieves the same without the QMutex overhead. Only convert to IndexedString when using the strings in the DUChain.

Refactor ParseJob to use a Stream API

Instead of the monolithic QString/QByteArray in ParseJob::Contents we should have some API that yields the contents on a line-by-line basis. This would be especially good for files that are read from disk. For files that are open in the editor though we'll have to see what to do. Probably copying a QVector<QString> would be good there, since Kate stores the strings also on a line-by-line basis - this could potentially share some memory then.

Optimize ItemRepositories

Redo what I did for the IndexedString item repository for the other repository. This includes:

- use fast hash methods (no RunningHash, investigate hashlittle, ...) - no recursive mutex locking - no superfluous type conversions (like const char* <-> QString or similar)

Reduce C++ AST sizes

Many of the AST nodes are quite large and/or very often instantiated. Especially UnqualifiedNameAST and NameAST are memory hogs. Either use more specialized AST nodes or use unions to reduce the memory size.