Merge "fix java_heap_class_stats crash when no heap graph" into main
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 4fb79c3..531b440 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 @@
 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 21cb826..94dea75 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 @@
         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 {
+        }
+        """))