Program Listing for File QnnSystemProfile.h¶
↰ Return to documentation for file (include/QNN/System/QnnSystemProfile.h)
//==============================================================================
//
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// All rights reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
//
//==============================================================================
/**
* @file
* @brief QNN System Profile API.
*
* This is a system API header dedicated to extensions to QnnProfile
* that provide backend-agnostic services to users.
*/
#ifndef QNN_SYSTEM_PROFILE_H
#define QNN_SYSTEM_PROFILE_H
#include "QnnProfile.h"
#include "QnnTypes.h"
#include "System/QnnSystemCommon.h"
#ifdef __cplusplus
extern "C" {
#endif
//=============================================================================
// Error Codes
//=============================================================================
/**
* @brief QNN System Profile API result / error codes.
*/
typedef enum {
/// Qnn System Profile success
QNN_SYSTEM_PROFILE_NO_ERROR = QNN_SYSTEM_COMMON_NO_ERROR,
/// Qnn System Profile API is not supported yet
QNN_SYSTEM_PROFILE_ERROR_UNSUPPORTED_FEATURE = QNN_SYSTEM_COMMON_ERROR_UNSUPPORTED_FEATURE,
/// QNN System Profile invalid handle
QNN_SYSTEM_PROFILE_ERROR_INVALID_HANDLE = QNN_SYSTEM_COMMON_ERROR_INVALID_HANDLE,
/// One or more arguments to a System Profile API is/are NULL/invalid.
QNN_SYSTEM_PROFILE_ERROR_INVALID_ARGUMENT = QNN_SYSTEM_COMMON_ERROR_INVALID_ARGUMENT,
/// QNN System Profile Specific Errors
/// QNN System Profile writer could not allocate memory properly
QNN_SYSTEM_PROFILE_ERROR_MEM_ALLOC = QNN_SYSTEM_PROFILE_MIN_ERROR + 0
} QnnSystemProfile_Error_t;
//=============================================================================
// Data Types
//=============================================================================
/**
* @brief A typedef to indicate a QNN System profile handle
*/
typedef void* QnnSystemProfile_SerializationTargetHandle_t;
typedef enum {
QNN_SYSTEM_PROFILE_SERIALIZATION_TARGET_FILE = 0x01,
QNN_SYSTEM_PROFILE_SERIALIZATION_TARGET_UNDEFINED = 0x7FFFFFFF
} QnnSystemProfile_SerializationTargetType_t;
typedef struct {
const char* fileName;
const char* fileDirectory;
} QnnSystemProfile_SerializationTargetFile_t;
typedef struct {
QnnSystemProfile_SerializationTargetType_t type;
union UNNAMED {
QnnSystemProfile_SerializationTargetFile_t file;
};
} QnnSystemProfile_SerializationTarget_t;
typedef struct {
const char* appName;
const char* appVersion;
const char* backendVersion;
} QnnSystemProfile_SerializationFileHeader_t;
typedef enum {
/// Option for maxNumMessages
QNN_SYSTEM_PROFILE_SERIALIZATION_TARGET_CONFIG_MAX_NUM_MESSAGES = 0,
/// Option for serializationHeader
QNN_SYSTEM_PROFILE_SERIALIZATION_TARGET_CONFIG_SERIALIZATION_HEADER = 1,
/// Unused, present to ensure 32 bits.
QNN_SYSTEM_PROFILE_SERIALIZATION_TARGET_CONFIG_UNDEFINED = 0x7FFFFFFF
} QnnSystemProfile_SerializationTargetConfigType_t;
typedef struct {
QnnSystemProfile_SerializationTargetConfigType_t type;
union UNNAMED {
/// The maximum number of messages before writing to a
/// single serialzation target stops.
uint32_t maxNumMessages;
/// The header info that prepends all the serialized data.
QnnSystemProfile_SerializationFileHeader_t serializationHeader;
};
} QnnSystemProfile_SerializationTargetConfig_t;
typedef enum {
/// Type for QnnSystemProfile_Header_t inidicating public visibility.
QNN_SYSTEM_PROFILE_VISIBILITY_PUBLIC = 0,
/// Type for QnnSystemProfile_Header_t inidicating private visibility.
QNN_SYSTEM_PROFILE_VISIBILITY_PRIVATE = 1
} QnnSystemProfile_Visibility_t;
typedef enum {
QNN_SYSTEM_PROFILE_METHOD_TYPE_NONE = 0,
/// Backend execute method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_BACKEND_EXECUTE = 1,
/// Backend finalize method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_BACKEND_FINALIZE = 2,
/// Backend async execute method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_BACKEND_EXECUTE_ASYNC = 3,
/// Backend create from binary method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_BACKEND_CREATE_FROM_BINARY = 4,
/// Backend deinit method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_BACKEND_DEINIT = 5,
/// App context create method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_APP_CONTEXT_CREATE = 6,
/// App compose graphs method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_APP_COMPOSE_GRAPHS = 7,
/// App execute inference/sec method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_APP_EXECUTE_IPS = 8,
/// Backend graph component method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_BACKEND_GRAPH_COMPONENT = 9,
/// App load backend library method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_APP_BACKEND_LIB_LOAD = 10,
/// Backend apply binary method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_BACKEND_APPLY_BINARY_SECTION = 11,
/// Backend apply binary method.
QNN_SYSTEM_PROFILE_METHOD_TYPE_CONTEXT_FINALIZE = 12
} QnnSystemProfile_MethodType_t;
typedef struct {
uint64_t startTime;
uint64_t stopTime;
uint64_t startMem;
uint64_t stopMem;
QnnSystemProfile_MethodType_t methodType;
QnnSystemProfile_Visibility_t visibility;
const char* graphName;
} QnnSystemProfile_HeaderV1_t;
// clang-format off
/// QnnSystemProfile_HeaderV1_t initializer macro
#define QNN_SYSTEM_PROFILE_HEADER_V1_INIT \
{ \
0, /* startTime */ \
0, /* stopTime */ \
0, /* startMem */ \
0, /* stopMem */ \
QNN_SYSTEM_PROFILE_METHOD_TYPE_NONE, /* methodType */ \
QNN_SYSTEM_PROFILE_VISIBILITY_PUBLIC, /* visibility */ \
NULL, /* stopMem */ \
}
// clang-format on
typedef enum {
/// Type for QnnSystemProfile_ProfileDataV1_t containing eventData
QNN_SYSTEM_PROFILE_EVENT_DATA = 0,
/// Type for QnnSystemProfile_ProfileDataV1_t containing extendedEventData
QNN_SYSTEM_PROFILE_EXTENDED_EVENT_DATA = 1,
/// Unused, present to ensure 32 bits.
QNN_SYSTEM_PROFILE_EVENT_DATA_UNDEFINED = 0x7FFFFFFF
} QnnSystemProfile_EventDataType_t;
typedef struct QnnSystemProfile_ProfileEventV1_t QnnSystemProfile_ProfileEventV1_t;
struct QnnSystemProfile_ProfileEventV1_t {
QnnSystemProfile_EventDataType_t type;
union {
QnnProfile_EventData_t eventData;
QnnProfile_ExtendedEventData_t extendedEventData;
};
QnnSystemProfile_ProfileEventV1_t* profileSubEventData;
uint32_t numSubEvents;
};
// clang-format off
/// QnnSystemProfile_ProfileEventV1_t initializer macro
#define QNN_SYSTEM_PROFILE_EVENT_V1_INIT \
{ \
QNN_SYSTEM_PROFILE_EVENT_DATA_UNDEFINED, /* type */ \
{ \
QNN_PROFILE_EVENT_DATA_INIT /* eventData */ \
}, \
NULL, /* profileSubEventData */ \
0 /* numSubEvents */ \
}
// clang-format on
typedef struct {
QnnSystemProfile_HeaderV1_t header;
QnnSystemProfile_ProfileEventV1_t* profilingEvents;
uint32_t numProfilingEvents;
} QnnSystemProfile_ProfileDataV1_t;
// clang-format off
/// QnnSystemProfile_ProfileDataV1_t initializer macro
#define QNN_SYSTEM_PROFILE_DATA_V1_INIT \
{ \
QNN_SYSTEM_PROFILE_HEADER_V1_INIT, /* header */ \
NULL, /* profilingEvents */ \
0 /* numProfilingEvents */ \
}
// clang-format on
typedef enum {
/// Version type to access v1
QNN_SYSTEM_PROFILE_DATA_VERSION_1 = 0x01,
/// Unused, present to ensure 32 bits.
QNN_SYSTEM_PROFILE_DATA_VERSION_UNDEFINED = 0x7FFFFFFF
} QnnSystemProfile_ProfileDataVersion_t;
typedef struct {
QnnSystemProfile_ProfileDataVersion_t version;
union UNNAMED {
QnnSystemProfile_ProfileDataV1_t v1;
};
} QnnSystemProfile_ProfileData_t;
// clang-format off
/// QnnSystemProfile_ProfileData_t initializer macro
#define QNN_SYSTEM_PROFILE_DATA_INIT \
{ \
QNN_SYSTEM_PROFILE_DATA_VERSION_UNDEFINED, /* version */ \
{ \
QNN_SYSTEM_PROFILE_DATA_V1_INIT /* v1 */ \
}, \
}
// clang-format on
/**
* Function to create a serialization target __serializationTarget__ from the information in
* __serializationTargetInfo__.
* @param[in] serializationTargetConfig the information about the serialization target
* @param[in] configs the configurations for the serialization target
* @param[in] numConfigs the number of configuration options
* @param[out] serializationTarget handle to the serialization target. For use in subsequent calls .
*/
QNN_SYSTEM_API
Qnn_ErrorHandle_t QnnSystemProfile_createSerializationTarget(
QnnSystemProfile_SerializationTarget_t serializationTargetInfo,
QnnSystemProfile_SerializationTargetConfig_t* configs,
uint32_t numConfigs,
QnnSystemProfile_SerializationTargetHandle_t* serializationTarget);
/**
* Function to serialize and write provided event data __eventData__ to a serialization target
* __serializationTarget__.
* @param[in] serializationTarget the target to write the output to.
* @param[in] eventData the array of pointers to event data to serialize
* @param[in] numEvents the number of events to serialize
*/
QNN_SYSTEM_API
Qnn_ErrorHandle_t QnnSystemProfile_serializeEventData(
QnnSystemProfile_SerializationTargetHandle_t serializationTarget,
const QnnSystemProfile_ProfileData_t** eventData,
uint32_t numEvents);
/**
* Function to free a system serialization target.
* @param[in] serializationTarget handle to free the serialization target.
*/
QNN_SYSTEM_API
Qnn_ErrorHandle_t QnnSystemProfile_freeSerializationTarget(
QnnSystemProfile_SerializationTargetHandle_t serializationTarget);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // QNN_SYSTEM_PROFILE_H