diff options
-rw-r--r-- | runtime/base/systrace.h | 13 | ||||
-rw-r--r-- | runtime/verifier/method_verifier.cc | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/runtime/base/systrace.h b/runtime/base/systrace.h index 06db48a576..c6b6ff1d43 100644 --- a/runtime/base/systrace.h +++ b/runtime/base/systrace.h @@ -23,6 +23,8 @@ #include <string> +#include "android-base/stringprintf.h" + namespace art { class ScopedTrace { @@ -30,6 +32,12 @@ class ScopedTrace { explicit ScopedTrace(const char* name) { ATRACE_BEGIN(name); } + template <typename Fn> + explicit ScopedTrace(Fn fn) { + if (ATRACE_ENABLED()) { + ATRACE_BEGIN(fn().c_str()); + } + } explicit ScopedTrace(const std::string& name) : ScopedTrace(name.c_str()) {} @@ -38,6 +46,11 @@ class ScopedTrace { } }; +#define SCOPED_TRACE(fmtstr, ...) \ + ::art::ScopedTrace trace ## __LINE__([&]() { \ + return ::android::base::StringPrintf((fmtstr), __VA_ARGS__); \ + }) + } // namespace art #endif // ART_RUNTIME_BASE_SYSTRACE_H_ diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index be58a57c24..8bd3098998 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -284,7 +284,7 @@ FailureKind MethodVerifier::VerifyClass(Thread* self, bool allow_soft_failures, HardFailLogMode log_level, std::string* error) { - ScopedTrace trace(__FUNCTION__); + SCOPED_TRACE("VerifyClass %s", PrettyDescriptor(dex_file->GetClassDescriptor(class_def)).c_str()); // A class must not be abstract and final. if ((class_def.access_flags_ & (kAccAbstract | kAccFinal)) == (kAccAbstract | kAccFinal)) { |