UsingomniORBinterceptorstorecordtimecostedinCORBAcalls
struct CallInfo{
std::string opname;
DWORD time;
};
std::map<DWORD, std::stack<CallInfo> > calls;
static CORBA::Boolean sendReqFunc(omni::omniInterceptors::clientSendRequest_T::info_T& info)
{
if(!info.response_expected){
CallInfo c;
c.opname = info.opname;
c.time = ::GetTickCount();
calls[GetCurrentThreadId()].push(c);
}
return TRUE;
}
static CORBA::Boolean receiveRepFunc(omni::omniInterceptors::clientReceiveReply_T::info_T& info)
{
DWORD t = ::GetTickCount();
if(!calls[GetCurrentThreadId()].empty()){
const CallInfo& c = calls[GetCurrentThreadId()].top();
TRACE("==== %s , %d ms ====\n", c.opname.c_str(), t - c.time);
calls[GetCurrentThreadId()].pop();
}
return TRUE;
}
And here is how to register the inteceptors after the ORB_init call:
omni::omniInterceptors* interceptors = omniORB::getInterceptors();
interceptors->clientSendRequest.add(sendReqFunc);
interceptors->clientReceiveReply.add(receiveRepFunc);