# Contains tests for graphics related events and tables.

# GPU trace tests.
gpu_counters.py gpu_counters_test.sql gpu_counters.out
gpu_counter_specs.textproto gpu_counter_specs_test.sql gpu_counter_specs.out
gpu_render_stages.py gpu_render_stages_test.sql gpu_render_stages.out
gpu_render_stages_interned_spec.textproto gpu_render_stages_test.sql gpu_render_stages_interned_spec.out
vulkan_api_events.py vulkan_api_events_test.sql vulkan_api_events.out
gpu_log.py gpu_log_test.sql gpu_log.out

# Graphics frame event trace tests.
graphics_frame_events.py graphics_frame_events_test.sql graphics_frame_events.out

# GPU Memory ftrace packets
gpu_mem_total.py gpu_mem_total_test.sql gpu_mem_total.out
gpu_mem_total_after_free.py gpu_mem_total_test.sql gpu_mem_total_after_free_gpu_mem_total.out

# Clock sync
clock_sync.py clock_sync_test.sql clock_sync.out

# Android SurfaceFlinger metrics
frame_missed.py frame_missed_event_test.sql frame_missed_event_frame_missed.out
frame_missed.py android_surfaceflinger frame_missed_metrics.out
surfaceflinger_gpu_invocation.py android_surfaceflinger surfaceflinger_gpu_invocation.out

# GPU metrics
gpu_metric.py android_gpu gpu_metric.out
gpu_frequency_metric.textproto android_gpu gpu_frequency_metric.out

# Android SysUI CUJs metrics
android_sysui_cuj.py android_sysui_cuj android_sysui_cuj.out
android_sysui_cuj.py android_sysui_cuj_event_test.sql android_sysui_cuj_event.out

# Android Jank CUJ metric
android_sysui_cuj.py android_jank_cuj android_jank_cuj.out
android_sysui_cuj.py android_jank_cuj_query_test.sql android_jank_cuj_query.out

# Frame Timeline event trace tests
frame_timeline_events.py expected_frame_timeline_events_test.sql expected_frame_timeline_events.out
frame_timeline_events.py actual_frame_timeline_events_test.sql actual_frame_timeline_events.out

# Composition layer
composition_layer.py composition_layer_count_test.sql composition_layer_count.out

# G2D metrics
# TODO(rsavitski): find a real trace and double-check that the textproto is
# realistic. One kernel's source I checked had tgid=0 for all counter events.
# Initial support was added/discussed in b/171296908.
g2d_metrics.textproto g2d g2d_metrics.out

# Composer execution
composer_execution.py composer_execution_test.sql composer_execution.out

# Display metrics
display_metrics.py display_metrics display_metrics.out

# DPU vote clock and bandwidth
dpu_vote_clock_bw.textproto android_hwcomposer dpu_vote_clock_bw.out

# DRM-related ftrace events
drm_vblank.textproto drm_gpu_track_test.sql drm_vblank_gpu_track.out
drm_sched.textproto drm_gpu_track_test.sql drm_sched_gpu_track.out
drm_sched.textproto drm_thread_track_test.sql drm_sched_thread_track.out
drm_dma_fence.textproto drm_gpu_track_test.sql drm_dma_fence_gpu_track.out
drm_dma_fence.textproto drm_thread_track_test.sql drm_dma_fence_thread_track.out

# Video 4 Linux 2 related tests
v4l2_vidioc.textproto v4l2_vidioc_slice_test.sql v4l2_vidioc_slice.out
v4l2_vidioc.textproto v4l2_vidioc_flow_test.sql v4l2_vidioc_flow.out
virtio_video.textproto virtio_video_slice_test.sql virtio_video_slice.out

# virtgpu (drm/virtio) related tests
virtio_gpu.textproto virtio_gpu_test.sql virtio_gpu_test.out

# mali GPU events
mali.textproto mali_test.sql mali_test.out
mali_fence.textproto mali_fence_test.sql mali_fence_test.out
