[clangd] Don't create as much garbage while building Dex index.
authorSam McCall <sam.mccall@gmail.com>
Thu, 14 May 2020 00:43:27 +0000 (02:43 +0200)
committerSam McCall <sam.mccall@gmail.com>
Thu, 14 May 2020 11:35:44 +0000 (13:35 +0200)
commit735ab46cb4148c92d636c912832a32509252b579
treea7d7b5badaea6fc38e09c947801d0192196a6bac
parentdac6e9ca2190b7ece67ab7b62ea113d3ade5067a
[clangd] Don't create as much garbage while building Dex index.

Summary:
The Token objects are relatively expensive and we were spending a lot of
CPU creating them for each trigram emitted. Instead, use a tiny trigram
structure until we're ready to finalize the index.

This improves the new BuildDex benchmark by 20%. This code is hot and on
the critical path in clangd: it runs after a new preamble is built.

Reviewers: kbobyrev

Subscribers: ilya-biryukov, MaskRay, jkorous, mgrang, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D79918
clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp
clang-tools-extra/clangd/index/dex/Dex.cpp
clang-tools-extra/clangd/index/dex/Trigram.cpp
clang-tools-extra/clangd/index/dex/Trigram.h
clang-tools-extra/clangd/test/Inputs/requests.json
clang-tools-extra/clangd/unittests/DexTests.cpp