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============================================================================ */
28typedef 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
46typedef 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
71typedef 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
87typedef 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
101typedef 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
134void
135PERF_RT_done(PERF_Private *perf);
136
137PERF_RT_Private *
138PERF_RT_create(PERF_Private *perf, PERF_Config *config, PERF_MODULETYPE eModule);
139
140void
141__rt_Boundary(PERF_Private *perf,PERF_BOUNDARYTYPE eBoundary);
142
143void
144__rt_Buffer(PERF_Private *perf,unsigned long ulAddress1,
145            unsigned long ulAddress2,
146            unsigned long ulSize,
147            PERF_MODULETYPE eModule);
148
149void
150__rt_Command(PERF_Private *perf,
151             unsigned long ulCommand,
152             unsigned long ulArgument,
153             PERF_MODULETYPE eModule);
154
155void
156__rt_Create(PERF_Private *perf);
157
158void
159__rt_Done(PERF_Private *perf);
160
161void
162__rt_Log(PERF_Private *perf,
163         unsigned long ulData1, unsigned long ulData2,
164         unsigned long ulData3);
165
166void
167__rt_SyncAV(PERF_Private *perf,
168            float pfTimeAudio,
169            float pfTimeVideo,
170            PERF_SYNCOPTYPE eSyncOperation);
171
172void
173__rt_ThreadCreated(PERF_Private *perf,
174                   unsigned long ulThreadID,
175                   unsigned long ulThreadName);
176
177#endif
178
179