Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

154 lines
3.7 KiB

/* --------------------------------------------------------------------
Microsoft OS/2 LAN Manager
Copyright(c) Microsoft Corp., 1990
-------------------------------------------------------------------- */
/* --------------------------------------------------------------------
File: rpcdebug.hxx
Description:
This file describes the interface to the runtime trace facility. These
entry points are for internal use by the runtime only.
-------------------------------------------------------------------- */
#ifndef __RPCDEBUG_HXX__
#define __RPCDEBUG_HXX__
#ifdef TIMERPC
#include "threads.hxx"
#include "osfpcket.hxx"
#endif // TIMERPC
START_C_EXTERN
extern int DebugApiFlag;
END_C_EXTERN
// Upon entry to each API, this routine should be called. If the
// appropriate debug level has been set, it will send a message to the
// RPC trace facility. The API parameter specifies a string name for
// the API.
#ifdef DEBUGRPC
#define DebugApiEntry(API) \
if (DebugApiFlag) \
PrintToDebugger("%s (entry)\n",API)
#else
#define DebugApiEntry(API)
#endif
// Upon exit from each API, this routine should be called. Note that
// the Status parameter is just returned from DebugAPIExit. This allows
// code to be written in the following style:
//
// :
// return(DebugAPIExit("RpcAPI",retval));
// }
#ifdef DEBUGRPC
#define DebugApiExit(API,Status) \
(DebugApiFlag \
? (PrintToDebugger("%s (exit) [%08lx]\n",API,Status),Status) \
: Status)
#else
#define DebugApiExit(API,Status) Status
#endif
// When an internal error occurs in the RPC system, this routine will be
// called. This will result in a panic message being sent to the RPC trace
// facility.
#ifdef DEBUGRPC
#define DebugPanic(Panic) PrintToDebugger(Panic)
#else
#define DebugPanic(Panic)
#endif
#ifdef DEBUGRPC
#define DebugInternal(Msg) PrintToDebugger(Msg)
#else
#define DebugInternal(Msg)
#endif
#endif /* __RPCDEBUG_HXX__ */
// Following are functions to time the performace of the runtime.
#ifdef TIMERPC
void RPC_ENTRY _StartTimeApi(unsigned long *CurrentApiTime);
void RPC_ENTRY _DoneTimeApi(char *Name, unsigned long *CurrentApiTime);
extern char fTimeYield;
#define StartTimeApi() \
unsigned long CurrentApiTime[TIME_MAX]; \
_StartTimeApi(CurrentApiTime);
inline void ChargeTime(TIME_SLOT Account)
{
ThreadSelf()->ChargeTime(Account);
}
inline void ResetTimeAux()
{
ThreadSelf()->ResetTimeAux();
}
inline void StampTimeUsed(void PAPI *pBuff)
{
THREAD *pThread = ThreadSelf();
pThread->ChargeTime(TIME_RUNTIME);
((rpcconn_common *)pBuff)->UserTime =
pThread->GetTime()[TIME_RUNTIME] +
pThread->GetTime()[TIME_STUB] +
pThread->GetTime()[TIME_USER] ;
((rpcconn_common *)pBuff)->ElapseTime = pThread->ReadTimeAux();
}
inline void AccountTimeTrans(void PAPI *pBuff)
{
THREAD * pThread = ThreadSelf();
pThread->ChargeTime(TIME_TRANSPORT);
// pThread->GetTime()[TIME_USER] = pThread->GetTime()[TIME_TRANSPORT];
// pThread->GetTime()[TIME_TRANSPORT] = ((rpcconn_common *)pBuff)->ElapseTime;
pThread->GetTime()[TIME_TRANSPORT] -= ((rpcconn_common *)pBuff)->ElapseTime;
pThread->GetTime()[TIME_USER] += ((rpcconn_common *)pBuff)->UserTime;
pThread->ResetTimeAux();
}
inline void AccountWriteTime()
{
THREAD * pThread = ThreadSelf();
#ifdef NTENV
if (fTimeYield)
PauseExecution(1L);
#endif // NTENV
pThread->ChargeTime(TIME_TRANSPORT);
pThread->ResetTimeAux();
}
#define DoneTimeApi(Name) \
_DoneTimeApi(Name, CurrentApiTime);
#else
#define StartTimeApi()
#define DoneTimeApi(Name)
#define ChargeTime(Account)
#define ResetTimeAux()
#define StampTimeUsed(pBuff)
#define AccountTimeTrans(pBuff)
#define AccountWriteTime()
#endif