1 
2 /*
3  * Copyright (C) Texas Instruments - http://www.ti.com/
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21 
22 #ifndef __PERF_RT_H
23 #define __PERF_RT_H
24 
25 /* ============================================================================
26    DEBUG STRUCTURES
27 ============================================================================ */
28 typedef struct PERF_RTdata_uptime
29 {
30     /* data needed for uptime calculations */
31     double start_uptime;
32     double start_idletime;
33     double last_uptime;
34     double last_idletime;
35     int    measuring;
36     int    success;
37 
38     /* statistics */
39     long   n;
40     double x, xx;
41 
42     /* real-time data */
43     TIME_STRUCT last_reporting;
44 } PERF_RTdata_uptime;
45 
46 typedef struct PERF_RTdata_rate
47 {
48     /* rate parameters */
49     PERF_MODULETYPE modulesAndFlags;
50     unsigned long   size;
51 
52     /* data needed for frame rate calculations */
53     TIME_STRUCT last_timestamp;
54     int skip;
55 
56     /* statistics:
57         n, x, xx: whole lifecycle
58         tn, tx, txx: temporal statistics (for grandularity)
59         tn0: tn in the last temporal statistics phase (since the last executing phase)
60              if frame rate is less than 0.5fps and tn0 is less than 10 in the last phase,
61              we ignore and do not print the frames unless debug & 4 is set.
62         an, ax, axx: average temporal statistics - yields stdev */
63     long   n, tn, tn0, an;
64     unsigned long x, tx;
65     double xx, txx, ax, axx;
66 
67     /* real-time data */
68     TIME_STRUCT last_reporting;
69 } PERF_RTdata_rate;
70 
71 typedef struct PERF_RTdata_delay
72 {
73     /* delay parameters */
74     /* NONE for now */
75 
76     /* data needed for delay calculations */
77     TIME_STRUCT last_timestamp;
78 
79     /* statistics: this is real-time in nature, so no "buffering" is performed.
80        therefore, no need for temporal statistics
81     */
82     long n;
83     unsigned long x;
84     double xx;
85 } PERF_RTdata_delay;
86 
87 typedef struct PERF_RTdata_sts
88 {
89     int capturing;
90     unsigned long size_min, size_max;
91 
92     unsigned long last_burst;             /* last burst so we don't count the
93                                              last delay of each raw burst into
94                                              the modified number */
95 
96     PERF_RTdata_delay dSingle;            /* single shot-to-shot */
97     PERF_RTdata_delay dBurst, dABurst;    /* raw burst, average of all bursts */
98     PERF_RTdata_delay dBurst2, dABurst2;  /* modified burst, average */
99 } PERF_RTdata_sts;
100 
101 typedef struct PERF_RT_Private
102 {
103     /* configuration */
104     FILE *fRt;                       /* file to real-time output (Buffer) */
105     long   granularity;
106     int    summary;
107     int    detailed;
108     int    debug;                    /* bit: 1 & any - print temporal stats
109                                              2       - print difference between temporal average and true average
110                                              4       - use all frames for rates, not just after 10 frames
111                                      */
112 
113     /* state data for reporting */
114     TIME_STRUCT first_time;
115 
116     /* uptime data */
117     struct PERF_RTdata_uptime *dUptime; /* uptime data */
118 
119     /* rate data */
120     int    steadyState;              /* are we in steady state? */
121     int    needSteadyState;          /* do we need steady state? */
122     struct PERF_RTdata_rate *dRate;  /* rate data */
123     int    nDRate;                   /* number of dRate structures */
124     int    maxDRate;                 /* maximum number of dRates */
125     int    encoder;                  /* encoder, sending arbitrary sizes */
126     int    decoder;                  /* decoder, receiving arbitrary sizes */
127     unsigned long only_moduleandflags;  /* the module and flags we care about - if detailed is 0 */
128 
129     /* shot-to-shot data */
130     struct PERF_RTdata_sts *dSTS;    /* single-shot and burst modes */
131 
132 } PERF_RT_Private;
133 
134 void
135 PERF_RT_done(PERF_Private *perf);
136 
137 PERF_RT_Private *
138 PERF_RT_create(PERF_Private *perf, PERF_Config *config, PERF_MODULETYPE eModule);
139 
140 void
141 __rt_Boundary(PERF_Private *perf,PERF_BOUNDARYTYPE eBoundary);
142 
143 void
144 __rt_Buffer(PERF_Private *perf,unsigned long ulAddress1,
145             unsigned long ulAddress2,
146             unsigned long ulSize,
147             PERF_MODULETYPE eModule);
148 
149 void
150 __rt_Command(PERF_Private *perf,
151              unsigned long ulCommand,
152              unsigned long ulArgument,
153              PERF_MODULETYPE eModule);
154 
155 void
156 __rt_Create(PERF_Private *perf);
157 
158 void
159 __rt_Done(PERF_Private *perf);
160 
161 void
162 __rt_Log(PERF_Private *perf,
163          unsigned long ulData1, unsigned long ulData2,
164          unsigned long ulData3);
165 
166 void
167 __rt_SyncAV(PERF_Private *perf,
168             float pfTimeAudio,
169             float pfTimeVideo,
170             PERF_SYNCOPTYPE eSyncOperation);
171 
172 void
173 __rt_ThreadCreated(PERF_Private *perf,
174                    unsigned long ulThreadID,
175                    unsigned long ulThreadName);
176 
177 #endif
178 
179