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#ifndef __PERF_RT_H
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_RT_H
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   DEBUG STRUCTURES
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin============================================================================ */
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PERF_RTdata_uptime
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* data needed for uptime calculations */
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    double start_uptime;
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    double start_idletime;
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    double last_uptime;
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    double last_idletime;
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    measuring;
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    success;
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* statistics */
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    long   n;
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    double x, xx;
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* real-time data */
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_STRUCT last_reporting;
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_RTdata_uptime;
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PERF_RTdata_rate
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* rate parameters */
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_MODULETYPE modulesAndFlags;
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long   size;
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* data needed for frame rate calculations */
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_STRUCT last_timestamp;
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int skip;
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* statistics:
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        n, x, xx: whole lifecycle
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        tn, tx, txx: temporal statistics (for grandularity)
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        tn0: tn in the last temporal statistics phase (since the last executing phase)
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             if frame rate is less than 0.5fps and tn0 is less than 10 in the last phase,
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             we ignore and do not print the frames unless debug & 4 is set.
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        an, ax, axx: average temporal statistics - yields stdev */
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    long   n, tn, tn0, an;
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long x, tx;
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    double xx, txx, ax, axx;
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* real-time data */
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_STRUCT last_reporting;
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_RTdata_rate;
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PERF_RTdata_delay
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* delay parameters */
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* NONE for now */
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* data needed for delay calculations */
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_STRUCT last_timestamp;
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* statistics: this is real-time in nature, so no "buffering" is performed.
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       therefore, no need for temporal statistics
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    */
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    long n;
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long x;
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    double xx;
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_RTdata_delay;
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PERF_RTdata_sts
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int capturing;
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long size_min, size_max;
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long last_burst;             /* last burst so we don't count the
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             last delay of each raw burst into
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             the modified number */
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_RTdata_delay dSingle;            /* single shot-to-shot */
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_RTdata_delay dBurst, dABurst;    /* raw burst, average of all bursts */
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_RTdata_delay dBurst2, dABurst2;  /* modified burst, average */
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_RTdata_sts;
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PERF_RT_Private
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* configuration */
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    FILE *fRt;                       /* file to real-time output (Buffer) */
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    long   granularity;
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    summary;
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    detailed;
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    debug;                    /* bit: 1 & any - print temporal stats
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             2       - print difference between temporal average and true average
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             4       - use all frames for rates, not just after 10 frames
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     */
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* state data for reporting */
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_STRUCT first_time;
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* uptime data */
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct PERF_RTdata_uptime *dUptime; /* uptime data */
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* rate data */
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    steadyState;              /* are we in steady state? */
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    needSteadyState;          /* do we need steady state? */
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct PERF_RTdata_rate *dRate;  /* rate data */
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    nDRate;                   /* number of dRate structures */
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    maxDRate;                 /* maximum number of dRates */
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    encoder;                  /* encoder, sending arbitrary sizes */
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int    decoder;                  /* decoder, receiving arbitrary sizes */
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long only_moduleandflags;  /* the module and flags we care about - if detailed is 0 */
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* shot-to-shot data */
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct PERF_RTdata_sts *dSTS;    /* single-shot and burst modes */
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_RT_Private;
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_RT_done(PERF_Private *perf);
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_RT_Private *
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_RT_create(PERF_Private *perf, PERF_Config *config, PERF_MODULETYPE eModule);
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_Boundary(PERF_Private *perf,PERF_BOUNDARYTYPE eBoundary);
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_Buffer(PERF_Private *perf,unsigned long ulAddress1,
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulAddress2,
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            unsigned long ulSize,
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_MODULETYPE eModule);
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_Command(PERF_Private *perf,
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             unsigned long ulCommand,
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             unsigned long ulArgument,
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             PERF_MODULETYPE eModule);
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_Create(PERF_Private *perf);
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_Done(PERF_Private *perf);
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_Log(PERF_Private *perf,
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         unsigned long ulData1, unsigned long ulData2,
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         unsigned long ulData3);
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_SyncAV(PERF_Private *perf,
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            float pfTimeAudio,
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            float pfTimeVideo,
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SYNCOPTYPE eSyncOperation);
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin__rt_ThreadCreated(PERF_Private *perf,
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   unsigned long ulThreadID,
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   unsigned long ulThreadName);
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
179