diff --git a/.pick_status.json b/.pick_status.json index d3bcba118ea..a3bd014759a 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4474,7 +4474,7 @@ "description": "freedreno/drm: Only initialize memory data source when Perfetto is active", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "c7045e3e6331c207065b77285ea9e786276ca0d2", "notes": null diff --git a/src/freedreno/drm/freedreno_drm_perfetto.cc b/src/freedreno/drm/freedreno_drm_perfetto.cc index 9d6a22117db..0c4ba8d3372 100644 --- a/src/freedreno/drm/freedreno_drm_perfetto.cc +++ b/src/freedreno/drm/freedreno_drm_perfetto.cc @@ -50,17 +50,25 @@ class FdMemoryDataSource : public perfetto::DataSource { PERFETTO_DECLARE_DATA_SOURCE_STATIC_MEMBERS(FdMemoryDataSource); PERFETTO_DEFINE_DATA_SOURCE_STATIC_MEMBERS(FdMemoryDataSource); +bool fd_drm_perfetto_active = false; + extern "C" void fd_drm_perfetto_init(void) { - perfetto::DataSourceDescriptor dsd; - dsd.set_name("gpu.memory.msm"); - FdMemoryDataSource::Register(dsd); + if (!fd_drm_perfetto_active && util_perfetto_is_tracing_enabled()) { + perfetto::DataSourceDescriptor dsd; + dsd.set_name("gpu.memory.msm"); + FdMemoryDataSource::Register(dsd); + fd_drm_perfetto_active = true; + } } extern "C" void fd_alloc_log(struct fd_bo *bo, enum fd_alloc_category from, enum fd_alloc_category to) { + if (!fd_drm_perfetto_active) + return; + /* Special case for BOs that back heap chunks, they don't immediately * transition to active, despite what the caller thinks: */