[PATCH] D66226: [clangd] Skip function bodies inside processed files while indexing

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 14 09:16:12 PDT 2019


ilya-biryukov created this revision.
ilya-biryukov added reviewers: kadircet, sammccall.
Herald added subscribers: arphaman, jkorous, MaskRay.
Herald added a project: clang.

This significantly improves performance of background indexing.

We do not collect references and declarations inside the processed
files, so this does not affect the final indexing results.

The idea is borrowed from libclang, which has a similar optimization in
its indexing functionality.

Measurements show a nice decrease in indexing time, up to ~40% for
building the whole index. These are not proper benchmarks, so one should
not rely on these results too much.

1. Rebuilding the whole index:
  - Before. Total time: 14m58s. ./bin/clangd -pch-storage=memory < ./clangd.input  23917.67s user 515.86s system 2718% cpu 14:58.68 total
  - After. Total time: 8m40s. ./bin/clangd -pch-storage=memory < ./clangd.input  13627.29s user 288.10s system 2672% cpu 8:40.67 total

2. Rebuilding index after removing shards matching '*clangd*' (case-insensitively):
  - Before. Total time: 30s. ./bin/clangd -pch-storage=memory < ./clangd.input  130.94s user 6.82s system 452% cpu 30.423 total
  - After. Total time: 26s. ./bin/clangd -pch-storage=memory < ./clangd.input  80.51s user 5.40s system 333% cpu 25.777 total


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D66226

Files:
  clang-tools-extra/clangd/index/IndexAction.cpp
  clang-tools-extra/clangd/index/SymbolCollector.cpp
  clang-tools-extra/clangd/index/SymbolCollector.h

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66226.215139.patch
Type: text/x-patch
Size: 4529 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190814/6fefa435/attachment-0001.bin>


More information about the cfe-commits mailing list