# Contains tests for parsing events which are applicable to more than one vertical
# "area". Generally, events here are of high importance (e.g. sched_switch is tested
# here is and is used by every embedder of trace processor)
#
# Note: It's generally *not* advisable to add tests here. Check the guidance provided by
# http://perfetto/dev/docs/analysis/trace-processor#diff-tests for choosing which folder
# to add a new test to.

# TODO(lalitm): some tests here should be moved out of here and into the area folders;
# they are only here because they predate the modularisation of diff tests.

# Sched
../../data/android_sched_and_ps.pb ts_desc_filter.sql ts_desc_filter_android_sched_and_ps.out

# Sched reason
../../data/android_sched_and_ps.pb end_reason_eq.sql android_sched_and_ps_end_reason_eq.out
../../data/android_sched_and_ps.pb end_reason_neq.sql android_sched_and_ps_end_reason_neq.out

# Sched wakeup
../../data/android_sched_and_ps.pb sched_wakeup.sql sched_wakeup_android_sched_and_ps.out

# CPU Frequency
../../data/cpu_counters.pb b120487929.sql cpu_counters_b120487929.out

# Test the filtering of ftrace events before tracing_start.
ftrace_with_tracing_start.py list_sched_slice_spans.sql ftrace_with_tracing_start_list_sched_slice_spans.out

# Rss stats
rss_stat_mm_id.py rss_stat.sql rss_stat_mm_id.out
rss_stat_mm_id_clone.py rss_stat.sql rss_stat_mm_id_clone.out
rss_stat_mm_id_reuse.py rss_stat.sql rss_stat_mm_id_reuse.out
rss_stat_legacy.py rss_stat.sql rss_stat_legacy.out
rss_stat_after_free.py rss_stat_after_free.sql rss_stat_after_free.out

# Memory counters
../../data/memory_counters.pb args_string_filter_null.sql memory_counters_args_string_filter_null.out
../../data/memory_counters.pb args_string_is_null.sql memory_counters_args_string_is_null.out
../../data/memory_counters.pb args_string_is_not_null.sql memory_counters_args_string_is_not_null.out
../../data/memory_counters.pb b120605557.sql memory_counters_b120605557.out
../../data/memory_counters.pb global_memory_counter.sql global_memory_counter_memory_counters.out
ion_stat.textproto ion_stat.sql ion_stat.out

# Scheduling slices from sched_switch events. There are two tests, one for the
# typical encoding of sched_switch events, and one for the same trace
# re-encoded in the compact format. The output should be identical apart from
# the latter having one slice fewer for each cpu (the first compact
# sched_switch event doesn't start a slice). Six slices in this case.
../../data/sched_switch_original.pb sched_slices.sql sched_slices_sched_switch_original.out
../../data/sched_switch_compact.pb sched_slices.sql sched_slices_sched_switch_compact.out

# Decoding of sched_waking events from a trace with compact scheduling events.
# Verifies the contents of raw & instants tables.
../../data/compact_sched.pb sched_waking_raw.sql sched_waking_raw_compact_sched.out
../../data/compact_sched.pb sched_waking_instants.sql sched_waking_instants_compact_sched.out

# Mm Event
../../data/mm_event.pb mm_event.sql mm_event.out

# Check the systrace conversion code in the raw table.
# Print events
../../data/lmk_userspace.pb print_systrace.sql print_systrace_lmk_userspace.out
kernel_tmw_counter.textproto thread_counter_and_track.sql kernel_tmw_counter_thread_counter_and_track.out
kernel_dpu_tmw_counter.textproto thread_counter_and_track.sql kernel_dpu_tmw_counter_thread_counter_and_track.out
# Unsigned integers
print_systrace_unsigned.py print_systrace.sql print_systrace_unsigned.out

# cgroup_attach_task systrace conversion.
cgroup_attach_task_pre_s.textproto print_systrace.sql cgroup_attach_task_pre_s_print_systrace.out
cgroup_attach_task_post_s.textproto print_systrace.sql cgroup_attach_task_post_s_print_systrace.out

# Parsing systrace files
../../data/systrace.html systrace_html.sql systrace_html.out
../../data/trailing_empty.systrace sched_smoke.sql sched_smoke_trailing_empty.out

# LMK handling
../../data/lmk_userspace.pb lmk.sql lmk_userspace_lmk.out
../common/oom_kill.textproto oom_kill.sql oom_kill.out

# Logcat
../../data/android_log.pb android_log_counts.sql android_log_counts.out
../../data/android_log.pb android_log_msgs.sql android_log_msgs.out
../../data/android_log_ring_buffer_mode.pb android_log_ring_buffer_mode.sql android_log_ring_buffer_mode.out

# Oom Score
synth_oom.py oom_query.sql synth_oom_oom_query.out
../../data/process_stats_poll.pb oom_score_poll.sql process_stats_poll_oom_score.out

# Stats
../../data/android_sched_and_ps.pb stats.sql android_sched_and_ps_stats.out

# Syscalls
syscall.py sys.sql sys_syscall.out

# thread_slice tables.
flow_events_json_v2.json thread_time_in_thread_slice.sql thread_time_in_thread_slice.out

# Initial display state
initial_display_state.textproto initial_display_state.sql initial_display_state.out

# Config & metadata
config_metadata.textproto metadata.sql config_metadata.out
trigger_packet_trace.textproto triggers_packets.sql triggers_packets_trigger_packet_trace.out
chrome_metadata.textproto chrome_metadata.sql chrome_metadata.out

# CPU info
cpu_info.textproto cpu.sql cpu.out
cpu_info.textproto cpu_freq.sql cpu_freq.out

# Trace size
../../data/android_sched_and_ps.pb trace_size.sql android_sched_and_ps_trace_size.out

# Package list handling
android_package_list.py android_package_list android_package_list.out

# Ensures process -> package matching works as expected.
process_metadata_matching.textproto process_metadata_matching.sql process_metadata_matching.out

# Flow events importing from json
flow_events_json_v1.json flow_events.sql flow_events_json_v1.out
flow_events_json_v2.json flow_events.sql flow_events_json_v2.out

# Importing displayTimeUnit
../../data/display_time_unit.json slices.sql display_time_unit_slices.out

# Parsing sched_blocked_reason
sched_blocked_proto.py sched_blocked_reason.sql sched_blocked_proto_sched_blocked_reason.out
sched_blocked_systrace.systrace sched_blocked_reason.sql sched_blocked_systrace_sched_blocked_reason.out

# Kernel symbolization
sched_blocked_reason_symbolized.textproto sched_blocked_reason_function.sql sched_blocked_reason_symbolized_sched_blocked_reason_function.out
sched_blocked_reason_symbolized.textproto ../common/to_systrace.sql sched_blocked_reason_symbolized_to_systrace.out

# Floating point numbers
../../data/decimal_timestamp.json slices.sql decimal_timestamp_slices.out

# JSON instants and counters
../../data/counters.json json_counters.sql counters_json_counters.out
../../data/instants.json json_instants.sql instants_json_instants.out

# Trace quality metric
very_long_sched.py android_trace_quality very_long_sched_android_trace_quality.out

# Regression test for b/193721088 (infra prepending " done\n" to atrace)
../../data/atrace_b_193721088.atr sched_smoke.sql sched_smoke_trailing_empty.out

# Multiuser
android_multiuser_switch.textproto android_multiuser android_multiuser_switch.out

# Output of atrace -z.
../../data/atrace_compressed.ctrace sched_smoke.sql atrace_compressed_sched_count.out

# Output of adb shell "atrace -t 1 sched" > out.txt". It has extra garbage
# coming from stderr before the TRACE: marker. See b/208691037.
../../data/atrace_uncompressed_b_208691037 sched_smoke.sql atrace_uncompressed_sched_count.out
otheruuids.textproto android_other_traces otheruuids_android_other_traces.out
