usaxena95 updated this revision to Diff 295837.
usaxena95 marked an inline comment as done.
usaxena95 added a comment.

Addressed comments.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88590/new/

https://reviews.llvm.org/D88590

Files:
  clang-tools-extra/clangd/benchmarks/CMakeLists.txt
  clang-tools-extra/clangd/benchmarks/CompletionModel/CMakeLists.txt
  
clang-tools-extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark.cpp

Index: clang-tools-extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark.cpp
===================================================================
--- /dev/null
+++ clang-tools-extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark.cpp
@@ -0,0 +1,85 @@
+//===--- DecisionForestBenchmark.cpp ------------*- C++ -*-===//
+//
+// Benchmark for code completion ranking latency.
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+// Usage:
+//    ninja DecisionForestBenchmark && \
+//    tools/clang/tools/extra/clangd/benchmarks/CompletionModel/DecisionForestBenchmark
+//===----------------------------------------------------------------------===//
+
+#include "CompletionModel.h"
+#include "benchmark/benchmark.h"
+#include "llvm/ADT/StringRef.h"
+
+#include <random>
+
+namespace clang {
+namespace clangd {
+namespace {
+std::vector<Example> generateRandomDataset(int NumExamples) {
+  auto FlipCoin = [&](float Probability) {
+    return rand() % 1000 <= Probability * 1000;
+  };
+  auto RandInt = [&](int Max) { return rand() % Max; };
+  auto RandFloat = [&](float Max = 1.0) {
+    return rand() % 1000 / 1000.0 * Max;
+  };
+
+  std::vector<Example> Examples;
+  Examples.reserve(NumExamples);
+  for (int I = 0; I < NumExamples; ++I) {
+    Example E;
+    E.setIsDeprecated(FlipCoin(0.1));           // Boolean.
+    E.setIsReservedName(FlipCoin(0.1));         // Boolean.
+    E.setIsImplementationDetail(FlipCoin(0.3)); // Boolean.
+    E.setNumReferences(RandInt(10000));         // Can be large integer.
+    E.setSymbolCategory(RandInt(10));           // 10 Symbol Category.
+
+    E.setIsNameInContext(FlipCoin(0.5)); // Boolean.
+    E.setIsForbidden(FlipCoin(0.1));     // Boolean.
+    E.setIsInBaseClass(FlipCoin(0.3));   // Boolean.
+    E.setFileProximityDistance(
+        FlipCoin(0.1) ? 999999 // Sometimes file distance is not available.
+                      : RandInt(20));
+    E.setSemaFileProximityScore(RandFloat(1)); // Float in range [0,1].
+    E.setSymbolScopeDistance(
+        FlipCoin(0.1) ? 999999 // Sometimes scope distance is not available.
+                      : RandInt(20));
+    E.setSemaSaysInScope(FlipCoin(0.5));      // Boolean.
+    E.setScope(RandInt(4));                   // 4 Scopes.
+    E.setContextKind(RandInt(32));            // 32 Context kinds.
+    E.setIsInstanceMember(FlipCoin(0.5));     // Boolean.
+    E.setHadContextType(FlipCoin(0.6));       // Boolean.
+    E.setHadSymbolType(FlipCoin(0.6));        // Boolean.
+    E.setTypeMatchesPreferred(FlipCoin(0.5)); // Boolean.
+    E.setFilterLength(RandInt(15));
+    Examples.push_back(E);
+  }
+  return Examples;
+}
+
+void runDecisionForestPrediciton(const std::vector<Example> Examples) {
+  for (const Example &E : Examples)
+    Evaluate(E);
+}
+
+static void decisionForestPredict(benchmark::State &State) {
+  srand(0);
+  for (auto _ : State) {
+    State.PauseTiming();
+    const std::vector<Example> Examples = generateRandomDataset(1000000);
+    State.ResumeTiming();
+    runDecisionForestPrediciton(Examples);
+  }
+}
+BENCHMARK(decisionForestPredict);
+
+} // namespace
+} // namespace clangd
+} // namespace clang
+
+BENCHMARK_MAIN();
Index: clang-tools-extra/clangd/benchmarks/CompletionModel/CMakeLists.txt
===================================================================
--- /dev/null
+++ clang-tools-extra/clangd/benchmarks/CompletionModel/CMakeLists.txt
@@ -0,0 +1,9 @@
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../)
+
+add_benchmark(DecisionForestBenchmark DecisionForestBenchmark.cpp)
+
+target_link_libraries(DecisionForestBenchmark
+  PRIVATE
+  clangDaemon
+  LLVMSupport
+  )
Index: clang-tools-extra/clangd/benchmarks/CMakeLists.txt
===================================================================
--- clang-tools-extra/clangd/benchmarks/CMakeLists.txt
+++ clang-tools-extra/clangd/benchmarks/CMakeLists.txt
@@ -1,5 +1,7 @@
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../)
 
+add_subdirectory(CompletionModel)
+
 add_benchmark(IndexBenchmark IndexBenchmark.cpp)
 
 target_link_libraries(IndexBenchmark
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to