[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
kbobyrev updated this revision to Diff 166240. kbobyrev marked 4 inline comments as done. https://reviews.llvm.org/D52047 Files: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp clang-tools-extra/clangd/index/SymbolYAML.cpp clang-tools-extra/clangd/index/dex/Dex.cpp Index: clang-tools-extra/clangd/index/dex/Dex.cpp === --- clang-tools-extra/clangd/index/dex/Dex.cpp +++ clang-tools-extra/clangd/index/dex/Dex.cpp @@ -124,9 +124,6 @@ for (const auto : TempInvertedIndex) InvertedIndex.insert({TokenToPostingList.first, PostingList(move(TokenToPostingList.second))}); - - vlog("Built Dex with estimated memory usage {0} bytes.", - estimateMemoryUsage()); } /// Constructs iterators over tokens extracted from the query and exhausts it @@ -239,7 +236,7 @@ Bytes += LookupTable.getMemorySize(); Bytes += InvertedIndex.getMemorySize(); for (const auto : InvertedIndex) -Bytes += P.second.bytes(); +Bytes += P.first.Data.size() + P.second.bytes(); return Bytes + BackingDataSize; } Index: clang-tools-extra/clangd/index/SymbolYAML.cpp === --- clang-tools-extra/clangd/index/SymbolYAML.cpp +++ clang-tools-extra/clangd/index/SymbolYAML.cpp @@ -9,6 +9,7 @@ #include "SymbolYAML.h" #include "Index.h" +#include "Logger.h" #include "Serialization.h" #include "Trace.h" #include "dex/Dex.h" @@ -228,8 +229,12 @@ if (!Slab) return nullptr; trace::Span Tracer("BuildIndex"); - return UseDex ? dex::Dex::build(std::move(*Slab), URISchemes) -: MemIndex::build(std::move(*Slab), RefSlab()); + auto Index = UseDex ? dex::Dex::build(std::move(*Slab), URISchemes) + : MemIndex::build(std::move(*Slab), RefSlab()); + vlog("Loaded {0} from {1} with estimated memory usage {2}", + UseDex ? "Dex" : "MemIndex", SymbolFilename, + Index->estimateMemoryUsage()); + return Index; } } // namespace clangd Index: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp === --- clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp +++ clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp @@ -66,23 +66,46 @@ return Requests; } +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". +// FIXME(kbobyrev): Should this be separated into the BackingMemorySize +// (underlying SymbolSlab size) and Symbol Index (MemIndex/Dex) overhead? +static void MemSize(benchmark::State ) { + const auto Mem = buildMem(); + for (auto _ : State) +// Divide size of Mem by 1000 so that it will be correctly displayed in the +// benchmark report (possible options for time units are ms, ns and us). +State.SetIterationTime(/*double Seconds=*/Mem->estimateMemoryUsage() / + 1000); + State.counters["Memory Usage (bytes)"] = Mem->estimateMemoryUsage(); +} +BENCHMARK(MemSize)->UseManualTime()->Unit(benchmark::kMillisecond); + +static void DexSize(benchmark::State ) { + const auto Dex = buildDex(); + for (auto _ : State) +State.SetIterationTime(Dex->estimateMemoryUsage() / 1000); + State.counters["Memory Usage (bytes)"] = Dex->estimateMemoryUsage(); +} +BENCHMARK(DexSize)->UseManualTime()->Unit(benchmark::kMillisecond); + static void MemQueries(benchmark::State ) { const auto Mem = buildMem(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Mem->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(MemQueries); +BENCHMARK(MemQueries)->Unit(benchmark::kMillisecond); static void DexQueries(benchmark::State ) { const auto Dex = buildDex(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Dex->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(DexQueries); +BENCHMARK(DexQueries)->Unit(benchmark::kMillisecond); } // namespace } // namespace clangd @@ -108,4 +131,5 @@ argc -= 2; ::benchmark::Initialize(, argv); ::benchmark::RunSpecifiedBenchmarks(); + return 0; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
kbobyrev added inline comments. Comment at: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp:69 +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". ioeric wrote: > The hack might not be obvious for other people who run these benchmarks. Is > it possible to print some extra message along with the result to explain the > hack? Yes, that makes sense. I might try to use [[ https://github.com/google/benchmark#user-defined-counters | User-Defined Counters ]] for that. Comment at: clang-tools-extra/clangd/index/dex/Dex.cpp:239 for (const auto : InvertedIndex) -Bytes += P.second.bytes(); +Bytes += P.first.Data.size() + P.second.bytes() * sizeof(DocID); return Bytes + BackingDataSize; ioeric wrote: > Why do we need `P.second.bytes() * sizeof(DocID)`? Isn't `P.second.bytes()` > already the memory size of the posting list? Yes, the patch is out of sync. Will fix! https://reviews.llvm.org/D52047 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
ioeric added inline comments. Comment at: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp:69 +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". The hack might not be obvious for other people who run these benchmarks. Is it possible to print some extra message along with the result to explain the hack? Comment at: clang-tools-extra/clangd/index/dex/Dex.cpp:239 for (const auto : InvertedIndex) -Bytes += P.second.bytes(); +Bytes += P.first.Data.size() + P.second.bytes() * sizeof(DocID); return Bytes + BackingDataSize; Why do we need `P.second.bytes() * sizeof(DocID)`? Isn't `P.second.bytes()` already the memory size of the posting list? https://reviews.llvm.org/D52047 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
kbobyrev updated this revision to Diff 165962. kbobyrev marked an inline comment as done. kbobyrev added a comment. Rebase on top of master, move logging to symbol index `build()` caller side. https://reviews.llvm.org/D52047 Files: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp clang-tools-extra/clangd/index/SymbolYAML.cpp clang-tools-extra/clangd/index/dex/Dex.cpp Index: clang-tools-extra/clangd/index/dex/Dex.cpp === --- clang-tools-extra/clangd/index/dex/Dex.cpp +++ clang-tools-extra/clangd/index/dex/Dex.cpp @@ -124,9 +124,6 @@ for (const auto : TempInvertedIndex) InvertedIndex.insert({TokenToPostingList.first, PostingList(move(TokenToPostingList.second))}); - - vlog("Built Dex with estimated memory usage {0} bytes.", - estimateMemoryUsage()); } /// Constructs iterators over tokens extracted from the query and exhausts it @@ -239,7 +236,7 @@ Bytes += LookupTable.getMemorySize(); Bytes += InvertedIndex.getMemorySize(); for (const auto : InvertedIndex) -Bytes += P.second.bytes(); +Bytes += P.first.Data.size() + P.second.bytes() * sizeof(DocID); return Bytes + BackingDataSize; } Index: clang-tools-extra/clangd/index/SymbolYAML.cpp === --- clang-tools-extra/clangd/index/SymbolYAML.cpp +++ clang-tools-extra/clangd/index/SymbolYAML.cpp @@ -9,6 +9,7 @@ #include "SymbolYAML.h" #include "Index.h" +#include "Logger.h" #include "Serialization.h" #include "Trace.h" #include "dex/Dex.h" @@ -225,8 +226,12 @@ if (!Slab) return nullptr; trace::Span Tracer("BuildIndex"); - return UseDex ? dex::Dex::build(std::move(*Slab), URISchemes) -: MemIndex::build(std::move(*Slab), RefSlab()); + auto Index = UseDex ? dex::Dex::build(std::move(*Slab), URISchemes) + : MemIndex::build(std::move(*Slab), RefSlab()); + vlog("Loaded {0} from {1} with estimated memory usage {2}", + UseDex ? "Dex" : "MemIndex", SymbolFilename, + Index->estimateMemoryUsage()); + return Index; } } // namespace clangd Index: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp === --- clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp +++ clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp @@ -66,23 +66,44 @@ return Requests; } +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". +// FIXME(kbobyrev): Should this be separated into the BackingMemorySize +// (underlying SymbolSlab size) and Symbol Index (MemIndex/Dex) overhead? +static void MemSize(benchmark::State ) { + const auto Mem = buildMem(); + for (auto _ : State) +// Divide size of Mem by 1000 so that it will be correctly displayed in the +// benchmark report (possible options for time units are ms, ns and us). +State.SetIterationTime(/*double Seconds=*/Mem->estimateMemoryUsage() / + 1000); +} +BENCHMARK(MemSize)->UseManualTime()->Unit(benchmark::kMillisecond); + +static void DexSize(benchmark::State ) { + const auto Dex = buildDex(); + for (auto _ : State) +State.SetIterationTime(Dex->estimateMemoryUsage() / 1000); +} +BENCHMARK(DexSize)->UseManualTime()->Unit(benchmark::kMillisecond); + static void MemQueries(benchmark::State ) { const auto Mem = buildMem(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Mem->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(MemQueries); +BENCHMARK(MemQueries)->Unit(benchmark::kMillisecond); static void DexQueries(benchmark::State ) { const auto Dex = buildDex(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Dex->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(DexQueries); +BENCHMARK(DexQueries)->Unit(benchmark::kMillisecond); } // namespace } // namespace clangd ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
ioeric added a comment. The benchmark change looks fine to me. But I'm not very familiar with the trick, so I'll let Sam (who proposed the idea as you mentioned), stamp the patch. Comment at: clang-tools-extra/clangd/index/dex/Dex.h:75 +URISchemes); +vlog("Built Dex with estimated memory usage {0} bytes.", + Index->estimateMemoryUsage()); It's a bit strange to log this in the constructor. And we only do the logging for one of the constructors. Maybe just have the user log the mem usage when they want? https://reviews.llvm.org/D52047 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
kbobyrev updated this revision to Diff 165440. kbobyrev added a comment. Move `vlog` message to the outer `build(...)` function: otherwise `BackingMemorySize` is not set to the correct value and log reports index overhead (instead of the complete index + slab) size. https://reviews.llvm.org/D52047 Files: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp clang-tools-extra/clangd/index/dex/Dex.cpp clang-tools-extra/clangd/index/dex/Dex.h Index: clang-tools-extra/clangd/index/dex/Dex.h === --- clang-tools-extra/clangd/index/dex/Dex.h +++ clang-tools-extra/clangd/index/dex/Dex.h @@ -21,6 +21,7 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_DEX_DEX_H #include "Iterator.h" +#include "Logger.h" #include "Token.h" #include "Trigram.h" #include "index/Index.h" @@ -53,6 +54,7 @@ this->Symbols.push_back(); buildIndex(); } + // Symbols are owned by BackingData, Index takes ownership. template Dex(Range &, Payload &, size_t BackingDataSize, @@ -68,8 +70,11 @@ build(SymbolSlab Slab, llvm::ArrayRef URISchemes) { // Store Slab size before it is moved. const auto BackingDataSize = Slab.bytes(); -return llvm::make_unique(Slab, std::move(Slab), BackingDataSize, - URISchemes); +auto Index = llvm::make_unique(Slab, std::move(Slab), BackingDataSize, +URISchemes); +vlog("Built Dex with estimated memory usage {0} bytes.", + Index->estimateMemoryUsage()); +return Index; } bool Index: clang-tools-extra/clangd/index/dex/Dex.cpp === --- clang-tools-extra/clangd/index/dex/Dex.cpp +++ clang-tools-extra/clangd/index/dex/Dex.cpp @@ -10,7 +10,6 @@ #include "Dex.h" #include "FileDistance.h" #include "FuzzyMatch.h" -#include "Logger.h" #include "Quality.h" #include "llvm/ADT/StringSet.h" #include @@ -118,9 +117,6 @@ for (const auto : generateSearchTokens(*Sym)) InvertedIndex[Token].push_back(SymbolRank); } - - vlog("Built Dex with estimated memory usage {0} bytes.", - estimateMemoryUsage()); } /// Constructs iterators over tokens extracted from the query and exhausts it @@ -232,8 +228,10 @@ Bytes += SymbolQuality.size() * sizeof(float); Bytes += LookupTable.getMemorySize(); Bytes += InvertedIndex.getMemorySize(); - for (const auto : InvertedIndex) + for (const auto : InvertedIndex) { +Bytes += P.first.Data.size(); Bytes += P.second.size() * sizeof(DocID); + } return Bytes + BackingDataSize; } Index: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp === --- clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp +++ clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp @@ -66,23 +66,44 @@ return Requests; } +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". +// FIXME(kbobyrev): Should this be separated into the BackingMemorySize +// (underlying SymbolSlab size) and Symbol Index (MemIndex/Dex) overhead? +static void MemSize(benchmark::State ) { + const auto Mem = buildMem(); + for (auto _ : State) +// Divide size of Mem by 1000 so that it will be correctly displayed in the +// benchmark report (possible options for time units are ms, ns and us). +State.SetIterationTime(/*double Seconds=*/Mem->estimateMemoryUsage() / + 1000); +} +BENCHMARK(MemSize)->UseManualTime()->Unit(benchmark::kMillisecond); + +static void DexSize(benchmark::State ) { + const auto Dex = buildDex(); + for (auto _ : State) +State.SetIterationTime(Dex->estimateMemoryUsage() / 1000); +} +BENCHMARK(DexSize)->UseManualTime()->Unit(benchmark::kMillisecond); + static void MemQueries(benchmark::State ) { const auto Mem = buildMem(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Mem->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(MemQueries); +BENCHMARK(MemQueries)->Unit(benchmark::kMillisecond); static void DexQueries(benchmark::State ) { const auto Dex = buildDex(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Dex->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(DexQueries); +BENCHMARK(DexQueries)->Unit(benchmark::kMillisecond); } // namespace } // namespace clangd ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
kbobyrev updated this revision to Diff 165437. kbobyrev added a comment. - Start measuring time in ms - Add Tokens' `Data` size for more precise memory usage estimation (accounts for ~1MB of Static Index in LLVM) https://reviews.llvm.org/D52047 Files: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp clang-tools-extra/clangd/index/dex/Dex.cpp Index: clang-tools-extra/clangd/index/dex/Dex.cpp === --- clang-tools-extra/clangd/index/dex/Dex.cpp +++ clang-tools-extra/clangd/index/dex/Dex.cpp @@ -232,8 +232,10 @@ Bytes += SymbolQuality.size() * sizeof(float); Bytes += LookupTable.getMemorySize(); Bytes += InvertedIndex.getMemorySize(); - for (const auto : InvertedIndex) + for (const auto : InvertedIndex) { +Bytes += P.first.Data.size(); Bytes += P.second.size() * sizeof(DocID); + } return Bytes + BackingDataSize; } Index: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp === --- clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp +++ clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp @@ -66,23 +66,44 @@ return Requests; } +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". +// FIXME(kbobyrev): Should this be separated into the BackingMemorySize +// (underlying SymbolSlab size) and Symbol Index (MemIndex/Dex) overhead? +static void MemSize(benchmark::State ) { + const auto Mem = buildMem(); + for (auto _ : State) +// Divide size of Mem by 1000 so that it will be correctly displayed in the +// benchmark report (possible options for time units are ms, ns and us). +State.SetIterationTime(/*double Seconds=*/Mem->estimateMemoryUsage() / + 1000); +} +BENCHMARK(MemSize)->UseManualTime()->Unit(benchmark::kMillisecond); + +static void DexSize(benchmark::State ) { + const auto Dex = buildDex(); + for (auto _ : State) +State.SetIterationTime(Dex->estimateMemoryUsage() / 1000); +} +BENCHMARK(DexSize)->UseManualTime()->Unit(benchmark::kMillisecond); + static void MemQueries(benchmark::State ) { const auto Mem = buildMem(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Mem->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(MemQueries); +BENCHMARK(MemQueries)->Unit(benchmark::kMillisecond); static void DexQueries(benchmark::State ) { const auto Dex = buildDex(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Dex->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(DexQueries); +BENCHMARK(DexQueries)->Unit(benchmark::kMillisecond); } // namespace } // namespace clangd Index: clang-tools-extra/clangd/index/dex/Dex.cpp === --- clang-tools-extra/clangd/index/dex/Dex.cpp +++ clang-tools-extra/clangd/index/dex/Dex.cpp @@ -232,8 +232,10 @@ Bytes += SymbolQuality.size() * sizeof(float); Bytes += LookupTable.getMemorySize(); Bytes += InvertedIndex.getMemorySize(); - for (const auto : InvertedIndex) + for (const auto : InvertedIndex) { +Bytes += P.first.Data.size(); Bytes += P.second.size() * sizeof(DocID); + } return Bytes + BackingDataSize; } Index: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp === --- clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp +++ clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp @@ -66,23 +66,44 @@ return Requests; } +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". +// FIXME(kbobyrev): Should this be separated into the BackingMemorySize +// (underlying SymbolSlab size) and Symbol Index (MemIndex/Dex) overhead? +static void MemSize(benchmark::State ) { + const auto Mem = buildMem(); + for (auto _ : State) +// Divide size of Mem by 1000 so that it will be correctly displayed in the +// benchmark report (possible options for time units are ms, ns and us). +State.SetIterationTime(/*double Seconds=*/Mem->estimateMemoryUsage() / + 1000); +} +BENCHMARK(MemSize)->UseManualTime()->Unit(benchmark::kMillisecond); + +static void DexSize(benchmark::State ) { + const auto Dex = buildDex(); + for (auto _ : State) +State.SetIterationTime(Dex->estimateMemoryUsage() / 1000); +} +BENCHMARK(DexSize)->UseManualTime()->Unit(benchmark::kMillisecond); + static void MemQueries(benchmark::State ) { const auto Mem = buildMem(); const auto Requests = extractQueriesFromLogs(); for (auto _ : State) for (const auto : Requests) Mem->fuzzyFind(Request, [](const Symbol ) {}); } -BENCHMARK(MemQueries); +BENCHMARK(MemQueries)->Unit(benchmark::kMillisecond); static void
[PATCH] D52047: [clangd] Add a "benchmark" for tracking memory
kbobyrev created this revision. kbobyrev added reviewers: ioeric, ilya-biryukov, sammccall. kbobyrev added a project: clang-tools-extra. Herald added subscribers: kadircet, arphaman, jkorous, MaskRay. While this looks like misuse of benchmark library, this can be still when experimenting with index compression techniques as discussed offline. https://reviews.llvm.org/D52047 Files: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp Index: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp === --- clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp +++ clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp @@ -66,6 +66,27 @@ return Requests; } +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". +// FIXME(kbobyrev): Should this be separated into the BackingMemorySize +// (underlying SymbolSlab size) and Symbol Index (MemIndex/Dex) overhead? +static void MemSize(benchmark::State ) { + const auto Mem = buildMem(); + for (auto _ : State) +// Divide size of Mem by 1000 so that it will be correctly displayed in the +// benchmark report (possible options for time units are ms, ns and us). +State.SetIterationTime(/*double Seconds=*/Mem->estimateMemoryUsage() / + 1000); +} +BENCHMARK(MemSize)->UseManualTime()->Unit(benchmark::kMillisecond); + +static void DexSize(benchmark::State ) { + const auto Dex = buildDex(); + for (auto _ : State) +State.SetIterationTime(Dex->estimateMemoryUsage() / 1000); +} +BENCHMARK(DexSize)->UseManualTime()->Unit(benchmark::kMillisecond); + static void MemQueries(benchmark::State ) { const auto Mem = buildMem(); const auto Requests = extractQueriesFromLogs(); Index: clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp === --- clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp +++ clang-tools-extra/clangd/benchmarks/IndexBenchmark.cpp @@ -66,6 +66,27 @@ return Requests; } +// This is not a *real* benchmark: it shows size of built MemIndex (in bytes). +// Same for the next "benchmark". +// FIXME(kbobyrev): Should this be separated into the BackingMemorySize +// (underlying SymbolSlab size) and Symbol Index (MemIndex/Dex) overhead? +static void MemSize(benchmark::State ) { + const auto Mem = buildMem(); + for (auto _ : State) +// Divide size of Mem by 1000 so that it will be correctly displayed in the +// benchmark report (possible options for time units are ms, ns and us). +State.SetIterationTime(/*double Seconds=*/Mem->estimateMemoryUsage() / + 1000); +} +BENCHMARK(MemSize)->UseManualTime()->Unit(benchmark::kMillisecond); + +static void DexSize(benchmark::State ) { + const auto Dex = buildDex(); + for (auto _ : State) +State.SetIterationTime(Dex->estimateMemoryUsage() / 1000); +} +BENCHMARK(DexSize)->UseManualTime()->Unit(benchmark::kMillisecond); + static void MemQueries(benchmark::State ) { const auto Mem = buildMem(); const auto Requests = extractQueriesFromLogs(); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits