diff options
author | Artem Dergachev <adergachev@apple.com> | 2024-01-10 18:45:27 -0800 |
---|---|---|
committer | Artem Dergachev <adergachev@apple.com> | 2024-01-11 15:16:10 -0800 |
commit | 721dd3bc2f159f58542653b56ae272f1504875f8 (patch) | |
tree | 1dda1eee4ce55a3e51c05a96a795df806bd963db /llvm/lib/Support/StringRef.cpp | |
parent | 5f59b720a8fc41d65964b88c64f803af86ed3cc8 (diff) | |
download | llvm-721dd3bc2f159f58542653b56ae272f1504875f8.zip llvm-721dd3bc2f159f58542653b56ae272f1504875f8.tar.gz llvm-721dd3bc2f159f58542653b56ae272f1504875f8.tar.bz2 |
[analyzer] NFC: Don't regenerate duplicate HTML reports.
This is a performance optimization for HTML diagnostics output mode.
Currently they're incredibly inefficient:
* The HTMLRewriter is re-run from scratch on every file on every report.
Each such re-run involves re-lexing the entire file and producing
a syntax-highlighted webpage of the entire file, with text behind macros
duplicated as pop-up macro expansion tooltips. Then, warning and note
bubbles are injected into the page. Only the bubble part is different
across reports; everything else can theoretically be cached.
* Additionally, if duplicate reports are emitted (with the same issue hash),
HTMLRewriter will be re-run even though the output file is going to be
discarded due to filename collision. This is mostly an issue for
path-insensitive bug reports because path-sensitive bug reports
are already deduplicated by the BugReporter as part of searching
for the shortest bug path. But on some translation units almost 80% of
bug reports are dry-run here.
We only get away with all this because there are usually very few reports
emitted per file. But if loud checkers are enabled, such as `webkit.*`,
this may explode in complexity and even cause the compiler to run over
the 32-bit SourceLocation addressing limit. (We're re-lexing everything
each time, remember?)
This patch hotfixes the *second* problem. Adds a FIXME for the first problem,
which will require more yak shaving to solve.
rdar://120801986
Diffstat (limited to 'llvm/lib/Support/StringRef.cpp')
0 files changed, 0 insertions, 0 deletions