aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIoannis Ilkos <ilkos@google.com>2024-05-02 19:45:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-02 19:45:47 +0000
commitb2cdcb855475e0ccfe22bd913bab92a07c76bebd (patch)
tree4751b69a501d81439d1a1577fd7fb71d0c4e1157
parent76939ce3c4e884cc77486bea44b2b37428f4f301 (diff)
parent56db88ba56cc8fc445d9354274917cd27e60c26c (diff)
downloadperfetto-master.tar.gz
Merge "fix java_heap_class_stats crash when no heap graph" into mainHEADmastermain
-rw-r--r--src/trace_processor/metrics/sql/android/java_heap_class_stats.sql5
-rw-r--r--test/trace_processor/diff_tests/metrics/profiling/tests.py9
2 files changed, 12 insertions, 2 deletions
diff --git a/src/trace_processor/metrics/sql/android/java_heap_class_stats.sql b/src/trace_processor/metrics/sql/android/java_heap_class_stats.sql
index 4fb79c3f6..531b440d4 100644
--- a/src/trace_processor/metrics/sql/android/java_heap_class_stats.sql
+++ b/src/trace_processor/metrics/sql/android/java_heap_class_stats.sql
@@ -28,11 +28,12 @@ SELECT
FROM memory_heap_graph_dominator_tree tree
JOIN heap_graph_object obj USING(id)
UNION ALL
--- tree partition below requires a single root.
+-- provide a single root required by tree partition if heap graph exists.
SELECT
memory_heap_graph_super_root_fn() AS id,
NULL AS parent_id,
- (SELECT MAX(id) + 1 FROM heap_graph_class) AS group_key;
+ (SELECT MAX(id) + 1 FROM heap_graph_class) AS group_key
+WHERE memory_heap_graph_super_root_fn() IS NOT NULL;
DROP TABLE IF EXISTS _heap_object_marked_for_dominated_stats;
CREATE PERFETTO TABLE _heap_object_marked_for_dominated_stats AS
diff --git a/test/trace_processor/diff_tests/metrics/profiling/tests.py b/test/trace_processor/diff_tests/metrics/profiling/tests.py
index 21cb8265e..94dea75a4 100644
--- a/test/trace_processor/diff_tests/metrics/profiling/tests.py
+++ b/test/trace_processor/diff_tests/metrics/profiling/tests.py
@@ -115,3 +115,12 @@ class ProfilingMetrics(TestSuite):
trace=Path('heap_graph.textproto'),
query=Metric('java_heap_class_stats'),
out=Path('java_heap_class_stats.out'))
+
+ def test_java_heap_class_stats_no_heap_graph(self):
+ return DiffTestBlueprint(
+ trace=Path('heap_profile_no_symbols.textproto'),
+ query=Metric('java_heap_class_stats'),
+ out=TextProto(r"""
+ java_heap_class_stats {
+ }
+ """))