diff options
Diffstat (limited to 'contrib/llvm-project/lldb/source/Utility/Instrumentation.cpp')
-rw-r--r-- | contrib/llvm-project/lldb/source/Utility/Instrumentation.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/contrib/llvm-project/lldb/source/Utility/Instrumentation.cpp b/contrib/llvm-project/lldb/source/Utility/Instrumentation.cpp new file mode 100644 index 000000000000..581f657aea80 --- /dev/null +++ b/contrib/llvm-project/lldb/source/Utility/Instrumentation.cpp @@ -0,0 +1,44 @@ +//===-- Instrumentation.cpp -----------------------------------------------===// +// 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 +// +//===----------------------------------------------------------------------===// + +#include "lldb/Utility/Instrumentation.h" +#include "lldb/Utility/LLDBLog.h" +#include "llvm/Support/Signposts.h" + +#include <cstdio> +#include <cstdlib> +#include <limits> +#include <thread> + +using namespace lldb_private; +using namespace lldb_private::instrumentation; + +// Whether we're currently across the API boundary. +static thread_local bool g_global_boundary = false; + +// Instrument SB API calls with singposts when supported. +static llvm::ManagedStatic<llvm::SignpostEmitter> g_api_signposts; + +Instrumenter::Instrumenter(llvm::StringRef pretty_func, + std::string &&pretty_args) + : m_pretty_func(pretty_func) { + if (!g_global_boundary) { + g_global_boundary = true; + m_local_boundary = true; + g_api_signposts->startInterval(this, m_pretty_func); + } + LLDB_LOG(GetLog(LLDBLog::API), "[{0}] {1} ({2})", + m_local_boundary ? "external" : "internal", m_pretty_func, + pretty_args); +} + +Instrumenter::~Instrumenter() { + if (m_local_boundary) { + g_global_boundary = false; + g_api_signposts->endInterval(this, m_pretty_func); + } +} |