forked from GPUOpen-Tools/radeon_compute_profiler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
HSAObjRefTracker.h
82 lines (64 loc) · 3.04 KB
/
HSAObjRefTracker.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//==============================================================================
// Copyright (c) 2015 Advanced Micro Devices, Inc. All rights reserved.
/// \author AMD Developer Tools Team
/// \file
/// \brief This analyzer class tracks HSA object create, release and generates warning messages
//==============================================================================
#ifndef _HSA_OBJ_REF_TRACKER_H_
#define _HSA_OBJ_REF_TRACKER_H_
#include <map>
#include <string>
#include <list>
#include "HSAAPIAnalyzer.h"
#include "ObjRefTracker.h"
//------------------------------------------------------------------------------------
/// HSA Reference tracker
//------------------------------------------------------------------------------------
class HSAObjRefTracker : public HSAAPIAnalyzer
{
public:
/// Constructor
HSAObjRefTracker();
/// Destructor
~HSAObjRefTracker(void);
/// Analyze API
/// \param pAPIInfo APIInfo object
void Analyze(APIInfo* pAPIInfo);
/// Callback function for flattened APIs
/// \param pAPIInfo APIInfo object
void FlattenedAPIAnalyze(APIInfo* pAPIInfo);
/// Generate APIAnalyzerMessage
void EndAnalyze();
/// Override clear
void Clear();
private:
/// Copy constructor
/// \param obj object
HSAObjRefTracker(const HSAObjRefTracker& obj);
/// Assignment operator
/// \param obj object
/// \return ref to itself
const HSAObjRefTracker& operator = (const HSAObjRefTracker& obj);
/// Helper function that convert APIObjHistoryList to string
/// \param list APIObjHistoryList object
/// \return string representation of APIObjHistoryList
std::string APIObjHistoryListToString(APIObjHistoryList* list);
/// Helper function that records resource creation APIs
/// \param pAPIInfo APIInfo object
/// \param shouldCheckRetVal if true, resource creation will only be recorded if the API's return code indicates success
void RecordResourceCreate(HSAAPIInfo* pAPIInfo, bool shouldCheckRetVal = true);
/// Helper function that records resource free APIs
/// \param pAPIInfo APIInfo object
/// \param shouldCheckRetVal if true, resource creation will only be recorded if the API's return code indicates success
void RecordResourceFree(HSAAPIInfo* pAPIInfo, bool shouldCheckRetVal = true);
/// Get the resource handle string for the object whose resource is being tracked
/// \param pAPIInfo the api info instance whose parameter is the a resource begin tracked
/// \return string representation of the resource beign tracked
std::string GetResourceHandle(HSAAPIInfo* pAPIInfo);
static const std::string ms_HSA_RUNTIME_REF; ///< a special tag to allow tracking of hsa_init/hsa_shut_down
static const std::string ms_HSA_STATUS_SUCCESS; ///< "HSA_STATUS_SUCCESS" string
APITraceMap m_objRefHistoryMap; ///< HSA Object reference history map
/// map from HSA API to the out parameter index that contains the resource to track
std::map<HSA_API_Type, unsigned int> m_resourceArgMap;
};
#endif //_HSA_OBJ_REF_TRACKER_H_