diff options
Diffstat (limited to 'src/profiling/memory/java_hprof_producer.cc')
-rw-r--r-- | src/profiling/memory/java_hprof_producer.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/profiling/memory/java_hprof_producer.cc b/src/profiling/memory/java_hprof_producer.cc index 9d101ff51..4d015c266 100644 --- a/src/profiling/memory/java_hprof_producer.cc +++ b/src/profiling/memory/java_hprof_producer.cc @@ -18,8 +18,9 @@ #include <signal.h> +#include "perfetto/ext/base/optional.h" #include "perfetto/ext/tracing/core/trace_writer.h" -#include "src/profiling/memory/proc_utils.h" +#include "src/profiling/common/proc_utils.h" namespace perfetto { namespace profiling { @@ -82,8 +83,16 @@ void JavaHprofProducer::SetupDataSource(DataSourceInstanceID id, ds.id = id; for (uint64_t pid : config.pid()) ds.pids.emplace(static_cast<pid_t>(pid)); - auto normalized_cmdlines = NormalizeCmdlines(config.process_cmdline()); - FindPidsForCmdlines(normalized_cmdlines, &ds.pids); + base::Optional<std::vector<std::string>> normalized_cmdlines = + NormalizeCmdlines(config.process_cmdline()); + if (!normalized_cmdlines.has_value()) { + PERFETTO_ELOG("Rejecting data source due to invalid cmdline in config."); + return; + } + FindPidsForCmdlines(normalized_cmdlines.value(), &ds.pids); + if (config.min_anonymous_memory_kb() > 0) + RemoveUnderAnonThreshold(config.min_anonymous_memory_kb(), &ds.pids); + ds.config = std::move(config); data_sources_.emplace(id, std::move(ds)); } |