1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# This script filters the PERF traces based on the specified parameters and 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# measures the rate of the filtered traces. This can be used to measure 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# video encode/decode/preview frame rates. 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# Fields in a PERF CSV line: 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $1 - time stamp 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $2 - PID 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $3 - address 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $4 - component 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $5-$10 - domains (AD, VD, ID, AE, VE, IE) 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $11 - component type 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $12 - operation 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $13-... operation specific arguments: 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# Buffer: 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $13 - sending|received|xfering 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $14 - frame|buffer 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $15 - from 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $16 - to 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $17 - size 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $18 - address 1 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $19 - address 2 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# Boundary: 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $13 - hex 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# $14 - textual 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# initialize variables 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinBEGIN { 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FS = ","; # reading a CSV file 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin what = what ? what : "frame"; # what buffers are we looking at 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin how = how ? how : "sending"; # what is the operation 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin to = to ? to : ""; # who are the recipients of these buffers 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin from = from ? from : ""; # who are the senders of these buffers 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # boundary - only log buffer traces in the steady state of this component 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin boundary = boundary ? boundary : "****"; 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin min = (size != "") ? (size) : (min != "") ? (min) : 1; # min size of buffers to watch 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin max = (size != "") ? (size) : (max != "") ? (max) : 5e9; # max size of buffers to watch 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # Additional variables not set: 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # debug - debug flag 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # after - only measure frames after the specified # 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # who - who is logging these buffer transfers 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # get variable assignments from ARGV 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=1; i<ARGC; i++) { 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arg = ARGV[i]; 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (gsub("^what=", "",arg)) { what = arg } 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^to=", "",arg)) { to = arg } 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^from=", "",arg)) { from = arg } 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^how=", "",arg)) { how = arg } 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^who=", "",arg)) { who = arg } 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^boundary=","",arg)) { boundary = arg } 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^after=", "",arg)) { after = arg } 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^debug=", "",arg)) { debug = arg } 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^size=", "",arg)) { min = max = (arg) } 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^min=", "",arg)) { min = (arg) } 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^max=", "",arg)) { max = (arg) } 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else continue; 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delete ARGV[i]; 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!who) { 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "Must specify component to observe"; 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin exit 1; 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # we are using the component thread as boundary by default 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (boundary == "****") { 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (substr(who, 0, 3) == "VP_" || 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin substr(who, 0, 3) == "VD_" || 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin substr(who, 0, 3) == "VE_" || 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin substr(who, 0, 3) == "CAM") { 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin boundary = substr(who, 0, 3) "T"; 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin after++; # we always have to after the 1st time stamp to get a time delta 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin skip = after + 1; 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # start counting unless boundary is set, in which case 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count = boundary ? skip : 0; 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # initialize counters 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin x = xx = N = 0; 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin x_no_pause = xx_no_pause = N_no_pause = 0; 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug > 1) { 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "who = ", who 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "how = ", how 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "what = ", what 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "from = ", (from ? from : "UNDEFINED") 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "to = ", (to ? to : "UNDEFINED") 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "min = ", min 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "max = ", max 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # convert to decimal 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin min = min + 0 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin max = max + 0 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# Check for non-CSV trace file 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/^</ { 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "ERROR: non-CSV file encountered. Please use csv = 1 in ./perf.ini"; 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin exit; 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# Count frames 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# frames start with a number, with operation "Buffer" 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/^[0-9]/ && $4 == who && $12 == "Buffer" && 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# how and what has to match 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# if from or to are specified they also have to match 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin$13 == how && $14 == what && (!from || ($15 == from)) && (!to || ($16 == to)) && 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# size has to fall in the range specified, we have to add 0 because of a 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# rare rounding issue in AWK when comparing hex and decimal numbers 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin((0 + $17) >= min) && 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin((0 + $17) <= max) { 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # debug 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug) { print $0 } 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # increase the count from the boundary 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (count == after) { 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delta = $1 - last; 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (delta >= 2) { 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "Warning: Found a pause of", delta, "seconds"; 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin x_no_pause += delta; 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xx_no_pause += delta * delta; 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin N_no_pause++; 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin x += delta; 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xx += delta * delta; 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin N++; 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (count < after) { count++; } 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin last = $1; 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# Check boundaries 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/Steady/ && $12 == "Boundary" && $4 == boundary { 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # debug 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug) { print $0 } 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # start counting if starting steady state, skip counting if ending steady 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # state 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count = /started/ ? 0 : skip; 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEND { 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # calculate inverse (1/x) average and variance 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (N) { 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin x /= N; 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xx /= N; 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin s = xx ? (x * x / xx) : 0; 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin result = 1/x " fps (s=" s ") (from " N " data points)"; 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "Rate is", result; 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (N != N_no_pause) { 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (N_no_pause) { 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin x = x_no_pause / N_no_pause; 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xx = xx_no_pause / N_no_pause; 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin s = xx ? (x * x / xx) : 1; 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin result = 1/x " fps (s=" s ") (from " N " data points)"; 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "(Adjusted rate without pauses is", result, ")"; 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "(Not enough data to calculate adjusted rate without pauses)"; 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "Error: Not enough data to calculate rate"; 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 180