1#!/usr/bin/env python3 2# Copyright (C) 2023 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License a 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16from python.generators.diff_tests.testing import Path, DataPath, Metric 17from python.generators.diff_tests.testing import Csv, Json, TextProto 18from python.generators.diff_tests.testing import DiffTestBlueprint 19from python.generators.diff_tests.testing import TestSuite 20 21 22class GraphicsDrmRelatedFtraceEvents(TestSuite): 23 24 def test_drm_vblank_gpu_track(self): 25 return DiffTestBlueprint( 26 trace=TextProto(r""" 27 packet { 28 ftrace_events { 29 cpu: 0 30 event { 31 timestamp: 6159770881976 32 pid: 0 33 drm_vblank_event { 34 crtc: 0 35 high_prec: 1 36 seq: 3551 37 time: 6159771267407 38 } 39 } 40 } 41 } 42 packet { 43 ftrace_events { 44 cpu: 4 45 event { 46 timestamp: 6159770993376 47 pid: 144 48 drm_vblank_event_delivered { 49 crtc: 0 50 file: 18446743526216291840 51 seq: 3551 52 } 53 } 54 } 55 } 56 """), 57 query=""" 58 SELECT 59 gpu_track.name, 60 ts, 61 dur, 62 slice.name, 63 flat_key, 64 int_value, 65 string_value 66 FROM 67 gpu_track 68 JOIN slice 69 ON slice.track_id = gpu_track.id 70 JOIN args 71 ON slice.arg_set_id = args.arg_set_id 72 ORDER BY ts; 73 """, 74 out=Csv(""" 75 "name","ts","dur","name","flat_key","int_value","string_value" 76 "vblank-0",6159770881976,0,"signal","vblank seqno",3551,"[NULL]" 77 "vblank-0",6159770993376,0,"deliver","vblank seqno",3551,"[NULL]" 78 """)) 79 80 def test_drm_sched_gpu_track(self): 81 return DiffTestBlueprint( 82 trace=Path('drm_sched.textproto'), 83 query=""" 84 SELECT 85 gpu_track.name, 86 ts, 87 dur, 88 slice.name, 89 flat_key, 90 int_value, 91 string_value 92 FROM 93 gpu_track 94 JOIN slice 95 ON slice.track_id = gpu_track.id 96 JOIN args 97 ON slice.arg_set_id = args.arg_set_id 98 ORDER BY ts; 99 """, 100 out=Csv(""" 101 "name","ts","dur","name","flat_key","int_value","string_value" 102 "sched-ring0",9246165349383,4729073,"job","gpu sched job",13481,"[NULL]" 103 "sched-ring0",9246170078456,3941571,"job","gpu sched job",13482,"[NULL]" 104 "sched-ring0",9246174020027,25156,"job","gpu sched job",13483,"[NULL]" 105 "sched-ring0",9246181933273,4726312,"job","gpu sched job",13484,"[NULL]" 106 """)) 107 108 def test_drm_sched_thread_track(self): 109 return DiffTestBlueprint( 110 trace=Path('drm_sched.textproto'), 111 query=""" 112 SELECT 113 utid, 114 ts, 115 dur, 116 slice.name, 117 flat_key, 118 int_value, 119 string_value 120 FROM 121 thread_track 122 JOIN slice 123 ON slice.track_id = thread_track.id 124 JOIN args 125 ON slice.arg_set_id = args.arg_set_id 126 ORDER BY ts; 127 """, 128 out=Csv(""" 129 "utid","ts","dur","name","flat_key","int_value","string_value" 130 1,9246165326050,0,"drm_sched_job","gpu sched ring","[NULL]","ring0" 131 1,9246165326050,0,"drm_sched_job","gpu sched job",13481,"[NULL]" 132 3,9246166957616,0,"drm_sched_job","gpu sched ring","[NULL]","ring0" 133 3,9246166957616,0,"drm_sched_job","gpu sched job",13482,"[NULL]" 134 3,9246167272512,0,"drm_sched_job","gpu sched ring","[NULL]","ring0" 135 3,9246167272512,0,"drm_sched_job","gpu sched job",13483,"[NULL]" 136 1,9246181907439,0,"drm_sched_job","gpu sched ring","[NULL]","ring0" 137 1,9246181907439,0,"drm_sched_job","gpu sched job",13484,"[NULL]" 138 """)) 139 140 def test_drm_dma_fence_gpu_track(self): 141 return DiffTestBlueprint( 142 trace=Path('drm_dma_fence.textproto'), 143 query=""" 144 SELECT 145 gpu_track.name, 146 ts, 147 dur, 148 slice.name, 149 flat_key, 150 int_value, 151 string_value 152 FROM 153 gpu_track 154 JOIN slice 155 ON slice.track_id = gpu_track.id 156 JOIN args 157 ON slice.arg_set_id = args.arg_set_id 158 ORDER BY ts; 159 """, 160 out=Csv(""" 161 "name","ts","dur","name","flat_key","int_value","string_value" 162 "fence-gpu-ring-0-1",11303602488073,12813,"fence","fence seqno",16665,"[NULL]" 163 "fence-gpu-ring-0-1",11303602500886,4805626,"fence","fence seqno",16665,"[NULL]" 164 "fence-gpu-ring-0-1",11303607306512,3850783,"fence","fence seqno",16666,"[NULL]" 165 "fence-ring0-9",11303702681699,4868387,"fence","fence seqno",5065,"[NULL]" 166 """)) 167 168 def test_drm_dma_fence_thread_track(self): 169 return DiffTestBlueprint( 170 trace=Path('drm_dma_fence.textproto'), 171 query=""" 172 SELECT 173 utid, 174 ts, 175 dur, 176 slice.name, 177 flat_key, 178 int_value, 179 string_value 180 FROM 181 thread_track 182 JOIN slice 183 ON slice.track_id = thread_track.id 184 JOIN args 185 ON slice.arg_set_id = args.arg_set_id 186 ORDER BY ts; 187 """, 188 out=Csv(""" 189 "utid","ts","dur","name","flat_key","int_value","string_value" 190 3,11303702851231,4867658,"dma_fence_wait","fence context",9,"[NULL]" 191 3,11303702851231,4867658,"dma_fence_wait","fence seqno",5065,"[NULL]" 192 """)) 193