aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIoannis Ilkos <ilkos@google.com>2023-02-14 13:53:33 +0000
committerIoannis Ilkos <ilkos@google.com>2023-03-13 11:49:44 +0000
commit638a4b25725353062fb3769f962175a4d3d87abc (patch)
tree2b3832a6a69c6dd04180ee3d3d6fbe01a609dc26
parentf35a169ad7118512483e7a04a0efc59a2bdfa504 (diff)
downloadperfetto-638a4b25725353062fb3769f962175a4d3d87abc.tar.gz
Populate property with the number of active OOME tracing sessions
Test: manual, atest HeapprofdJavaCtsTest Bug: 269246893 Bug: 272719059 Change-Id: I171e668d64bbe68eb8d5dd5bcdad31810d0583e6 Merged-In: I171e668d64bbe68eb8d5dd5bcdad31810d0583e6
-rw-r--r--src/traced/service/builtin_producer.cc23
-rw-r--r--src/traced/service/builtin_producer.h2
2 files changed, 25 insertions, 0 deletions
diff --git a/src/traced/service/builtin_producer.cc b/src/traced/service/builtin_producer.cc
index a2007beb5..0664b5d0d 100644
--- a/src/traced/service/builtin_producer.cc
+++ b/src/traced/service/builtin_producer.cc
@@ -46,9 +46,11 @@ namespace {
constexpr char kHeapprofdDataSourceName[] = "android.heapprofd";
constexpr char kJavaHprofDataSourceName[] = "android.java_hprof";
+constexpr char kJavaHprofOomDataSourceName[] = "android.java_hprof.oom";
constexpr char kTracedPerfDataSourceName[] = "linux.perf";
constexpr char kLazyHeapprofdPropertyName[] = "traced.lazy.heapprofd";
constexpr char kLazyTracedPerfPropertyName[] = "traced.lazy.traced_perf";
+constexpr char kJavaHprofOomActivePropertyName[] = "traced.oome_heap_session.count";
} // namespace
@@ -64,6 +66,8 @@ BuiltinProducer::~BuiltinProducer() {
SetAndroidProperty(kLazyHeapprofdPropertyName, "");
if (!lazy_traced_perf_.instance_ids.empty())
SetAndroidProperty(kLazyTracedPerfPropertyName, "");
+ if (!java_hprof_oome_instances_.empty())
+ SetAndroidProperty(kJavaHprofOomActivePropertyName, "");
}
void BuiltinProducer::ConnectInProcess(TracingService* svc) {
@@ -102,6 +106,11 @@ void BuiltinProducer::OnConnect() {
lazy_traced_perf_dsd.set_name(kTracedPerfDataSourceName);
endpoint_->RegisterDataSource(lazy_traced_perf_dsd);
}
+ {
+ DataSourceDescriptor java_hprof_oome_dsd;
+ java_hprof_oome_dsd.set_name(kJavaHprofOomDataSourceName);
+ endpoint_->RegisterDataSource(java_hprof_oome_dsd);
+ }
}
void BuiltinProducer::SetupDataSource(DataSourceInstanceID ds_id,
@@ -120,6 +129,13 @@ void BuiltinProducer::SetupDataSource(DataSourceInstanceID ds_id,
lazy_traced_perf_.instance_ids.emplace(ds_id);
return;
}
+
+ if (ds_config.name() == kJavaHprofOomDataSourceName) {
+ java_hprof_oome_instances_.emplace(ds_id);
+ SetAndroidProperty(kJavaHprofOomActivePropertyName,
+ std::to_string(java_hprof_oome_instances_.size()));
+ return;
+ }
}
void BuiltinProducer::StartDataSource(DataSourceInstanceID ds_id,
@@ -152,6 +168,13 @@ void BuiltinProducer::StopDataSource(DataSourceInstanceID ds_id) {
MaybeInitiateLazyStop(ds_id, &lazy_heapprofd_, kLazyHeapprofdPropertyName);
MaybeInitiateLazyStop(ds_id, &lazy_traced_perf_, kLazyTracedPerfPropertyName);
+
+ auto oome_it = java_hprof_oome_instances_.find(ds_id);
+ if (oome_it != java_hprof_oome_instances_.end()) {
+ java_hprof_oome_instances_.erase(oome_it);
+ SetAndroidProperty(kJavaHprofOomActivePropertyName,
+ std::to_string(java_hprof_oome_instances_.size()));
+ }
}
void BuiltinProducer::MaybeInitiateLazyStop(DataSourceInstanceID ds_id,
diff --git a/src/traced/service/builtin_producer.h b/src/traced/service/builtin_producer.h
index 9873458ab..7014d4419 100644
--- a/src/traced/service/builtin_producer.h
+++ b/src/traced/service/builtin_producer.h
@@ -34,6 +34,7 @@ namespace perfetto {
// * perfetto metatrace
// * lazy heapprofd daemon starter (android only)
// * lazy traced_perf daemon starter (android only)
+// * java_hprof oom data source counter (android only)
class BuiltinProducer : public Producer {
public:
BuiltinProducer(base::TaskRunner* task_runner, uint32_t lazy_stop_delay_ms);
@@ -83,6 +84,7 @@ class BuiltinProducer : public Producer {
MetatraceState metatrace_;
LazyAndroidDaemonState lazy_heapprofd_;
LazyAndroidDaemonState lazy_traced_perf_;
+ std::set<DataSourceInstanceID> java_hprof_oome_instances_;
base::WeakPtrFactory<BuiltinProducer> weak_factory_; // Keep last.
};