Add DETACH, ATTACH and CANCEL buffer events to the Frame event proto

The GraphicsFrameEvent proto doesn't cover the detachBuffer,
attachBuffer and cancelBuffer mainly used by the media pipeline. This CL
adds the events to cover them

Test: Build, run and take a trace with GAPID
Bug: 142502670
Change-Id: I01ce33db33c49658a276b9b1f1a8d795296076a3
diff --git a/protos/perfetto/trace/android/graphics_frame_event.proto b/protos/perfetto/trace/android/graphics_frame_event.proto
index 68248f9..36cfa39 100644
--- a/protos/perfetto/trace/android/graphics_frame_event.proto
+++ b/protos/perfetto/trace/android/graphics_frame_event.proto
@@ -32,6 +32,9 @@
     PRESENT_FENCE = 8;
     RELEASE_FENCE = 9;
     MODIFY = 10;
+    DETACH = 11;
+    ATTACH = 12;
+    CANCEL = 13;
   }
 
   message BufferEvent {
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 0ae22f5..377bb92 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -590,6 +590,9 @@
     PRESENT_FENCE = 8;
     RELEASE_FENCE = 9;
     MODIFY = 10;
+    DETACH = 11;
+    ATTACH = 12;
+    CANCEL = 13;
   }
 
   message BufferEvent {
diff --git a/src/trace_processor/importers/proto/graphics_event_parser.cc b/src/trace_processor/importers/proto/graphics_event_parser.cc
index 17909bd..4377c81 100644
--- a/src/trace_processor/importers/proto/graphics_event_parser.cc
+++ b/src/trace_processor/importers/proto/graphics_event_parser.cc
@@ -61,7 +61,10 @@
                "PresentFenceSignaled") /* PRESENT_FENCE */,
            context->storage->InternString(
                "ReleaseFenceSignaled") /* RELEASE_FENCE */,
-           context->storage->InternString("Modify") /* MODIFY */}},
+           context->storage->InternString("Modify") /* MODIFY */,
+           context->storage->InternString("Detach") /* DETACH */,
+           context->storage->InternString("Attach") /* ATTACH */,
+           context->storage->InternString("Cancel") /* CANCEL */}},
       vulkan_allocated_host_memory_id_(
           context->storage->InternString("vulkan.host.memory")),
       vulkan_allocated_gpu_memory_id_(
diff --git a/src/trace_processor/importers/proto/graphics_event_parser.h b/src/trace_processor/importers/proto/graphics_event_parser.h
index 25ab411..671dd63 100644
--- a/src/trace_processor/importers/proto/graphics_event_parser.h
+++ b/src/trace_processor/importers/proto/graphics_event_parser.h
@@ -56,7 +56,7 @@
   const StringId unknown_event_name_id_;
   const StringId no_layer_name_name_id_;
   const StringId layer_name_key_id_;
-  std::array<StringId, 11> event_type_name_ids_;
+  std::array<StringId, 14> event_type_name_ids_;
   // For VulkanMemoryEvent
   const StringId vulkan_allocated_host_memory_id_;
   const StringId vulkan_allocated_gpu_memory_id_;
diff --git a/test/trace_processor/graphics_frame_events.out b/test/trace_processor/graphics_frame_events.out
index fdef2eb..c6fa313 100644
--- a/test/trace_processor/graphics_frame_events.out
+++ b/test/trace_processor/graphics_frame_events.out
@@ -3,8 +3,11 @@
 "graphics_frame_event","layer1[buffer:1]",6,11,"Dequeue",12,"layer_name","layer1"
 "graphics_frame_event","layer2[buffer:2]",2,7,"Queue",11,"layer_name","layer2"
 "graphics_frame_event","layer2[buffer:2]",7,12,"Queue",12,"layer_name","layer2"
+"graphics_frame_event","layer2[buffer:2]",8,2,"Detach",14,"layer_name","layer2"
 "graphics_frame_event","layer3[buffer:3]",3,8,"Post",11,"layer_name","layer3"
 "graphics_frame_event","layer3[buffer:3]",8,13,"Post",12,"layer_name","layer3"
+"graphics_frame_event","layer3[buffer:3]",9,5,"Attach",15,"layer_name","layer3"
+"graphics_frame_event","layer3[buffer:3]",10,10,"Cancel",16,"layer_name","layer3"
 "graphics_frame_event","layer4[buffer:4]",4,9,"AcquireFenceSignaled",11,"layer_name","layer4"
 "graphics_frame_event","layer5[buffer:5]",5,10,"Latch",11,"layer_name","layer5"
 "graphics_frame_event","layer7[buffer:7]",7,12,"unknown_event",13,"layer_name","layer7"
diff --git a/test/trace_processor/graphics_frame_events.py b/test/trace_processor/graphics_frame_events.py
index 3b9a171..2eeb7bd 100755
--- a/test/trace_processor/graphics_frame_events.py
+++ b/test/trace_processor/graphics_frame_events.py
@@ -17,19 +17,38 @@
 sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
 import synth_common
 
+class BufferEvent:
+  UNSPECIFIED = 0
+  DEQUEUE = 1
+  QUEUE = 2
+  POST = 3
+  ACQUIRE_FENCE = 4
+  LATCH = 5
+  HWC_COMPOSITION_QUEUED = 6
+  FALLBACK_COMPOSITION = 7
+  PRESENT_FENCE = 8
+  RELEASE_FENCE = 9
+  MODIFY = 10
+  DETACH = 11
+  ATTACH = 12
+  CANCEL = 13
+
 trace = synth_common.create_trace()
-trace.add_buffer_event_packet(ts=1, buffer_id=1, layer_name="layer1", frame_number=11, event_type=1, duration=6)
-trace.add_buffer_event_packet(ts=2, buffer_id=2, layer_name="layer2", frame_number=11, event_type=2, duration=7)
-trace.add_buffer_event_packet(ts=3, buffer_id=3, layer_name="layer3", frame_number=11, event_type=3, duration=8)
-trace.add_buffer_event_packet(ts=4, buffer_id=4, layer_name="layer4", frame_number=11, event_type=4, duration=9)
-trace.add_buffer_event_packet(ts=5, buffer_id=5, layer_name="layer5", frame_number=11, event_type=5, duration=10)
+trace.add_buffer_event_packet(ts=1, buffer_id=1, layer_name="layer1", frame_number=11, event_type=BufferEvent.DEQUEUE, duration=6)
+trace.add_buffer_event_packet(ts=2, buffer_id=2, layer_name="layer2", frame_number=11, event_type=BufferEvent.QUEUE, duration=7)
+trace.add_buffer_event_packet(ts=3, buffer_id=3, layer_name="layer3", frame_number=11, event_type=BufferEvent.POST, duration=8)
+trace.add_buffer_event_packet(ts=4, buffer_id=4, layer_name="layer4", frame_number=11, event_type=BufferEvent.ACQUIRE_FENCE, duration=9)
+trace.add_buffer_event_packet(ts=5, buffer_id=5, layer_name="layer5", frame_number=11, event_type=BufferEvent.LATCH, duration=10)
 # Repeat some layers
-trace.add_buffer_event_packet(ts=6, buffer_id=1, layer_name="layer1", frame_number=12, event_type=1, duration=11)
-trace.add_buffer_event_packet(ts=7, buffer_id=2, layer_name="layer2", frame_number=12, event_type=2, duration=12)
-trace.add_buffer_event_packet(ts=8, buffer_id=3, layer_name="layer3", frame_number=12, event_type=3, duration=13)
+trace.add_buffer_event_packet(ts=6, buffer_id=1, layer_name="layer1", frame_number=12, event_type=BufferEvent.DEQUEUE, duration=11)
+trace.add_buffer_event_packet(ts=7, buffer_id=2, layer_name="layer2", frame_number=12, event_type=BufferEvent.QUEUE, duration=12)
+trace.add_buffer_event_packet(ts=8, buffer_id=3, layer_name="layer3", frame_number=12, event_type=BufferEvent.POST, duration=13)
 # Missing id.
-trace.add_buffer_event_packet(ts=6, buffer_id=-1, layer_name="layer6", frame_number=13, event_type=6, duration=11)
+trace.add_buffer_event_packet(ts=6, buffer_id=-1, layer_name="layer6", frame_number=13, event_type=BufferEvent.HWC_COMPOSITION_QUEUED, duration=11)
 # Missing type.
 trace.add_buffer_event_packet(ts=7, buffer_id=7, layer_name="layer7", frame_number=13, event_type=-1, duration=12)
-
+# Add some more events
+trace.add_buffer_event_packet(ts=8, buffer_id=2, layer_name="layer2", frame_number=14, event_type=BufferEvent.DETACH, duration=2)
+trace.add_buffer_event_packet(ts=9, buffer_id=3, layer_name="layer3", frame_number=15, event_type=BufferEvent.ATTACH, duration=5)
+trace.add_buffer_event_packet(ts=10, buffer_id=3, layer_name="layer3", frame_number=16, event_type=BufferEvent.CANCEL, duration=10)
 print(trace.trace.SerializeToString())