| /*!*********************************************************************** | |
| @file PVRScopeStats.h | |
| @copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved. | |
| @brief PVRScopeStats header file. @copybrief ScopeStats | |
| **************************************************************************/ | |
| /*! @mainpage PVRScope | |
| @section overview Library Overview | |
| ***************************** | |
| PVRScope is a utility library which has two functionalities: | |
| \li @ref ScopeStats is used to access the hardware performance counters in | |
| PowerVR hardware via a driver library called PVRScopeServices. | |
| \li @ref ScopeComms allows an application to send user defined information to | |
| PVRTune via PVRPerfServer, both as counters and marks, or as editable data that can be | |
| passed back to the application. | |
| PVRScope is supplied in the PVRScope.h header file. Your application also needs to link to the PVRScope | |
| library file, either a <tt>.lib</tt>, <tt>.so</tt>, or <tt>.dy</tt> file, depending on your platform. | |
| For more information on PVRScope, see the <em>PVRScope User Manual</em>. | |
| @subsection limitStats PVRScopeStats Limitations | |
| ***************************** | |
| @copydetails ScopeStats | |
| @subsection limitComms PVRScopeComms Limitations | |
| ***************************** | |
| @copydetails ScopeComms | |
| */ | |
| #ifndef _PVRSCOPE_H_ | |
| #define _PVRSCOPE_H_ | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| /*! | |
| @addtogroup ScopeStats PVRScopeStats | |
| @brief The PVRScopeStats functionality of PVRScope is used to access the hardware performance counters in | |
| PowerVR hardware via a driver library called PVRScopeServices. | |
| @details PVRScopeStats has the following limitations: | |
| \li Only one instance of @ref ScopeStats may communicate with PVRScopeServices at any | |
| given time. If a PVRScope enabled application attempts to communicate with | |
| PVRScopeServices at the same time as another such application, or at the same time as | |
| PVRPerfServer, conflicts can occur that may make performance data unreliable. | |
| \li Performance counters can only be read on devices whose drivers have been built with | |
| hardware profiling enabled. This configuration is the default in most production drivers due to negligible overhead. | |
| \li Performance counters contain the average value of that counter since the last time the counter was interrogated. | |
| @{ | |
| */ | |
| /**************************************************************************** | |
| ** Enums | |
| ****************************************************************************/ | |
| /*!************************************************************************** | |
| @enum EPVRScopeInitCode | |
| @brief PVRScope initialisation return codes. | |
| ****************************************************************************/ | |
| enum EPVRScopeInitCode | |
| { | |
| ePVRScopeInitCodeOk, ///< Initialisation OK | |
| ePVRScopeInitCodeOutOfMem, ///< Out of memory | |
| ePVRScopeInitCodeDriverSupportNotFound, ///< Driver support not found | |
| ePVRScopeInitCodeDriverSupportInsufficient, ///< Driver support insufficient | |
| ePVRScopeInitCodeDriverSupportInitFailed, ///< Driver support initialisation failed | |
| ePVRScopeInitCodeDriverSupportQueryInfoFailed, ///< Driver support information query failed | |
| ePVRScopeInitCodeUnrecognisedHW ///< Unrecognised hardware | |
| }; | |
| /**************************************************************************** | |
| ** Structures | |
| ****************************************************************************/ | |
| // Internal implementation data | |
| struct SPVRScopeImplData; | |
| /*!************************************************************************** | |
| @struct SPVRScopeCounterDef | |
| @brief Definition of a counter that PVRScope calculates. | |
| ****************************************************************************/ | |
| struct SPVRScopeCounterDef | |
| { | |
| const char *pszName; ///< Counter name, null terminated | |
| bool bPercentage; ///< true if the counter is a percentage | |
| unsigned int nGroup; ///< The counter group that the counter is in. | |
| }; | |
| /*!************************************************************************** | |
| @struct SPVRScopeCounterReading | |
| @brief A set of return values resulting from querying the counter values. | |
| ****************************************************************************/ | |
| struct SPVRScopeCounterReading | |
| { | |
| float *pfValueBuf; ///< Array of returned values | |
| unsigned int nValueCnt; ///< Number of values set in the above array | |
| unsigned int nReadingActiveGroup; ///< Group that was active when counters were sampled | |
| }; | |
| /*!************************************************************************** | |
| @struct SPVRScopeGetInfo | |
| @brief A set of return values holding miscellaneous PVRScope information. | |
| ****************************************************************************/ | |
| struct SPVRScopeGetInfo | |
| { | |
| unsigned int nGroupMax; ///< Highest group number of any counter | |
| }; | |
| /**************************************************************************** | |
| ** Declarations | |
| ****************************************************************************/ | |
| const char *PVRScopeGetDescription(); ///< Query the PVRScope library description | |
| /*!************************************************************************** | |
| @brief Initialise @ref ScopeStats, to access the HW performance counters in PowerVR. | |
| @return EPVRScopeInitCodeOk on success. | |
| ****************************************************************************/ | |
| EPVRScopeInitCode PVRScopeInitialise( | |
| SPVRScopeImplData **ppsData ///< Context data | |
| ); | |
| /*!************************************************************************** | |
| @brief Shutdown or de-initalise @ref ScopeStats and free the allocated memory. | |
| ***************************************************************************/ | |
| void PVRScopeDeInitialise( | |
| SPVRScopeImplData **ppsData, ///< Context data | |
| SPVRScopeCounterDef **ppsCounters, ///< Array of counters | |
| SPVRScopeCounterReading * const psReading ///< Results memory area | |
| ); | |
| /*!************************************************************************** | |
| @brief Query for @ref ScopeStats information. This function should only be called during initialisation. | |
| ****************************************************************************/ | |
| void PVRScopeGetInfo( | |
| SPVRScopeImplData * const psData, ///< Context data | |
| SPVRScopeGetInfo * const psInfo ///< Returned information | |
| ); | |
| /*!************************************************************************** | |
| @brief Query for the list of @ref ScopeStats HW performance counters, and | |
| allocate memory in which the counter values will be received. This function | |
| should only be called during initialisation. | |
| ****************************************************************************/ | |
| bool PVRScopeGetCounters( | |
| SPVRScopeImplData * const psData, ///< Context data | |
| unsigned int * const pnCount, ///< Returned number of counters | |
| SPVRScopeCounterDef **ppsCounters, ///< Returned counter array | |
| SPVRScopeCounterReading * const psReading ///< Pass a pointer to the structure to be initialised | |
| ); | |
| /*!************************************************************************** | |
| @brief This function should be called regularly, such as once per frame. psReading | |
| may be NULL until a new reading is required, in order to smooth out values | |
| across longer time periods, perhaps a number of frames. | |
| @details As and when desired, call this function to fill the counter-value array with | |
| the current counter values then change the active performance counter | |
| group. In a 3D application, you might call this once per frame or every N | |
| frames. Typically the group ID should be 0xffffffff in order to leave the | |
| active group unchanged; if it is desired to change it then pass the new | |
| group ID. | |
| ****************************************************************************/ | |
| bool PVRScopeReadCountersThenSetGroup( | |
| SPVRScopeImplData * const psData, ///< Context data | |
| SPVRScopeCounterReading * const psReading, ///< Returned data will be filled into the pointed-to structure | |
| const unsigned int nTimeUS, ///< Current time, in microseconds. Ignored if psReading is NULL. | |
| const unsigned int nGroup ///< New group; 0xffffffff to leave it unchanged | |
| ); | |
| /*! @} */ | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* _PVRSCOPE_H_ */ | |
| /***************************************************************************** | |
| End of file (PVRScopeStats.h) | |
| *****************************************************************************/ |