pfuMPipeStats(3pf) OpenGL Performer 3.2.2 libpfutil Reference Pages
NAME
pfuManageMPipeStats - Multipipe/multichannel stats utility.
FUNCTION SPECIFICATION
#include <Performer/pfutil.h>
int pfuManageMPipeStats(int nframes, nSampledPipes);
DESCRIPTION
This utility obtains time stamp stats for each Performer channel/pipe in
an automatic fashion. The complete stats log is stored in a file for
later review. Timing information for pre- and post-callbacks is also
provided.
The routine pfuManageMPipeStats can be used to obtain timing information
during a number of frames per each channel for pre-draw, pfDraw, post-
draw, pre-cull, pfCull, post-cull as well as ISECT and APP.
nframes specifies the number of frames to be measured. nSampledPipes is
the number of pipes for which statistics are to be gathered.
The first time that pfuManageMPipeStats is called it automatically
determines the pipe and channel configuration. It also sets up a
minimally configured pfStats in order to obtain the data.
During the requested number of frames, the utility grabs the latest
pfStats buffer into main memory. After the requested number of frames,
the utility creates a new file called MPipeStats0.log. The file number
is incremented each time that the utility is used from the same
execution, so that the next time it is used the file have the name
MPipeStats1.log and so on.
pfuManageMPipeStats returns 1 while it is getting time stamps and 0 when
it has finished its collection and created the historical file.
pfuManageMPipeStats must be called in the APP. It may be used multiple
times.
Following is an example of use in an application loop:
/* DumpMPipeStats is controlled by the user interface */
if(SharedArena->DumpMPipeStats && !mpstats_running)
mpstats_running = pfuManageMPipeStats(10, 1));
if(mpstats_running)
mpstats_running = pfuManageMPipeStats(10, 1));
Page 1
pfuMPipeStats(3pf) OpenGL Performer 3.2.2 libpfutil Reference Pages
The file format used by pfuManageMPipeStats is offered only as an
example. The meaning and lay out is as follows:
====================================================================
Frame:<frame>
_____________________________APP____________________________________
Absolute Timeline information (sec)
AppFrame:<frame>
AppStart:<start>
enterSync:<enterSync> afterClean:<afterClean> afterSync:<afterSync>
pfFrameStart:<frameStart> pfFrameEnd:<frameEnd>
_____________________________ISECT__________________________________
Absolute Timeline information (sec)
IsectFrame: <frame>
Start:<start> End:<end>
Relative Timeline information (msec)
Total Isect Time:<end-start>
_____________________________CULL & DRAW____________________________
Chan: <Channel_number>
Frame: <frame_number>
Absolute Timeline information (sec)
CullFrame: <cullFrame>
Start: <cullStart> End: <cullEnd>
BeginUpDate: <begUpdate> EndUpdate: <endUpdate>
DrawFrame: <drawFrame>
Start: <drawStart> End: <drawEnd>
pfDrawStart: <pfDrawStart> pfDrawEnd: <pfDrawEnd> AfterSwap: <AfterSwap>
Relative Timeline information (msec)
Total Cull Time:<cullEnd-cullStart>
Total Draw Time:<drawEnd-drawStart>
PreDraw: <preDraw>
pfDraw: <pfDraw>
PostDraw:<postDraw>
--------------------------------------------------------------------
You are encouraged to change the default file format as well as the data
being collected.
NOTES
Depending on the multiprocess mode being used a number of initial frames
could be filled by nonsensical data.
The use of pfuManageMPipeStats modifies the pfStats mode. After it
completes it sets the pfStats modes to their default values.
Page 2
pfuMPipeStats(3pf) OpenGL Performer 3.2.2 libpfutil Reference Pages
Hence, if you wish to reuse settings from the previous pfStats you should
save them before the first call to pfuManageMPipeStats.
CPU 0 should never be isolated.
The libpfutil source code, object code and documentation are provided as
unsupported software. Routines are subject to change in future releases.
SEE ALSO
pfFrameStats
Page 3