[CTU] Add statistics

Reviewers: xazax.hun, a_sidorin

Subscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits

Differential Revision: https://reviews.llvm.org/D55133

llvm-svn: 348584
This commit is contained in:
Gabor Marton 2018-12-07 11:55:22 +00:00
parent 75f6caddab
commit 700a29a153
1 changed files with 15 additions and 1 deletions

View File

@ -21,6 +21,7 @@
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "clang/Index/USRGeneration.h"
#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/Path.h"
@ -32,6 +33,15 @@ namespace clang {
namespace cross_tu {
namespace {
#define DEBUG_TYPE "CrossTranslationUnit"
STATISTIC(NumGetCTUCalled, "The # of getCTUDefinition function called");
STATISTIC(
NumNotInOtherTU,
"The # of getCTUDefinition called but the function is not in any other TU");
STATISTIC(NumGetCTUSuccess,
"The # of getCTUDefinition successfully returned the "
"requested function's body");
// FIXME: This class is will be removed after the transition to llvm::Error.
class IndexErrorCategory : public std::error_category {
public:
@ -151,6 +161,7 @@ CrossTranslationUnitContext::getCrossTUDefinition(const FunctionDecl *FD,
StringRef CrossTUDir,
StringRef IndexName) {
assert(!FD->hasBody() && "FD has a definition in current translation unit!");
++NumGetCTUCalled;
const std::string LookupFnName = getLookupName(FD);
if (LookupFnName.empty())
return llvm::make_error<IndexError>(
@ -216,8 +227,10 @@ llvm::Expected<ASTUnit *> CrossTranslationUnitContext::loadExternalAST(
}
auto It = FunctionFileMap.find(LookupName);
if (It == FunctionFileMap.end())
if (It == FunctionFileMap.end()) {
++NumNotInOtherTU;
return llvm::make_error<IndexError>(index_error_code::missing_definition);
}
StringRef ASTFileName = It->second;
auto ASTCacheEntry = FileASTUnitMap.find(ASTFileName);
if (ASTCacheEntry == FileASTUnitMap.end()) {
@ -250,6 +263,7 @@ CrossTranslationUnitContext::importDefinition(const FunctionDecl *FD) {
cast<FunctionDecl>(Importer.Import(const_cast<FunctionDecl *>(FD)));
assert(ToDecl->hasBody());
assert(FD->hasBody() && "Functions already imported should have body.");
++NumGetCTUSuccess;
return ToDecl;
}