summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/Quality.cpp
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2018-07-25 11:26:35 +0000
committerEric Liu <ioeric@google.com>2018-07-25 11:26:35 +0000
commit84bd5db209687b7f0ef33fc58fa92ca9647351aa (patch)
tree621361c3a0b7fe0e5f0aba70d7a2dba0b3a4a94f /clang-tools-extra/clangd/Quality.cpp
parenta596ea584275be88782e3e7d45c8aceb9ad751dc (diff)
downloadbcm5719-llvm-84bd5db209687b7f0ef33fc58fa92ca9647351aa.tar.gz
bcm5719-llvm-84bd5db209687b7f0ef33fc58fa92ca9647351aa.zip
[clangd] Use a sigmoid style function for #usages boost in symbol quality.
Summary: This has a shape to similar logarithm function but grows much slower for large #usages. Metrics: https://reviews.llvm.org/P8096 Reviewers: ilya-biryukov Reviewed By: ilya-biryukov Subscribers: MaskRay, jkorous, arphaman, cfe-commits, sammccall Differential Revision: https://reviews.llvm.org/D49780 llvm-svn: 337907
Diffstat (limited to 'clang-tools-extra/clangd/Quality.cpp')
-rw-r--r--clang-tools-extra/clangd/Quality.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/clang-tools-extra/clangd/Quality.cpp b/clang-tools-extra/clangd/Quality.cpp
index 1b64f9a9a95..afbcdec6232 100644
--- a/clang-tools-extra/clangd/Quality.cpp
+++ b/clang-tools-extra/clangd/Quality.cpp
@@ -190,8 +190,18 @@ float SymbolQualitySignals::evaluate() const {
// This avoids a sharp gradient for tail symbols, and also neatly avoids the
// question of whether 0 references means a bad symbol or missing data.
- if (References >= 10)
- Score *= std::log10(References);
+ if (References >= 10) {
+ // Use a sigmoid style boosting function, which flats out nicely for large
+ // numbers (e.g. 2.58 for 1M refererences).
+ // The following boosting function is equivalent to:
+ // m = 0.06
+ // f = 12.0
+ // boost = f * sigmoid(m * std::log(References)) - 0.5 * f + 0.59
+ // Sample data points: (10, 1.00), (100, 1.41), (1000, 1.82),
+ // (10K, 2.21), (100K, 2.58), (1M, 2.94)
+ float s = std::pow(References, -0.06);
+ Score *= 6.0 * (1 - s) / (1 + s) + 0.59;
+ }
if (Deprecated)
Score *= 0.1f;
OpenPOWER on IntegriCloud