aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/memory/java_hprof_producer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/profiling/memory/java_hprof_producer.cc')
-rw-r--r--src/profiling/memory/java_hprof_producer.cc15
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));
}