diff options
Diffstat (limited to 'simpleperf/report_utils.cpp')
-rw-r--r-- | simpleperf/report_utils.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/simpleperf/report_utils.cpp b/simpleperf/report_utils.cpp index 74959374..ecbc6aa8 100644 --- a/simpleperf/report_utils.cpp +++ b/simpleperf/report_utils.cpp @@ -16,6 +16,9 @@ #include "report_utils.h" +#include <stdlib.h> + +#include <android-base/parsebool.h> #include <android-base/scopeguard.h> #include <android-base/strings.h> @@ -186,6 +189,21 @@ static bool IsArtEntry(const CallChainReportEntry& entry, bool* is_jni_trampolin return false; }; +CallChainReportBuilder::CallChainReportBuilder(ThreadTree& thread_tree) + : thread_tree_(thread_tree) { + const char* env_name = "REMOVE_R8_SYNTHESIZED_FRAME"; + const char* s = getenv(env_name); + if (s != nullptr) { + auto result = android::base::ParseBool(s); + if (result == android::base::ParseBoolResult::kError) { + LOG(WARNING) << "invalid value in env variable " << env_name; + } else if (result == android::base::ParseBoolResult::kTrue) { + LOG(INFO) << "R8 synthesized frames will be removed."; + remove_r8_synthesized_frame_ = true; + } + } +} + bool CallChainReportBuilder::AddProguardMappingFile(std::string_view mapping_file) { if (!retrace_) { retrace_.reset(new ProguardMappingRetrace); @@ -349,7 +367,7 @@ void CallChainReportBuilder::DeObfuscateJavaMethods(std::vector<CallChainReportE std::string original_name; bool synthesized; if (retrace_->DeObfuscateJavaMethods(name, &original_name, &synthesized)) { - if (synthesized) { + if (synthesized && remove_r8_synthesized_frame_) { callchain.erase(callchain.begin() + i); continue; } |