mirror of
https://gitlab.steamos.cloud/frame-public/frame-developer-tools.git
synced 2026-10-14 15:01:49 +02:00
210 lines
5.2 KiB
Bash
Executable File
210 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
|
|
## Output filename
|
|
OUTPUT_FILENAME="${1}"
|
|
|
|
exec >>"${OUTPUT_FILENAME}.log" 2>&1
|
|
date
|
|
echo "date!" >&2
|
|
|
|
# Circular capture buffer size in kB / cpu
|
|
BUFF_SIZE="${2:-100000}"
|
|
|
|
# Collect a bevvy of trace events into this array
|
|
TRACE_EVENTS=()
|
|
|
|
# https://github.com/mikesart/gpuvis/wiki/TechDocs-Linux-Scheduler
|
|
TRACE_EVENTS+=(
|
|
"sched:sched_switch"
|
|
"sched:sched_process_fork"
|
|
"sched:sched_process_exec"
|
|
"sched:sched_process_exit"
|
|
)
|
|
|
|
# vblank events
|
|
TRACE_EVENTS+=(
|
|
"drm:drm_vblank_event"
|
|
"drm:drm_vblank_event_queued"
|
|
"drm:drm_vblank_event_delivered"
|
|
)
|
|
|
|
TRACE_EVENTS+=( "power:cpu_frequency" )
|
|
|
|
# https://github.com/mikesart/gpuvis/wiki/TechDocs-AMDGpu
|
|
TRACE_EVENTS+=(
|
|
"amdgpu:amdgpu_vm_flush"
|
|
"amdgpu:amdgpu_cs_ioctl"
|
|
"amdgpu:amdgpu_sched_run_job"
|
|
"amdgpu:amdgpu_ttm_bo_move"
|
|
"*fence:*fence_signaled"
|
|
)
|
|
|
|
|
|
# adreno specific
|
|
TRACE_EVENTS+=(
|
|
"kgsl:adreno_cmdbatch_queued"
|
|
"kgsl:adreno_cmdbatch_submitted"
|
|
"kgsl:adreno_cmdbatch_retired"
|
|
"kgsl:adreno_cmdbatch_sync"
|
|
"kgsl:adreno_cmdbatch_fault"
|
|
"kgsl:adreno_cmdbatch_recovery"
|
|
"kgsl:adreno_drawctxt_wait_start"
|
|
"kgsl:adreno_drawctxt_wait_done"
|
|
"kgsl:adreno_drawctxt_switch"
|
|
"kgsl:adreno_gpu_fault"
|
|
"kgsl:adreno_sp_tp"
|
|
"kgsl:kgsl_a3xx_irq_status"
|
|
"kgsl:kgsl_a4xx_irq_status"
|
|
"kgsl:kgsl_a5xx_irq_status"
|
|
"kgsl:adreno_hw_preempt_comp_to_clear"
|
|
"kgsl:adreno_hw_preempt_token_submit"
|
|
"kgsl:adreno_preempt_trigger"
|
|
"kgsl:adreno_preempt_done"
|
|
"kgsl:adreno_ifpc_count"
|
|
|
|
"sde:sde_perf_set_qos_luts"
|
|
"sde:sde_perf_set_danger_luts"
|
|
"sde:sde_perf_set_ot"
|
|
"sde:sde_perf_update_bus"
|
|
"sde:sde_cmd_release_bw"
|
|
"sde:sde_encoder_underrun"
|
|
"sde:tracing_mark_write"
|
|
"sde:sde_evtlog"
|
|
"sde:sde_perf_crtc_update"
|
|
"sde:sde_perf_calc_crtc"
|
|
|
|
"drm_msm_atomic:msm_atomic_async_commit_finish"
|
|
"drm_msm_atomic:msm_atomic_async_commit_start"
|
|
"drm_msm_atomic:msm_atomic_commit_tail_finish"
|
|
"drm_msm_atomic:msm_atomic_commit_tail_start"
|
|
"drm_msm_atomic:msm_atomic_flush_commit"
|
|
"drm_msm_atomic:msm_atomic_wait_flush_finish"
|
|
"drm_msm_atomic:msm_atomic_wait_flush_start"
|
|
"drm_msm_gpu:msm_gmu_freq_change"
|
|
"drm_msm_gpu:msm_gpu_devfreq_status"
|
|
"drm_msm_gpu:msm_gpu_freq_change"
|
|
"drm_msm_gpu:msm_gpu_preemption_irq"
|
|
"drm_msm_gpu:msm_gpu_preemption_trigger"
|
|
"drm_msm_gpu:msm_gpu_submit_flush"
|
|
"drm_msm_gpu:msm_gpu_submit_retired"
|
|
"drm_msm_gpu:msm_gpu_submit"
|
|
"drm_msm_gpu2:msm_gpu2_preempt_debug"
|
|
"drm_msm_gpu2:msm_gpu2_reset"
|
|
"drm_msm_gpu2:msm_gpu2_submit_flush"
|
|
"drm_msm_gpu2:msm_gpu2_submit_retired"
|
|
"drm_msm_gpu2:msm_gpu2_update_debug"
|
|
"drm_msm_gpu2:msm_gpu2_update_rptr"
|
|
# "drm_msm_gpu:msm_gem_purge_vmaps"
|
|
# "drm_msm_gpu:msm_gem_purge"
|
|
# "drm_msm_gpu:msm_gpu_resume"
|
|
# "drm_msm_gpu:msm_gpu_suspend"
|
|
|
|
)
|
|
|
|
# v4l2 related
|
|
TRACE_EVENTS+=(
|
|
"v4l2:vb2_v4l2_qbuf"
|
|
"v4l2:vb2_v4l2_dqbuf"
|
|
"v4l2:vb2_v4l2_buf_queue"
|
|
"v4l2:vb2_v4l2_buf_done"
|
|
"v4l2:v4l2_qbuf"
|
|
"v4l2:v4l2_dqbuf"
|
|
)
|
|
|
|
# iris video decoder related
|
|
TRACE_EVENTS+=(
|
|
"qcom_iris:iris_vdec_streamon_input"
|
|
"qcom_iris:iris_hfi_response_dequeue"
|
|
"qcom_iris:iris_hfi_response_output"
|
|
"qcom_iris:iris_hfi_response_input"
|
|
"qcom_iris:iris_hfi_queue_buffer"
|
|
)
|
|
|
|
# Battery related
|
|
TRACE_EVENTS+=(
|
|
"batt_iadc:batt_iadc_power_avg_now"
|
|
"batt_iadc:batt_iadc_current_voltage_power_now"
|
|
# "batt_iadc:batt_iadc_power_now"
|
|
# "batt_iadc:batt_iadc_voltage_now"
|
|
# "batt_iadc:batt_iadc_current_now"
|
|
)
|
|
|
|
# SPI related
|
|
TRACE_EVENTS+=(
|
|
"qcom_qspi:qspi_prepare_message"
|
|
"qcom_qspi:qcom_qspi_irq_start"
|
|
"qcom_qspi:qcom_qspi_irq_pre_complete"
|
|
"qcom_qspi:qcom_qspi_dma_sync_single_for_device"
|
|
"qcom_qspi:qcom_qspi_completion_timeout_done"
|
|
)
|
|
|
|
TRACE_EVENTS+=( "qcom_qdsp6:qcom_qdsp6_irq" )
|
|
|
|
TRACE_EVENTS+=(
|
|
"qcom_camss:vfe_isr"
|
|
"qcom_camss:csid_isr"
|
|
"qcom_camss:csid_isr_wm_done"
|
|
"qcom_camss:csid_isr_sof"
|
|
)
|
|
|
|
# These are all our special `gpuvis_print` events!
|
|
TRACE_EVENTS+=(
|
|
"gpuvis:gpuvis_print"
|
|
"gpuvis:gpuvis_print_begin_dtime"
|
|
)
|
|
|
|
# DPU related
|
|
TRACE_EVENTS+=(
|
|
"dpu2:dpu2_underflow"
|
|
"dpu:dpu_crtc_complete_commit"
|
|
"dpu:dpu_crtc_vblank"
|
|
)
|
|
|
|
# Prepend `-e` to the beginning of all trace events
|
|
TRACE_CMD_ARGS=(
|
|
# Set buffer size
|
|
-b "${BUFF_SIZE}"
|
|
|
|
# Set clock to mono_raw
|
|
-C mono_raw
|
|
|
|
# Try to disable the function tracer
|
|
-D
|
|
|
|
# Ignore requested events that don't exist
|
|
-i
|
|
|
|
# Embed data to get absolute time
|
|
--date
|
|
|
|
# List of events to trace
|
|
$(printf " -e %s" "${TRACE_EVENTS[@]}")
|
|
|
|
# Output to this file, using file format 6
|
|
--file-version 6
|
|
-o "${OUTPUT_FILENAME}"
|
|
)
|
|
|
|
# Start trace
|
|
sudo trace-cmd reset
|
|
sudo trace-cmd snapshot -f
|
|
|
|
nohup sudo trace-cmd record "${TRACE_CMD_ARGS[@]}" &
|
|
TRACE_CMD_PID="$!"
|
|
|
|
# If we're running this over SSH, if our connection drops, sigint ourselves
|
|
cleanup() {
|
|
echo "cleanup $1"
|
|
trap - "$1"
|
|
ls -la "${OUTPUT_FILENAME}"
|
|
kill -SIGINT "${TRACE_CMD_PID}"
|
|
}
|
|
trap "cleanup SIGHUP" SIGHUP
|
|
trap "cleanup SIGINT" SIGINT
|
|
|
|
wait "${TRACE_CMD_PID}"
|
|
ls -la "${OUTPUT_FILENAME}"
|
|
|
|
#sudo chown $(id -u):$(id -g) "${OUTPUT_FILENAME}" |