|
|
|
@ -476,7 +476,7 @@ public: |
|
|
|
|
class CV_EXPORTS IntrumentationRegion |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
IntrumentationRegion(const char* funName, const char* fileName, int lineNum, int instrType = TYPE_GENERAL, int implType = IMPL_PLAIN); |
|
|
|
|
IntrumentationRegion(const char* funName, const char* fileName, int lineNum, TYPE instrType = TYPE_GENERAL, IMPL implType = IMPL_PLAIN); |
|
|
|
|
~IntrumentationRegion(); |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
@ -492,7 +492,7 @@ CV_EXPORTS InstrNode* getCurrentNode(); |
|
|
|
|
|
|
|
|
|
///// General instrumentation
|
|
|
|
|
// Instrument region
|
|
|
|
|
#define CV_INSTRUMENT_REGION_META(TYPE, IMPL, ...) ::cv::instr::IntrumentationRegion __instr_region__(__FUNCTION__, __FILE__, __LINE__, TYPE, IMPL); |
|
|
|
|
#define CV_INSTRUMENT_REGION_META(NAME, TYPE, IMPL) ::cv::instr::IntrumentationRegion __instr_region__(NAME, __FILE__, __LINE__, TYPE, IMPL); |
|
|
|
|
// Instrument functions with non-void return type
|
|
|
|
|
#define CV_INSTRUMENT_FUN_RT_META(TYPE, IMPL, ERROR_COND, FUN, ...) ([&]()\ |
|
|
|
|
{\
|
|
|
|
@ -502,12 +502,12 @@ CV_EXPORTS InstrNode* getCurrentNode(); |
|
|
|
|
auto status = ((FUN)(__VA_ARGS__));\
|
|
|
|
|
if(ERROR_COND){\
|
|
|
|
|
::cv::instr::getCurrentNode()->m_payload.m_funError = true;\
|
|
|
|
|
CV_INSTRUMENT_MARK_META(IMPL, ##FUN - BadExit);\
|
|
|
|
|
CV_INSTRUMENT_MARK_META(IMPL, #FUN " - BadExit");\
|
|
|
|
|
}\
|
|
|
|
|
return status;\
|
|
|
|
|
}catch(...){\
|
|
|
|
|
::cv::instr::getCurrentNode()->m_payload.m_funError = true;\
|
|
|
|
|
CV_INSTRUMENT_MARK_META(IMPL, ##FUN - BadExit);\
|
|
|
|
|
CV_INSTRUMENT_MARK_META(IMPL, #FUN " - BadExit");\
|
|
|
|
|
throw;\
|
|
|
|
|
}\
|
|
|
|
|
}else{\
|
|
|
|
@ -523,7 +523,7 @@ CV_EXPORTS InstrNode* getCurrentNode(); |
|
|
|
|
(FUN)(__VA_ARGS__);\
|
|
|
|
|
}catch(...){\
|
|
|
|
|
::cv::instr::getCurrentNode()->m_payload.m_funError = true;\
|
|
|
|
|
CV_INSTRUMENT_MARK_META(IMPL, ##FUN - BadExit);\
|
|
|
|
|
CV_INSTRUMENT_MARK_META(IMPL, #FUN "- BadExit");\
|
|
|
|
|
throw;\
|
|
|
|
|
}\
|
|
|
|
|
}else{\
|
|
|
|
@ -531,17 +531,17 @@ CV_EXPORTS InstrNode* getCurrentNode(); |
|
|
|
|
}\
|
|
|
|
|
}()) |
|
|
|
|
// Instrumentation information marker
|
|
|
|
|
#define CV_INSTRUMENT_MARK_META(IMPL, NAME, ...) {::cv::instr::IntrumentationRegion __instr_mark__(#NAME, __FILE__, __LINE__, ::cv::instr::TYPE_MARKER, IMPL);} |
|
|
|
|
#define CV_INSTRUMENT_MARK_META(IMPL, NAME, ...) {::cv::instr::IntrumentationRegion __instr_mark__(NAME, __FILE__, __LINE__, ::cv::instr::TYPE_MARKER, IMPL);} |
|
|
|
|
|
|
|
|
|
///// General instrumentation
|
|
|
|
|
// General OpenCV region instrumentation macro
|
|
|
|
|
#define CV_INSTRUMENT_REGION() CV_INSTRUMENT_REGION_META(cv::instr::TYPE_GENERAL, cv::instr::IMPL_PLAIN) |
|
|
|
|
#define CV_INSTRUMENT_REGION() CV_INSTRUMENT_REGION_META(__FUNCTION__, cv::instr::TYPE_GENERAL, cv::instr::IMPL_PLAIN) |
|
|
|
|
// Parallel OpenCV region instrumentation macro
|
|
|
|
|
#define CV_INSTRUMENT_REGION_MT() CV_INSTRUMENT_REGION_MT_META(cv::instr::TYPE_GENERAL, cv::instr::IMPL_PLAIN) |
|
|
|
|
|
|
|
|
|
///// IPP instrumentation
|
|
|
|
|
// Wrapper region instrumentation macro
|
|
|
|
|
#define CV_INSTRUMENT_REGION_IPP() CV_INSTRUMENT_REGION_META(::cv::instr::TYPE_WRAPPER, ::cv::instr::IMPL_IPP) |
|
|
|
|
#define CV_INSTRUMENT_REGION_IPP() CV_INSTRUMENT_REGION_META(__FUNCTION__, ::cv::instr::TYPE_WRAPPER, ::cv::instr::IMPL_IPP) |
|
|
|
|
// Function instrumentation macro
|
|
|
|
|
#define CV_INSTRUMENT_FUN_IPP(FUN, ...) CV_INSTRUMENT_FUN_RT_META(::cv::instr::TYPE_FUN, ::cv::instr::IMPL_IPP, status < 0, FUN, __VA_ARGS__) |
|
|
|
|
// Diagnostic markers
|
|
|
|
@ -549,12 +549,15 @@ CV_EXPORTS InstrNode* getCurrentNode(); |
|
|
|
|
|
|
|
|
|
///// OpenCL instrumentation
|
|
|
|
|
// Wrapper region instrumentation macro
|
|
|
|
|
#define CV_INSTRUMENT_REGION_OPENCL() CV_INSTRUMENT_REGION_META(::cv::instr::TYPE_WRAPPER, ::cv::instr::IMPL_OPENCL) |
|
|
|
|
#define CV_INSTRUMENT_REGION_OPENCL() CV_INSTRUMENT_REGION_META(__FUNCTION__, ::cv::instr::TYPE_WRAPPER, ::cv::instr::IMPL_OPENCL) |
|
|
|
|
#define CV_INSTRUMENT_REGION_OPENCL_(NAME) CV_INSTRUMENT_REGION_META(NAME, ::cv::instr::TYPE_WRAPPER, ::cv::instr::IMPL_OPENCL) |
|
|
|
|
// Function instrumentation macro
|
|
|
|
|
#define CV_INSTRUMENT_FUN_OPENCL_KERNEL(FUN, ...) CV_INSTRUMENT_FUN_RT_META(::cv::instr::TYPE_FUN, ::cv::instr::IMPL_OPENCL, status == 0, FUN, __VA_ARGS__) |
|
|
|
|
// Diagnostic markers
|
|
|
|
|
#define CV_INSTRUMENT_MARK_OPENCL(NAME) CV_INSTRUMENT_MARK_META(::cv::instr::IMPL_OPENCL, NAME) |
|
|
|
|
#else |
|
|
|
|
#define CV_INSTRUMENT_REGION_META(...) |
|
|
|
|
|
|
|
|
|
#define CV_INSTRUMENT_REGION() |
|
|
|
|
#define CV_INSTRUMENT_REGION_MT() |
|
|
|
|
|
|
|
|
@ -563,6 +566,7 @@ CV_EXPORTS InstrNode* getCurrentNode(); |
|
|
|
|
#define CV_INSTRUMENT_MARK_IPP(NAME) |
|
|
|
|
|
|
|
|
|
#define CV_INSTRUMENT_REGION_OPENCL() |
|
|
|
|
#define CV_INSTRUMENT_REGION_OPENCL_(...) |
|
|
|
|
#define CV_INSTRUMENT_FUN_OPENCL_KERNEL(FUN, ...) ((FUN)(__VA_ARGS__)) |
|
|
|
|
#define CV_INSTRUMENT_MARK_OPENCL(NAME) |
|
|
|
|
#endif |
|
|
|
|