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/* This headerdescribes the external PERF interface */
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef __PERF_H__
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __PERF_H__
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* global flag */
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** Compile-tempTime configuration options
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   In order to facilitate more flexible configuration options,
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   yet maintain run-tempTime performance, we allow the following
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   configuration options:
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   __PERF_CUSTOMIZABLE__
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   If enabled, we allow customized implementation of the
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   performance interface, e.g. unbuffered debug prints to find
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   the point of a program crash. For more information on the
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   specific features supported, see perf_custom.h.
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   If disabled, all instrumentation calls are hard-coded to be
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   logged into a logging buffer.
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if defined(__PERF_LOG_LOCATION__)
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define __PERF_Location(hObject) \
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        __PERF_FN(Location) (hObject,__FILE__,__LINE__,__func__);
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#elif defined(__PERF_LOCATE__)
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define __PERF_Location(hObject) \
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fprintf(stderr,"PERF in [%s:%d func:%s]:",__FILE__,__LINE__,__func__);
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define __PERF_Location(hObject)
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_CUSTOMIZABLE__
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define __PERF_FN(a) __PERF_CUSTOM_##a
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #define __PERF_FN(a) __PERF_LOG_##a
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=============================================================================
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    Overall API methodology.
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    Since this is an instrumentation API, other than the create call, no
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    other methods return any value, so there is no error checking
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    requirements.
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    If the create call encounters any errors, or if the instrumentation is run-
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    tempTime disabled, it will return NULL.  All other API-s must handle a NULL
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    argument, and will do nothing in such case.
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin=============================================================================*/
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Four CC calculations from characters and string */
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FOURCC(a,b,c,d)                   \
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ( ((((unsigned long) (a)) & 0xFF) << 24) | \
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      ((((unsigned long) (b)) & 0xFF) << 16) | \
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      ((((unsigned long) (c)) & 0xFF) << 8)  | \
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (((unsigned long) (d)) & 0xFF) )
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FOURS(id) \
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      PERF_FOURCC((id)[0], (id)[1], (id)[2], (id)[3])
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FOUR_CHARS(i) \
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      (char) (((i) >> 24) & 0xFF), (char) (((i) >> 16) & 0xFF), \
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      (char) (((i) >> 8)  & 0xFF), (char) ((i) & 0xFF)
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PREF(a,b) ((a) ? (a)->b : 0)
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=============================================================================
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ENUMERATIONS
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin=============================================================================*/
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BOUNDARYTYPE
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    The phase of execution for the Boundary callback
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin-----------------------------------------------------------------------------*/
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum PERF_BOUNDARYTYPE
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* UC phase boundary type */
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BoundaryStart      = 0,
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BoundaryComplete   = 0x10000,
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* UC phase type */
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BoundarySetup = 1,   /* UC initialization */
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BoundaryCleanup,     /* UC cleanup */
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BoundarySteadyState, /* UC is in 'steady state' - optional */
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BoundaryMax,
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_BoundaryMask   = 3,
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_BOUNDARYTYPE;
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_PRINT_C__
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar const * const PERF_BoundaryTypes[] = {"NONE", "Setup", "Cleanup", "Steady"};
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsComplete(x) ((x) & PERF_BoundaryComplete)
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsStarted(x)  (!PERF_IsComplete(x))
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_MODULETYPE
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    Type of module when creating the component, or when specifying source
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    or destination of buffer transfers and/or commands
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin-----------------------------------------------------------------------------*/
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* These flags are also used for the LOG commands */
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagSending     0x10000000ul   /* This is used for LOG */
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagSent        0x30000000ul   /* This is used for LOG */
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagRequesting  0x20000000ul   /* This is used for LOG */
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagReceived    0x00000000ul   /* This is used for LOG */
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagSendFlags   0x30000000ul
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagXfering     0x40000000ul   /* This is used for LOG */
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            /* = Received + Sending */
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagFrame       0x08000000ul
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagBuffer      0x00000000ul
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagMultiple    0x80000000ul
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_FlagSingle      0x00000000ul
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_GetSendRecv(x) ((x) & PERF_FlagSent)
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_GetXferSendRecv(x) ((x) & (PERF_FlagSendFlags | PERF_FlagXfering))
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_GetFrameBuffer(x)     PERF_IsFrame(x)
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_GetMultipleSingle(x)  PERF_IsMultiple(x)
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsFrame(x)     ((x) & PERF_FlagFrame)
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsBuffer(x)    (!PERF_IsFrame(x))
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsSending(x)   ((x) & PERF_FlagSending)
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsReceived(x)  (!PERF_IsSending(x))
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsXfering(x)   ((x) & PERF_FlagXfering)
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsMultiple(x)  ((x) & PERF_FlagMultiple)
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_IsSingle(x)    (!PERF_IsMultiple(x))
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum PERF_MODULETYPE
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleApplication,  /* application */
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleSystem,       /* system components */
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleService,      /* service or server */
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleHLMM,         /* high-level multimedia, e.g. MMF */
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleLLMM,         /* low-level multimedia, e.g. MDF, OMX */
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleComponent,    /* multimedia component */
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleCommonLayer,  /* common layer */
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleSocketNode,   /* socket-node (e.g. on DSP) */
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleAlgorithm,    /* algorithm (for possible future needs) */
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleHardware,     /* hardware (e.g. speaker, microphone) */
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleMemory,       /* memory or unspecified modules */
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleMemoryMap,    /* memory mapping */
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleMax,
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleBits = 4,
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleMask = (1 << PERF_ModuleBits) - 1,
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* module functional types used for selectively enabling instrumentation */
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleDomains     = 1 << (1 << PERF_ModuleBits),
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleAudioDecode = PERF_ModuleDomains,
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleAudioEncode = PERF_ModuleAudioDecode << 1,
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleVideoDecode = PERF_ModuleAudioEncode << 1,
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleVideoEncode = PERF_ModuleVideoDecode << 1,
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleImageDecode = PERF_ModuleVideoEncode << 1,
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ModuleImageEncode = PERF_ModuleImageDecode << 1,
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_MODULETYPE;
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_PRINT_C__
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar const * const PERF_ModuleTypes[] = {
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    "Application", "System",    "Service",     "HLMM",
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    "LLMM",        "Component", "CommonLayer", "SocketNode",
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    "Algorithm",   "Hardware",  "Memory",      "MemoryMap"
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin};
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SYNCOPTYPE
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    Type of module phase of execution for the cbBoundary callback
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin-----------------------------------------------------------------------------*/
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum PERF_SYNCOPTYPE
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SyncOpNone,
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SyncOpDropVideoFrame,   /* drop a video frame */
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SyncOpMax,
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_SYNCOPTYPE;
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_PRINT_C__
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar const *PERF_SyncOpTypes[] = {
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    "none", "drop_video_frame"
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin};
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_COMMANDTYPE
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF commands
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin-----------------------------------------------------------------------------*/
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum PERF_COMMANDTYPE
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_CommandMax,
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_CommandStatus = 0x10000000,
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} PERF_COMMANDTYPE;
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_PRINT_C__
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinchar const *PERF_CommandTypes[] = {
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    "none"
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin};
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=============================================================================
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    CREATION INTERFACE
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin=============================================================================*/
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct PERF_OBJTYPE *PERF_OBJHANDLE;
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** PERF_Create method is the is used to create an
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   instrumentation object for a component.
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   NOTE: It's arguments may depend on the operating system, as
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   the PERF object may need access to system resource
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   (terminal, file system).  For now, we assume that all
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   interfaces are accessible from system calls.
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   This operation may include allocating resources from the
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   system, to create any structures required for managing the
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   data collected during instrumentation, but our aim is to
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   have these resources be minimal.
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   Most options are run-tempTime configurable.  See perf_config.h
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   for such options.
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   In case of error - or if performance instrumentation is
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   run-tempTime disabled, PERF_Create will return a NULL handle,
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   and all resource allocations will be undone.
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulComponent
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       FourCC component ID.
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModule
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       ModuleType.
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @return hObject
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the instrumentation object.
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinPERF_OBJHANDLE PERF_Create(
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          unsigned long ulComponentName,
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_MODULETYPE eModule);
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_Done method is called at the end of the component
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   life cycle.
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.  This must be an lvalue, as
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       it will be deleted and set to NULL upon return.
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_Done(           \
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject)             \
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    do {                     \
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_Location(hObject) \
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_Done(hObject);    \
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } while (0)
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=============================================================================
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    INSTRUMENTATION INTERFACE
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin=============================================================================*/
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_Boundary callback must be called by the component
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   at specific phases of the component.
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eBoundary
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Boundary (phase) that is reached by the application.
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_Boundary(       \
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,             \
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eBoundary)           \
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    do {                     \
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_Location(hObject) \
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_FN(Boundary)(hObject, eBoundary); \
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } while (0)
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_SendingBuffer(s) and PERF_SendingFrame(s) method is
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   used to mark when a buffer (or frame) is to be sent to
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   another module.
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulAddress or ulAddress1 and ulAddress2
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Buffer (or frame) address(es).
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulSize
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       size of buffer(s) that is sent regardless if it is sent
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       by pointer exchange or memory copy.
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleTo
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is receiving the data.
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SendingBuffer(                                             \
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                        \
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                      \
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                         \
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                      \
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                  \
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                              \
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                            \
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSending, PERF_FlagSingle, PERF_FlagBuffer, \
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleTo, 0);             \
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while(0)
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SendingFrame(                                             \
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                       \
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                     \
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                        \
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                     \
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                 \
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                             \
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                           \
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSending, PERF_FlagSingle, PERF_FlagFrame, \
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleTo, 0);            \
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SendingBuffers(                                              \
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                          \
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                       \
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                       \
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                           \
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                        \
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                    \
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                \
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                              \
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSending, PERF_FlagMultiple, PERF_FlagBuffer, \
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleTo, 0);        \
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SendingFrames(                                              \
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                         \
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                      \
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                      \
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                          \
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                       \
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                   \
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                               \
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                             \
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSending, PERF_FlagMultiple, PERF_FlagFrame, \
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleTo, 0);       \
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_SendingCommand method is used to mark when a
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   command is to be sent to another module.
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulCommand
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Command.
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleTo
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is receiving the data.
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SendingCommand(  \
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,              \
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulCommand,            \
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulArgument,           \
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)            \
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                        \
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)    \
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Command)(hObject, \
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     PERF_FlagSending, ulCommand, ulArgument, eModuleTo); \
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_SentBuffer(s) and PERF_SentFrame(s) method is
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   used to mark when a buffer (or frame) has been sent to
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   another module.
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulAddress or ulAddress1 and ulAddress2
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Buffer (or frame) address(es).
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulSize
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       size of buffer(s) that is sent regardless if it is sent
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       by pointer exchange or memory copy.
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleTo
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is receiving the data.
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SentBuffer(                                             \
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                     \
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                   \
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                      \
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                   \
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                               \
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                           \
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                         \
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSent, PERF_FlagSingle, PERF_FlagBuffer, \
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleTo, 0);          \
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while(0)
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SentFrame(                                             \
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                    \
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                  \
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                     \
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                  \
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                              \
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                          \
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                        \
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSent, PERF_FlagSingle, PERF_FlagFrame, \
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleTo, 0);         \
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SentBuffers(                                              \
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                       \
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                    \
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                    \
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                        \
433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                     \
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                 \
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                             \
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                           \
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSent, PERF_FlagMultiple, PERF_FlagBuffer, \
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleTo, 0);     \
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SentFrames(                                              \
442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                      \
443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                   \
444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                   \
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                       \
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                    \
447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                \
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                            \
449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                          \
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagSent, PERF_FlagMultiple, PERF_FlagFrame, \
451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleTo, 0);    \
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_SentCommand method is used to mark when a
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   command has been sent to another module.
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulCommand
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Command.
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleTo
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is receiving the data.
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SentCommand(     \
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,              \
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulCommand,            \
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulArgument,           \
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)            \
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                        \
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)    \
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Command)(hObject, \
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     PERF_FlagSent, ulCommand, ulArgument, eModuleTo); \
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_RequestingBuffer(s) and PERF_RequestingFrame(s) method
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   is used to mark when a buffer (or frame) is beeing requested
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   from another module. These go hand-in-hand with
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   ReceivedBuffer and ReceivedFrame, if one wants to measure
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   the time spent waiting (pending) for a buffer/frame.  Note,
480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   that the buffer address or size may not be known upon
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   calling this method, in which case -1 should be used.
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hAPI
483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulAddress
485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Buffer (or frame) address.
486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulSize
487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       size of buffer(s) that is sent regardless if it is sent
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       by pointer exchange or memory copy.
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleFrom
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is sending the data.
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_RequestingBuffer(                                             \
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                           \
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                         \
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                            \
496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                       \
497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                     \
498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                 \
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                               \
500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagRequesting, PERF_FlagSingle, PERF_FlagBuffer, \
501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleFrom, 0);              \
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_RequestingFrame(                                             \
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                          \
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                        \
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                           \
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                      \
509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                    \
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                \
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                              \
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagRequesting, PERF_FlagSingle, PERF_FlagFrame, \
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleFrom, 0);             \
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_RequestingBuffers(                                              \
517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                             \
518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                          \
519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                          \
520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                              \
521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                         \
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                       \
523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                   \
524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                                 \
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagRequesting, PERF_FlagMultiple, PERF_FlagBuffer, \
526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleFrom, 0);         \
527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_RequestingFrames(                                              \
530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                            \
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                         \
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                         \
533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                             \
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                        \
535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                      \
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                  \
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                                \
538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagRequesting, PERF_FlagMultiple, PERF_FlagFrame, \
539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleFrom, 0);        \
540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_RequestingCommand method is used to mark when a
543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   command is being requested from another module.  This method
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   goes in hand with the PERF_ReceivedCommand to measure the
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   time the application is "pending" for the command.  Note,
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   that the command is most likely not known when calling this
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   method, in which case -1 should be used.
548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulCommand
552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Command.
553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleTo
554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that sent the data.
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_RequestingCommand( \
557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                \
558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulCommand,              \
559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		ulArgument,             \
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)            \
561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                          \
562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)      \
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Command)(hObject,   \
564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     PERF_FlagRequesting, ulCommand, ulArgument, eModuleFrom); \
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_ReceivedBuffer(s) and PERF_ReceivedFrame(s) method
569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   is used to mark when a buffer (or frame) is received from
570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   another module. These go hand-in-hand with SendingBuffer and
571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   SendingFrame, if instrumentation is implemented at all
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   module boundaries.
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hAPI
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulAddress
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Buffer (or frame) address.
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulSize
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       size of buffer(s) that is sent regardless if it is sent
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       by pointer exchange or memory copy.
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleFrom
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is sending the data.
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_ReceivedBuffer(                                             \
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                         \
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                       \
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                          \
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                     \
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                   \
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                               \
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                             \
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagReceived, PERF_FlagSingle, PERF_FlagBuffer, \
592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleFrom, 0);            \
593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_ReceivedFrame(                                             \
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                        \
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                      \
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                         \
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                    \
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                  \
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                              \
602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                            \
603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagReceived, PERF_FlagSingle, PERF_FlagFrame, \
604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleFrom, 0);           \
605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_ReceivedBuffers(                                              \
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                           \
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                        \
610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                        \
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                            \
612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                       \
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                     \
614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                 \
615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                               \
616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagReceived, PERF_FlagMultiple, PERF_FlagBuffer, \
617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleFrom, 0);       \
618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_ReceivedFrames(                                              \
621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                          \
622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                       \
623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                       \
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                           \
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)                                                      \
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                    \
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                \
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                              \
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagReceived, PERF_FlagMultiple, PERF_FlagFrame, \
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleFrom, 0);      \
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_ReceivedCommand method is used to mark when a
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   command is received from another module.
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulCommand
639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Command.
640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleTo
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that sent the data.
642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_ReceivedCommand( \
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,              \
645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulCommand,            \
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		ulArgument,           \
647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom)          \
648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                        \
649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)    \
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Command)(hObject, \
651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     PERF_FlagReceived, ulCommand, ulArgument, eModuleFrom); \
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_XferingBuffer(s) and PERF_XferingFrame(s)
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   method is used to mark when a buffer (or frame) is to be
656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   transferred from one module to another.  This is shortcut
657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   for PERF_Received followed by PERF_Sending
658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulAddress or ulAddress1 and ulAddress2
662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Buffer (or frame) address(es).
663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulSize
664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       size of buffer(s) that is sent regardless if it is sent
665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       by pointer exchange or memory copy.
666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleFrom
667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is sending the data.
668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eModuleTo
669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Type of module that is receiving the data.
670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_XferingBuffer(                                             \
672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                        \
673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                      \
674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                         \
675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom,                                                    \
676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                      \
677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                  \
678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                              \
679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                            \
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagXfering, PERF_FlagSingle, PERF_FlagBuffer, \
681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleFrom, eModuleTo);   \
682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_XferingFrame(                                             \
685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                       \
686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress,                                                     \
687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                        \
688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom,                                                   \
689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                     \
690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                 \
691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                             \
692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                           \
693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagXfering, PERF_FlagSingle, PERF_FlagFrame, \
694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress, NULL, ulSize, eModuleFrom, eModuleTo);  \
695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_XferingBuffers(                                              \
698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                          \
699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                       \
700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                       \
701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                           \
702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom,                                                      \
703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                        \
704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                    \
705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                                \
706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                              \
707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagXfering, PERF_FlagMultiple, PERF_FlagBuffer, \
708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleFrom, eModuleTo);\
709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_XferingFrames(                                              \
712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,                                                         \
713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress1,                                                      \
714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulAddress2,                                                      \
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulSize,                                                          \
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleFrom,                                                     \
717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eModuleTo)                                                       \
718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                                                                   \
719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)                                               \
720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_FN(Buffer)(hObject,                                             \
721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_FlagXfering, PERF_FlagMultiple, PERF_FlagFrame, \
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    ulAddress1, ulAddress2, ulSize, eModuleFrom, eModuleTo);\
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_SyncData method shall be called by a module that
726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   synchronizes audio/video streams.  It informs the
727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   instrumentation module about the tempTime stamps of the two
728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   streams, as well as the operation (if any) to restore
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   synchronization.
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param pfTimeAudio
733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Time stamp of audio frame
734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param pfTimeVideo
735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Time stamp of video frame
736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eSyncOperation
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Synchronization operation that is being taken to get
738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       streams in sync.
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_SyncAV(       \
741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,           \
742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fTimeAudio,        \
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fTimeVideo,        \
744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eSyncOperation)    \
745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                     \
746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject) \
747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_FN(SyncAV)(hObject, fTimeAudio, fTimeVideo, eSyncOperation); \
748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_TheadCreated method shall be called after creating
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   a new thread.
752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param pfTimeAudio
755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Time stamp of audio frame
756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param pfTimeVideo
757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Time stamp of video frame
758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param eSyncOperation
759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Synchronization operation that is being taken to get
760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       streams in sync.
761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_ThreadCreated( \
763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,            \
764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulThreadID,         \
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulThreadName)       \
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {                      \
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject)  \
768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_FN(ThreadCreated)(hObject, ulThreadID, ulThreadName); \
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  }  while (0)
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** The PERF_Log method can be called to log 3 values into the
772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   log.  The 1st argument is capped at 28 bits.
773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param hObject
774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Handle to the PERF object.
775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*   @param ulData1, ulData2, ulData3
776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*       Data to be logged
777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* */
778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define PERF_Log( \
779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hObject,  \
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulData1,  \
781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulData2,  \
782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ulData3)  \
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  do {            \
784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  __PERF_Location(hObject) \
785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    __PERF_FN(Log)(hObject, ulData1, ulData2, ulData3);\
786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  } while (0)
787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* define PERF_OBJ and the used __PERF macros */
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "perf_obj.h"
790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif /* __PERF_INSTURMENTATION__ */
792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif /* __PERF_H__ */
794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
796