[ VM / Service ] Remove root frame from traceEvents in _getCpuProfileTimeline response

This frame is already filtered from the trie, so this will make behavior
consistent.

Change-Id: I9283a6ef170b725f739d91795fbb81cf7d902470
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102103
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index b06927d..97153de 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -2486,19 +2486,6 @@
     for (intptr_t sample_index = 0; sample_index < samples_->length();
          sample_index++) {
       ProcessedSample* sample = samples_->At(sample_index);
-      JSONObject event(&events);
-      event.AddProperty("ph", "P");  // kind = sample event
-      // Add a blank name to keep about:tracing happy.
-      event.AddProperty("name", "");
-      event.AddProperty64("pid", pid);
-      event.AddProperty64("tid", OSThread::ThreadIdToIntPtr(sample->tid()));
-      event.AddPropertyTimeMicros("ts", sample->timestamp());
-      event.AddProperty("cat", "Dart");
-      if (!Isolate::IsVMInternalIsolate(isolate_)) {
-        JSONObject args(&event, "args");
-        args.AddProperty("mode", "basic");
-      }
-
       ProfileTrieNode* trie;
       if (code_trie) {
         trie = sample->timeline_code_trie();
@@ -2506,7 +2493,22 @@
         trie = sample->timeline_function_trie();
       }
       ASSERT(trie->frame_id() != -1);
-      event.AddPropertyF("sf", "%" Pd "-%" Pd, isolate_id, trie->frame_id());
+
+      if (trie->frame_id() != kRootFrameId) {
+        JSONObject event(&events);
+        event.AddProperty("ph", "P");  // kind = sample event
+        // Add a blank name to keep about:tracing happy.
+        event.AddProperty("name", "");
+        event.AddProperty64("pid", pid);
+        event.AddProperty64("tid", OSThread::ThreadIdToIntPtr(sample->tid()));
+        event.AddPropertyTimeMicros("ts", sample->timestamp());
+        event.AddProperty("cat", "Dart");
+        if (!Isolate::IsVMInternalIsolate(isolate_)) {
+          JSONObject args(&event, "args");
+          args.AddProperty("mode", "basic");
+        }
+        event.AddPropertyF("sf", "%" Pd "-%" Pd, isolate_id, trie->frame_id());
+      }
     }
   }
 }