1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details. 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_CUSTOMIZABLE__ 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define __PERF_RT_C__ 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include "perf_config.h" 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include "perf.h" 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include "perf_rt.h" 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include "math.h" 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================ 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DEBUG RT METHODS 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin============================================================================ */ 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MAX_RATES_TRACKED 10 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MAX_GRANULARITY 15 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MIN_FRAMES_FOR_RATE 10 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic int uptime_started = 0; 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void init_delay(PERF_RTdata_delay *dDelay, long n0) 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->xx = dDelay->x = 0; 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->n = n0; 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_RT_Private * 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_RT_create(PERF_Private *perf, PERF_Config *config, 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_MODULETYPE eModule) 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *fOutFile = NULL; 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FILE *fOut = NULL; 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* check if we support this component */ 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (perf->ulID != PERF_FOURS("CAM_") && perf->ulID != PERF_FOURS("CAMT") && 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin perf->ulID != PERF_FOURS("VP__") && perf->ulID != PERF_FOURS("VP_T") && 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin perf->ulID != PERF_FOURS("VD__") && perf->ulID != PERF_FOURS("VD_T") && 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin perf->ulID != PERF_FOURS("VE__") && perf->ulID != PERF_FOURS("VE_T")) 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if we don't support this component, we don't create the real-time 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin interface */ 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return (NULL); 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_RT_Private *me = 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin perf->cip.pRT = malloc(sizeof(PERF_RT_Private)); 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me) 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int succeed = 1; 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* we track steady state on the component thread only */ 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->needSteadyState = (perf->ulID & 0xff) == 'T'; 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->steadyState = 0; 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* allocate rate tracking structures */ 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->maxDRate = MAX_RATES_TRACKED; 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate = malloc(sizeof(PERF_RTdata_rate) * me->maxDRate); 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin succeed = succeed && me->dRate; 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->decoder = (perf->ulID == PERF_FOURS("VD__") || perf->ulID == PERF_FOURS("VD_T")); 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->encoder = (perf->ulID == PERF_FOURS("VE__") || perf->ulID == PERF_FOURS("VE_T")); 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->nDRate = 0; 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* allocate shot-to-shot tracking structures */ 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (succeed && perf->ulID == PERF_FOURS("CAMT")) 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS = malloc(sizeof(PERF_RTdata_sts)); 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin succeed = succeed && me->dSTS; 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS) 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin init_delay(&me->dSTS->dBurst, -1); /* no first timestamp yet */ 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin init_delay(&me->dSTS->dABurst, 0); 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin init_delay(&me->dSTS->dBurst2, 0); 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin init_delay(&me->dSTS->dABurst2, 0); 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin init_delay(&me->dSTS->dSingle, -1); /* no first timestamp yet */ 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->size_max = me->dSTS->size_min = me->dSTS->capturing = 0; 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS = NULL; 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* allocate uptime tracking structures */ 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* :NOTE: for now we restrict creations of uptime to steady state 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin only */ 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (succeed && !uptime_started && me->needSteadyState && 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !(perf->uMode & PERF_Mode_Replay)) 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime = malloc(sizeof(PERF_RTdata_uptime)); 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin succeed = succeed && me->dUptime; 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (succeed) 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin uptime_started = 1; 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->measuring = 0; 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->last_idletime = me->dUptime->last_uptime = 0; 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->start_idletime = me->dUptime->start_uptime = 0; 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->success = 1; 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->xx = me->dUptime->x = me->dUptime->n = 0; 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_GET(me->dUptime->last_reporting); 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime = NULL; 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* configuration */ 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->summary = config->rt_summary != 0; 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->debug = config->rt_debug & 0x1FF; 134b65f253fdc60f6208a54911bee793d225f23cdf8James Dong me->detailed = (config->rt_detailed > 2) ? 2 : (int) config->rt_detailed; 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->granularity = (config->rt_granularity < 1) ? 1 : 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (config->rt_granularity > MAX_GRANULARITY) ? 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MAX_GRANULARITY : (long) config->rt_granularity; 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->granularity *= 1000000; /* convert to microsecs */ 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_COPY(me->first_time, perf->time); 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if we do not care about detailed statistics, only report significant 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin statistics for each component */ 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (succeed && !me->detailed) 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* VP_T - display rate */ 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (perf->ulID == PERF_FOURS("VP_T")) 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->only_moduleandflags = PERF_FlagSending | PERF_FlagFrame | PERF_ModuleHardware; 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* VD_T - decode rate */ 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (perf->ulID == PERF_FOURS("VD_T")) 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->only_moduleandflags = PERF_FlagSending | PERF_FlagFrame | PERF_ModuleLLMM; 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* VE_T - encode rate */ 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (perf->ulID == PERF_FOURS("VE_T")) 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->only_moduleandflags = PERF_FlagSending | PERF_FlagFrame | PERF_ModuleLLMM; 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* CAMT - capture rate */ 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (perf->ulID == PERF_FOURS("CAMT")) 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->only_moduleandflags = PERF_FlagReceived | PERF_FlagFrame | PERF_ModuleHardware; 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* otherwise, we don't care about rates */ 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(me->dRate); 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate = NULL; 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->maxDRate = 0; 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* set up fRt file pointers */ 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (config->rt_file && succeed) 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* open log file unless STDOUT or STDERR is specified */ 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!strcasecmp(config->rt_file, "STDOUT")) fOut = stdout; 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (!strcasecmp(config->rt_file, "STDERR")) fOut = stderr; 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* expand file name with PID and name */ 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fOutFile = (char *) malloc (strlen(config->rt_file) + 32); 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (fOutFile) 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sprintf(fOutFile, "%s-%05lu-%08lx-%c%c%c%c.log", 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin config->rt_file, perf->ulPID, (unsigned long) perf, 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOUR_CHARS(perf->ulID)); 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fOut = fopen(fOutFile, "at"); 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* free new file name */ 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(fOutFile); 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fOutFile = NULL; 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if could not open output, set it to STDOUT */ 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!fOut) fOut = stderr; 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->fRt = fOut; 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if we had allocation failures, free resources and return NULL */ 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (succeed) 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin perf->uMode |= PERF_Mode_RealTime; 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_RT_done(perf); 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me = NULL; 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return(me); 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid PERF_RT_done(PERF_Private *perf) 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_RT_Private *me = perf->cip.pRT; 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* close debug file unless stdout or stderr */ 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->fRt && me->fRt != stdout && 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->fRt != stderr) fclose(me->fRt); 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* free allocated structures */ 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(me->dRate); me->dRate = NULL; 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(me->dUptime); me->dUptime = NULL; 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(me->dSTS); me->dSTS = NULL; 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* free private structure */ 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin free(me); 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin perf->cip.pRT = NULL; 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void get_uptime(double *uptime, double *idletime) 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FILE *fUptime = fopen("/proc/uptime", "r"); 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (fUptime) 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fscanf(fUptime, "%lg %lg", uptime, idletime); 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fclose (fUptime); 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *uptime = *idletime = 0.; 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void start_stop_uptime(PERF_RTdata_uptime *dUptime, int start) 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double uptime, idletime; 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (dUptime && dUptime->measuring != start) 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* add uptime since last time */ 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin get_uptime(&uptime, &idletime); 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if successful */ 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (dUptime->success && uptime && idletime) 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dUptime->start_idletime = idletime - dUptime->start_idletime; 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dUptime->start_uptime = uptime - dUptime->start_uptime; 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dUptime->last_idletime = idletime - dUptime->last_idletime; 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dUptime->last_uptime = uptime - dUptime->last_uptime; 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dUptime->start_idletime = dUptime->start_uptime = dUptime->success = 0; 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dUptime->last_idletime = dUptime->last_uptime = 0; 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dUptime->measuring = start; 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinextern char const * const PERF_ModuleTypes[]; 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindouble my_sqrt(double a) 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double b = (a + 1) / 2; 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin b = (b + a/b) / 2; 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin b = (b + a/b) / 2; 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin b = (b + a/b) / 2; 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin b = (b + a/b) / 2; 286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin b = (b + a/b) / 2; 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin b = (b + a/b) / 2; 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return (b + a/b) / 2; 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic const char *sendRecvTxt[] = { 292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "received", "sending", "requesting", "sent", 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }; 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void print_rate_info(FILE *fOut, 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ID, PERF_MODULETYPE modulesAndFlags, 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long size, long n) 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long module1 = modulesAndFlags & PERF_ModuleMask; 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long module2 = (modulesAndFlags >> PERF_ModuleBits) & PERF_ModuleMask; 301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int xfering = PERF_IsXfering(modulesAndFlags); 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int sendIx = (PERF_GetSendRecv(modulesAndFlags) >> 28) & 3; 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int sending = PERF_IsSending(modulesAndFlags); 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int frame = PERF_IsFrame (modulesAndFlags); 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(fOut, "%c%c%c%c %s %ld+ %s[0x%lX]%s%s%s%s", 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOUR_CHARS(ID), 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xfering ? "xfering" : sendRecvTxt[sendIx], 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin n, 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin frame ? "frames" : "buffers", 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size, 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (xfering || !sending) ? " from " : " to ", 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (module1 < PERF_ModuleMax ? PERF_ModuleTypes[module1] : "INVALID"), 314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xfering ? " to " : "", 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xfering ? (module2 < PERF_ModuleMax ? PERF_ModuleTypes[module2] : "INVALID") : ""); 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid count_temporal_rate(unsigned long ID, PERF_RT_Private *me, PERF_RTdata_rate *dRate) 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get the temporal rate */ 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double x = (dRate->tn ? (dRate->tx ? ((1e6 * dRate->tn) / dRate->tx) : 1e6) : 0.); 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug) 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: [%ld] ", TIME_DELTA(dRate->last_reporting, me->first_time)/1000000); 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print_rate_info(me->fRt, 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ID, dRate->modulesAndFlags, dRate->size, dRate->tn); 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* calculate smoothness */ 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double s = dRate->txx ? (dRate->tx * (double) dRate->tx / dRate->txx / dRate->tn) : 1; 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, ": %.3g fps (s=%.3g)\n", x, s); 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* calculate the average of the temporal rate */ 335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dRate->axx += x * x; 336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dRate->ax += x; 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dRate->an ++; 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dRate->txx = dRate->tx = dRate->tn = 0; 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void delay_add(PERF_RTdata_delay *dDelay, unsigned long delta) 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->x += delta; 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->xx += delta * (double) delta; 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->n ++; 347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void delay_delta(PERF_RTdata_delay *dDelay, PERF_Private *perf) 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (dDelay->n < 0) 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->n++; 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delay_add(dDelay, TIME_DELTA(perf->time, dDelay->last_timestamp)); 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_COPY(dDelay->last_timestamp, perf->time); 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void count_delay(PERF_RT_Private *me, char *tag, PERF_RTdata_delay *dDelay, long n0) 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: %s[0x%lX]: ", tag, me->dSTS->size_min); 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (dDelay->n > 0) 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double x = 1e-6 * dDelay->x / dDelay->n; 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double xx = 1e-12 * dDelay->xx / dDelay->n; 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xx = my_sqrt(xx - x * x); 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (dDelay->n > 1) 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "%.3g +- %.3g s (%ld samples)\n", 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin x, xx, dDelay->n); 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "%.3g\n", x); 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "UNABLE TO CALCULATE\n"); 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->n = n0; 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dDelay->xx = dDelay->x = 0; 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __rt_Boundary(PERF_Private *perf, PERF_BOUNDARYTYPE eBoundary) 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get real-time private structure */ 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_RT_Private *me = perf->cip.pRT; 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* check steady state if we need it */ 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->needSteadyState) 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eBoundary == (PERF_BoundaryStart | PERF_BoundarySteadyState)) 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!me->steadyState) 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* continue uptime measurement */ 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin start_stop_uptime(me->dUptime, 1); 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* for each rate, reset skip count as well as tn0 */ 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < me->nDRate; i++) 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].txx = me->dRate[i].tx = me->dRate[i].tn = me->dRate[i].tn0 = 0; 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].skip = 0; 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->steadyState = 1; 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (eBoundary == (PERF_BoundaryComplete | PERF_BoundarySteadyState)) 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->steadyState) 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* stop uptime measurement */ 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin start_stop_uptime(me->dUptime, 0); 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* complete any temporary rate measurements */ 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < me->nDRate; i++) 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* only if we had any buffers in this cycle */ 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dRate[i].tn0 >= MIN_FRAMES_FOR_RATE || 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (me->dRate[i].tn && me->debug & 4)) 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count_temporal_rate(perf->ulID, me, me->dRate + i); 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->steadyState = 0; 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if we do not check steady state, we still complete on cleanup */ 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eBoundary == (PERF_BoundaryStart | PERF_BoundaryCleanup)) 443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* stop measurements */ 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin start_stop_uptime(me->dUptime, 0); 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __rt_Buffer(PERF_Private *perf, 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulAddress1, 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulAddress2, 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulSize, 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_MODULETYPE eModuleAndFlags) 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get real-time private structure */ 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_RT_Private *me = perf->cip.pRT; 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* see if we care about this buffer in the rate calculation */ 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long module = eModuleAndFlags & PERF_ModuleMask; 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* ------------------------ RATE METRICS ------------------------ */ 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* change HLMM to LLMM for detailed = 0 and 1 */ 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->detailed < 2 && module == PERF_ModuleHLMM) 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin module = PERF_ModuleLLMM; 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int rate = (me->detailed == 2) || 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (me->detailed == 0 && 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (eModuleAndFlags == me->only_moduleandflags && ulSize >= 8)) || 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (me->detailed == 1 && 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((module == PERF_ModuleHardware || module == PERF_ModuleLLMM))); 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (rate && me->dRate && (!me->needSteadyState || me->steadyState)) 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* change encoded filled frame sizes to 0xBEEFED, as they tend to 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin have varying sizes and thus not be counted */ 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long sending = PERF_GetXferSendRecv(eModuleAndFlags); 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long size = ulSize; 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((me->encoder || me->decoder) && !PERF_IsXfering(sending)) 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* reverse sending direction to common layer or socket node */ 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (module >= PERF_ModuleCommonLayer && 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin module <= PERF_ModuleSocketNode) 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sending ^= PERF_FlagSending; 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((me->encoder && (sending == PERF_FlagSending)) || 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (me->decoder && (sending == PERF_FlagReceived))) 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size = size ? 0xBEEFED : 0; 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* see if we are tracking this buffer size */ 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i, j = -1; /* j is one of the lest used indexes */ 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < me->nDRate; i++) 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dRate[i].modulesAndFlags == eModuleAndFlags && 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].size == size) break; 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (j < 0 || me->dRate[i].n < me->dRate[j].n) 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = i; 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if we are not yet tracking this buffer, see if we can track 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin it. */ 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (i == me->nDRate) 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* we have space to track it */ 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (i < me->maxDRate) 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->nDRate++; 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if we cannot replace another rate, we don't track it */ 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (j < 0 || me->dRate[j].n < 2) 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = me->maxDRate; 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = j; 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* start tracking */ 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (i < me->maxDRate) 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].modulesAndFlags = eModuleAndFlags; 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].size = size; 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].xx = me->dRate[i].x = me->dRate[i].n = 0; 535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].txx = me->dRate[i].tx = me->dRate[i].tn = me->dRate[i].tn0 = 0; 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].axx = me->dRate[i].ax = me->dRate[i].an = 0; 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].skip = me->needSteadyState ? 0 : 4; 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_COPY(me->dRate[i].last_timestamp, perf->time); 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_COPY(me->dRate[i].last_reporting, perf->time); 540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dRate[i].skip == 0) 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* see if we passed our granularity */ 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int steps = TIME_DELTA(perf->time, me->dRate[i].last_reporting); 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (steps >= me->granularity) 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin steps /= me->granularity; 551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* unless debug bit 4 is set, ignore temporal statistics if 553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin we passed the last time by more than a second, and less than 554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin the minimul frames were processed in this burst so far, and 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin the last fps was less than 1. */ 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(me->debug & 4) && 557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (me->dRate[i].tn0 < MIN_FRAMES_FOR_RATE) && 558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (me->dRate[i].tn < me->granularity * steps)) 559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug & 256) 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: [%ld] IGNORED (steps=%d, tn0=%ld, tn=%ld)\n", 563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_DELTA(me->dRate[i].last_reporting, me->first_time)/1000000, 564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin steps, me->dRate[i].tn0, me->dRate[i].tn); 565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].txx = me->dRate[i].tx = me->dRate[i].tn = me->dRate[i].tn0 = 0; 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_INCREASE(me->dRate[i].last_reporting, me->granularity * steps); 569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin steps = 0; 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (me->debug & 256) 572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: [%ld] not-ignored (steps=%d, tn0=%ld, tn=%ld)\n", 574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_DELTA(me->dRate[i].last_reporting, me->first_time)/1000000, 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin steps, me->dRate[i].tn0, me->dRate[i].tn); 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* see if we surpassed our granularity. if yes, calculate 579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin temporal statistics */ 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (steps) 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* count temporal rate */ 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count_temporal_rate(perf->ulID, me, me->dRate + i); 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_INCREASE(me->dRate[i].last_reporting, me->granularity); 586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin steps--; 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* rate is */ 591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long delta = TIME_DELTA(perf->time, me->dRate[i].last_timestamp); 592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].x += delta; 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].tx += delta; 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].xx += delta * (double) delta; 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].txx += delta * (double) delta; 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].n ++; 597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].tn ++; 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].tn0 ++; 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].skip--; 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dRate[i].skip == 0) 604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_COPY(me->dRate[i].last_reporting, perf->time); 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].txx = me->dRate[i].tx = me->dRate[i].tn = 0; 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_COPY(me->dRate[i].last_timestamp, perf->time); 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* ------------------------ SHOT-TO-SHOT METRICS ------------------------ */ 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS) 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eModuleAndFlags == (PERF_FlagSending | PERF_FlagFrame | PERF_ModuleHardware)) 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* queueing buffers to camera */ 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* see if resolution has changed */ 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ulSize < me->dSTS->size_min || 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulSize > me->dSTS->size_max) 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* report burst rate if we have any */ 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug) 627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dBurst2.n > 0) 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count_delay(me, "Modified burst shot-to-shot", &me->dSTS->dBurst2, 0); 631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dBurst.n > 0) 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count_delay(me, "Raw burst shot-to-shot", &me->dSTS->dBurst, -1); 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->dBurst.n = -1; 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->dBurst2.n = 0; 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* set new size */ 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->size_min = ulSize > 2048 ? ulSize - 2048 : 0; 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->size_max = ulSize; 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if more than D1-PAL, we assume it is an image, not a preview */ 646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ulSize > 0x119000) 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* new burst mode start */ 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->capturing = 1; 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* preview start */ 654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->capturing = 0; 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (eModuleAndFlags == (PERF_FlagReceived | PERF_FlagFrame | PERF_ModuleHardware)) 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* gotten buffers from camera */ 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->capturing && 662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulSize >= me->dSTS->size_min && 663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ulSize <= me->dSTS->size_max) 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* see if we have a capture already (we ignore the first) to 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count into the modified capture */ 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dBurst.n > 1) 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* count last time delta */ 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dBurst.n > 2) 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delay_add(&me->dSTS->dBurst2, me->dSTS->last_burst); 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delay_add(&me->dSTS->dABurst2, me->dSTS->last_burst); 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug) 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: [%ld] Modified burst shot-to-shot[0x%lX]: %.3g s\n", 677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->dBurst2.n, me->dSTS->size_min, 1e-6 * me->dSTS->last_burst); 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->last_burst = TIME_DELTA(perf->time, me->dSTS->dBurst.last_timestamp); 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (me->dSTS->dBurst.n < 0) 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if this is the first shot in the burst sequence */ 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* calculate single shot-to-shot delay */ 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dSingle.n >= 0) 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug) 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: [#%ld] Single shot-to-shot[0x%lX]: %.3g s\n", 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->dSingle.n + 1, me->dSTS->size_min, 1e-6 * TIME_DELTA(perf->time, me->dSTS->dSingle.last_timestamp)); 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delay_delta(&me->dSTS->dSingle, perf); 694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dBurst.n >= 0) 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug) 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: [#%ld] Raw burst shot-to-shot[0x%lX]: %.3g s\n", 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->dBurst.n + 1, me->dSTS->size_min, 1e-6 * TIME_DELTA(perf->time, me->dSTS->dBurst.last_timestamp)); 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delay_add(&me->dSTS->dABurst, TIME_DELTA(perf->time, me->dSTS->dBurst.last_timestamp)); 705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delay_delta(&me->dSTS->dBurst, perf); 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* keep last captured image time stamp for single shot-to-shot */ 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_COPY(me->dSTS->dSingle.last_timestamp, perf->time); 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dSingle.n < 0) 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dSTS->dSingle.n = 0; /* captured first time stamp */ 713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* ------------------------ UPTIME METRICS ------------------------ */ 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 && me->dUptime && me->dUptime->measuring) 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* see if we passed our granularity. if yes, calculate uptime */ 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int steps = TIME_DELTA(perf->time, me->dUptime->last_reporting); 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (steps >= me->granularity) 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin steps /= me->granularity; 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double uptime, idletime, load = 0; 728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* calculate MHz load */ 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin get_uptime(&uptime, &idletime); 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (uptime > 0 && me->dUptime->success) 732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->last_idletime = idletime - me->dUptime->last_idletime; 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->last_uptime = uptime - me->dUptime->last_uptime; 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dUptime->last_uptime > 0) 736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin load = 100. * ((me->dUptime->last_uptime - me->dUptime->last_idletime) / 738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->last_uptime); 739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->n += steps; 741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->x += load * steps; 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->xx += load * load * steps; 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_INCREASE(me->dUptime->last_reporting, steps * me->granularity); 747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (uptime > 0 && me->dUptime->success) 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->last_uptime = uptime; 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->last_idletime = idletime; 752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug) 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: [%ld] ARM CPU-load is %.3g%%\n", 755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TIME_DELTA(perf->time, me->first_time)/1000000, 756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin load); 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->success = 0; 762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __rt_Command(PERF_Private *perf, 768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulCommand, 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulArgument, 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_MODULETYPE eModule) 771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get real-time private structure */ 773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* PERF_RT_Private *me = perf->cip.pRT; */ 774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* there is nothing to do at this point */ 776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __rt_Log(PERF_Private *perf, 779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulData1, unsigned long ulData2, 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulData3) 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get real-time private structure */ 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* PERF_RT_Private *me = perf->cip.pRT; */ 784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* there is nothing to do at this point */ 786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __rt_SyncAV(PERF_Private *perf, 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin float pfTimeAudio, 790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin float pfTimeVideo, 791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SYNCOPTYPE eSyncOperation) 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get real-time private structure */ 794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* PERF_RT_Private *me = perf->cip.pRT; */ 795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* there is nothing to do at this point */ 797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __rt_ThreadCreated(PERF_Private *perf, 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulThreadID, 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned long ulThreadName) 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get real-time private structure */ 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* PERF_RT_Private *me = perf->cip.pRT; */ 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* there is nothing to do at this point. Perhaps we can enable uptime if 807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin we still have not created it and it is an audio thread. */ 808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid __rt_Done(PERF_Private *perf) 811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get real-time private structure */ 813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_RT_Private *me = perf->cip.pRT; 814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* print summaries if required */ 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->summary) 817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* uptime summary */ 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dUptime) 820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get last uptime */ 822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin start_stop_uptime(me->dUptime, 0); 823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: ARM CPU-load for%s %c%c%c%c component: ", 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->needSteadyState ? " steady state of" : "", 826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOUR_CHARS(perf->ulID)); 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dUptime->success && me->dUptime->start_uptime) 829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double load = (100. * (me->dUptime->start_uptime - 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->start_idletime) / 832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dUptime->start_uptime); 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dUptime->n) 834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double x = me->dUptime->x / me->dUptime->n; 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double xx = me->dUptime->xx / me->dUptime->n; 837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xx = my_sqrt(xx - x * x); 838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug & 2) 839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, ": %.3g +- %.3g%%\n" 841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "(temporal difference is: %.3g)\n", 842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin load, xx, x - load); 843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, ": %.3g +- %.3g%%\n", 847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin load, xx); 848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "%.3g%%\n", load); 853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "FAILED TO CALCULATE\n"); 858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* rate summary */ 862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->nDRate) 863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < me->nDRate; i++) 866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dRate[i].n >= MIN_FRAMES_FOR_RATE && 868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((me->debug & 4) || me->dRate[i].tn0 >= MIN_FRAMES_FOR_RATE)) 869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double x = me->dRate[i].x * 1e-6 / me->dRate[i].n; 872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double s = (me->dRate[i].xx ? 874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (me->dRate[i].x * (double) me->dRate[i].x / 875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].xx / me->dRate[i].n) : 1); 876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, "rtPERF: "); 878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print_rate_info(me->fRt, 879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin perf->ulID, me->dRate[i].modulesAndFlags, 880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin me->dRate[i].size, me->dRate[i].n); 881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (x > 0) 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dRate[i].an) 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double x2 = me->dRate[i].ax / me->dRate[i].an; 886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin double xx = me->dRate[i].axx / me->dRate[i].an; 887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin xx = my_sqrt(xx - x2 * x2); 888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->debug & 2) 889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, ": %.3g +- %.3g fps (s=%.3g)\n" 891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "(temporal difference is: %.3g)\n", 892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1/x, xx, s, x2-1/x); 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, ": %.3g +- %.3g fps (s=%.3g)\n", 897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1/x, xx, s); 898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, ": %.3g fps (s=%.3g)\n", 1/x, s); 903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(me->fRt, ": FAILED TO CALCULATE\n"); 908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* shot-to-shot summary */ 914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS) 915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dABurst2.n > 0) 917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count_delay(me, "Avg. modified burst shot-to-shot", &me->dSTS->dABurst2, 0); 919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dABurst.n > 0) 921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count_delay(me, "Avg. raw burst shot-to-shot", &me->dSTS->dABurst, 0); 923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (me->dSTS->dSingle.n > 0) 925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin count_delay(me, "Avg. single shot-to-shot", &me->dSTS->dSingle, -1); 927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 934