More Info

Revision 750765

(Back to digest)
 

Optimization in Development Tools

David Nolden committed changes in /trunk/KDE/kdevplatform:

Profiling has shown that DocumentRange was one of the biggest remaining memory-hogs, especially on 64-bit systems KTextEditor::Range takes much more memory than the actual content because the data is split across multiple separately allocated blocks.

Also, it is inefficient to copy around, and DocumentRanges maintain a hierarchy that isn't needed at all, but also takes a lot of memory.

Solution:
Create efficient self-contained classes SimpleRange and SimpleCursor, that are used for each duchain object. Stop using DocumentRange in DocumentRangeObject. Instead, now each duchain object has one permanently stored SimpleRange, and a SmartRange pointer that is only nonzero when the document is loaded and has a smart-range.

The SimpleRange and the SmartRange are synchronized on access.

Result:
- No more thread-unsafe range access in DocumentRangeObject::textRange()
- Significantly less memory consumption
- More efficient serializability because the SimpleRange is embedded in the shared d-pointer.

By the way the duchain initializations were cleaned up a little, and some yet unnoticed bugs there fixed.

File Changes

Added 2 files
/trunk/KDE/kdevplatform/editor
 
/simplecursor.h
 
/simplerange.h
Modified 48 files
/trunk/KDE/kdevplatform
 
/editor/CMakeLists.txt
 
/editor/documentrangeobject.cpp
 
/editor/documentrangeobject.h
 
/editor/documentrangeobject_p.h
 
/editor/editorintegrator.cpp
 
/editor/editorintegrator.h
 
/editor/editorintegratorstatic.cpp
 
/editor/editorintegratorstatic.h
 
/language/CMakeLists.txt
 
/language/duchain/classfunctiondeclaration.cpp
 
/language/duchain/classfunctiondeclaration.h
 
/language/duchain/classmemberdeclaration.cpp
 
/language/duchain/classmemberdeclaration.h
 
/language/duchain/classmemberdeclaration_p.h
 
/language/duchain/contextowner_p.h
 
/language/duchain/declaration.cpp
 
/language/duchain/declaration.h
 
/language/duchain/declaration_p.h
 
/language/duchain/definition.cpp
 
/language/duchain/definition.h
 
/language/duchain/definition_p.h
 
/language/duchain/duchain.cpp
 
/language/duchain/duchainbase.cpp
 
/language/duchain/duchainbase.h
 
/language/duchain/duchainbase_p.h
 
/language/duchain/ducontext.cpp
 
/language/duchain/ducontext.h
 
/language/duchain/ducontext_p.h
 
/language/duchain/dumpdotgraph.cpp
 
/language/duchain/forwarddeclaration.cpp
 
/language/duchain/forwarddeclaration.h
 
/language/duchain/functiondeclaration.cpp
 
/language/duchain/functiondeclaration.h
 
/language/duchain/identifiedtype.cpp
 
/language/duchain/namespacealiasdeclaration.cpp
 
/language/duchain/namespacealiasdeclaration.h
 
/language/duchain/smartconverter.cpp
 
/language/duchain/topducontext.cpp
 
/language/duchain/topducontext.h
 
/language/duchain/use.cpp
 
/language/duchain/use.h
 
/language/duchain/use_p.h
 
/plugins/classbrowser/classtree.cpp
 
/plugins/duchainviewer/duchainmodel.cpp
 
/plugins/duchainviewer/duchainmodel.h
 
/plugins/duchainviewer/duchaintree.cpp
 
/plugins/quickopen/projectitemquickopen.cpp
 
/plugins/usehighlight/usehighlight.cpp
50 files changed in total