D9772: Cache ProblemPointers per translation unit

Milian Wolff noreply at phabricator.kde.org
Tue Jan 9 18:56:50 UTC 2018


mwolff created this revision.
Restricted Application added a subscriber: kdevelop-devel.
mwolff requested review of this revision.

REVISION SUMMARY
  For visibility purposes, all 'inclue file not found' errors are
  associated with all files in a TU, since these usually completely
  break the interpretation of a file. But in some situations, this
  triggers a severe performance degradation:
  
  When the TU has a deep include stack depth and a file is not found
  somewhere at the bottom of the stack, then it will have one child
  diagnostic for every "included from ..." file higher up in the stack.
  Now if we would repeatedly build and intern the KDevelop::Problem
  representation for these diagnostics, for every file in the TU, we
  sometimes ended up spending *minutes* to create all the problems
  in ParseSession::problemsForFile!
  
  To workaround this situation, cache the ProblemPointer in the
  ParseSessionData for a given translation unit. This way, we will
  only convert a given diagnostic and its child diagnostics once per TU
  instead of once per file contained in a TU.
  
  In my case this brings down the time spent in problemsForFile for a
  single TU from ~7min (sic!) down to ~12s. While the latter is still
  a lot, this is already much more bearable.
  
  BUG: 386720

REPOSITORY
  R32 KDevelop

BRANCH
  master

REVISION DETAIL
  https://phabricator.kde.org/D9772

AFFECTED FILES
  plugins/clang/duchain/parsesession.cpp
  plugins/clang/duchain/parsesession.h

To: mwolff
Cc: kdevelop-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20180109/9faac429/attachment.html>


More information about the KDevelop-devel mailing list