1*614700edSBarry Smith /* $Id: plog.h,v 1.70 1996/04/17 02:47:05 curfman Exp bsmith $ */ 297bb86f7SLois Curfman McInnes 397bb86f7SLois Curfman McInnes /* 44c1da538SLois Curfman McInnes Defines high level logging in PETSc. 597bb86f7SLois Curfman McInnes */ 697bb86f7SLois Curfman McInnes 797bb86f7SLois Curfman McInnes #if !defined(__PLOG_PACKAGE) 897bb86f7SLois Curfman McInnes #define __PLOG_PACKAGE 997bb86f7SLois Curfman McInnes #include "petsc.h" 1097bb86f7SLois Curfman McInnes 1197bb86f7SLois Curfman McInnes /* 12c43cb918SSatish Balay If you add an event here, make sure you add to petsc/bin/petscview.cfg, 1355206aebSLois Curfman McInnes petsc/bin/petscview, petsc/src/plog/src/plog.c, and 1455206aebSLois Curfman McInnes petsc/src/plog/src/plogmpe.c!!! 1597bb86f7SLois Curfman McInnes */ 1697bb86f7SLois Curfman McInnes #define MAT_Mult 0 171ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult 1 181ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin 2 191ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd 3 201ff317f7SLois Curfman McInnes #define MAT_GetReordering 4 211ff317f7SLois Curfman McInnes #define MAT_MultTrans 5 221ff317f7SLois Curfman McInnes #define MAT_MultAdd 6 231ff317f7SLois Curfman McInnes #define MAT_MultTransAdd 7 241ff317f7SLois Curfman McInnes #define MAT_LUFactor 8 251ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor 9 261ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 10 271ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 11 281ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 12 291ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 13 301ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric 14 311ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 15 321ff317f7SLois Curfman McInnes #define MAT_Relax 16 331ff317f7SLois Curfman McInnes #define MAT_Copy 17 341ff317f7SLois Curfman McInnes #define MAT_Convert 18 351ff317f7SLois Curfman McInnes #define MAT_Scale 19 361ff317f7SLois Curfman McInnes #define MAT_ZeroEntries 20 371ff317f7SLois Curfman McInnes #define MAT_Solve 21 381ff317f7SLois Curfman McInnes #define MAT_SolveAdd 22 391ff317f7SLois Curfman McInnes #define MAT_SolveTrans 23 401ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd 24 411ff317f7SLois Curfman McInnes #define MAT_SetValues 25 421ff317f7SLois Curfman McInnes #define MAT_ForwardSolve 26 431ff317f7SLois Curfman McInnes #define MAT_BackwardSolve 27 441ff317f7SLois Curfman McInnes #define MAT_Load 28 451ff317f7SLois Curfman McInnes #define MAT_View 29 461ff317f7SLois Curfman McInnes #define MAT_ILUFactor 30 471ff317f7SLois Curfman McInnes #define MAT_GetSubMatrix 31 481ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices 32 491ff317f7SLois Curfman McInnes #define MAT_GetValues 33 501ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap 34 51dd8bebb4SSatish Balay #define MAT_GetRow 35 5297bb86f7SLois Curfman McInnes 534dcbc457SBarry Smith #define VEC_Dot 40 544dcbc457SBarry Smith #define VEC_Norm 41 554dcbc457SBarry Smith #define VEC_Max 42 564dcbc457SBarry Smith #define VEC_Min 43 574dcbc457SBarry Smith #define VEC_TDot 44 584dcbc457SBarry Smith #define VEC_Scale 45 594dcbc457SBarry Smith #define VEC_Copy 46 604dcbc457SBarry Smith #define VEC_Set 47 614dcbc457SBarry Smith #define VEC_AXPY 48 624dcbc457SBarry Smith #define VEC_AYPX 49 634dcbc457SBarry Smith #define VEC_Swap 50 644dcbc457SBarry Smith #define VEC_WAXPY 51 654dcbc457SBarry Smith #define VEC_AssemblyBegin 52 664dcbc457SBarry Smith #define VEC_AssemblyEnd 53 674dcbc457SBarry Smith #define VEC_MTDot 54 684dcbc457SBarry Smith #define VEC_MDot 55 694dcbc457SBarry Smith #define VEC_MAXPY 56 704dcbc457SBarry Smith #define VEC_PMult 57 714dcbc457SBarry Smith #define VEC_SetValues 58 724dcbc457SBarry Smith #define VEC_Load 59 734dcbc457SBarry Smith #define VEC_View 60 744dcbc457SBarry Smith #define VEC_ScatterBegin 61 754dcbc457SBarry Smith #define VEC_ScatterEnd 62 76bf5bf444SLois Curfman McInnes #define VEC_SetRandom 63 7797bb86f7SLois Curfman McInnes 784dcbc457SBarry Smith #define SLES_Solve 70 794dcbc457SBarry Smith #define SLES_SetUp 71 8097bb86f7SLois Curfman McInnes 814dcbc457SBarry Smith #define KSP_GMRESOrthogonalization 72 8297bb86f7SLois Curfman McInnes 834dcbc457SBarry Smith #define PC_SetUp 75 8436058207SBarry Smith #define PC_SetUpOnBlocks 76 8532284f49SSatish Balay #define PC_Apply 77 86*614700edSBarry Smith #define PC_ApplySymmetricLeft 78 87*614700edSBarry Smith #define PC_ApplySymmetricRight 79 884dcbc457SBarry Smith 894dcbc457SBarry Smith #define SNES_Solve 80 904dcbc457SBarry Smith #define SNES_LineSearch 81 914dcbc457SBarry Smith #define SNES_FunctionEval 82 924dcbc457SBarry Smith #define SNES_JacobianEval 83 934dcbc457SBarry Smith #define SNES_MinimizationFunctionEval 84 944dcbc457SBarry Smith #define SNES_GradientEval 85 954dcbc457SBarry Smith #define SNES_HessianEval 86 964dcbc457SBarry Smith 97682d7d0cSBarry Smith #define TS_Step 90 9872936c9dSBarry Smith 9972936c9dSBarry Smith #define Petsc_Barrier 100 10055206aebSLois Curfman McInnes 10155206aebSLois Curfman McInnes #define DFVec_RefineVector 110 10255206aebSLois Curfman McInnes #define DFVec_AssembleFullVector 111 10355206aebSLois Curfman McInnes #define DFVec_GetComponentVectors 112 10455206aebSLois Curfman McInnes #define DFVec_DrawContours 113 10555206aebSLois Curfman McInnes 10641debaddSBarry Smith /* 107b3b1b5bfSLois Curfman McInnes Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved 10877c4ece6SBarry Smith for applications. Make sure that src/plog/src/plog.c defines enough 109b3b1b5bfSLois Curfman McInnes entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH. 11041debaddSBarry Smith */ 11135aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC 120 1124dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH 200 11397bb86f7SLois Curfman McInnes 11419b02663SBarry Smith /* Global flop counter */ 11519b02663SBarry Smith extern double _TotalFlops; 11619b02663SBarry Smith 117edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */ 11894a424c1SBarry Smith extern int PLogInfo(void*,char*,...); 119*614700edSBarry Smith extern int PLogInfoDeActivateClass(int); 120*614700edSBarry Smith extern int PLogInfoActivateClass(int); 121*614700edSBarry Smith 122*614700edSBarry Smith #if defined(PETSC_LOG) /* --------------------------------------------*/ 123*614700edSBarry Smith 124*614700edSBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 12577c4ece6SBarry Smith 12677c4ece6SBarry Smith #if defined (HAVE_MPE) 12777c4ece6SBarry Smith #include "mpe.h" 128*614700edSBarry Smith #define MPEBEGIN 1000 12977c4ece6SBarry Smith extern int PLogMPEBegin(); 13077c4ece6SBarry Smith extern int PLogMPEDump(char *); 131*614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[]; 132*614700edSBarry Smith extern int PLogEventMPEActivate(int); 133*614700edSBarry Smith extern int PLogEventMPEDeActivate(int); 134*614700edSBarry Smith #else 135*614700edSBarry Smith #define PLogEventMPEActivate(a) 136*614700edSBarry Smith #define PLogEventMPEDeActivate(a) 13777c4ece6SBarry Smith #endif 13877c4ece6SBarry Smith 139*614700edSBarry Smith extern int PLogEventActivate(int); 140*614700edSBarry Smith extern int PLogEventDeActivate(int); 141*614700edSBarry Smith 142*614700edSBarry Smith extern int PLogEventActivateClass(); 143*614700edSBarry Smith extern int PLogEventDeActivateClass(); 144*614700edSBarry Smith 145*614700edSBarry Smith extern int PLogEventFlags[]; 14677c4ece6SBarry Smith extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 14777c4ece6SBarry Smith extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 14877c4ece6SBarry Smith extern int (*_PHC)(PetscObject); 14977c4ece6SBarry Smith extern int (*_PHD)(PetscObject); 15077c4ece6SBarry Smith 15177c4ece6SBarry Smith #if defined(HAVE_MPE) 15277c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 15377c4ece6SBarry Smith { _tacky++; \ 154*614700edSBarry Smith if (_PLB && PLogEventFlags[e]) \ 15577c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 156*614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 15777c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e,0,"");\ 15877c4ece6SBarry Smith } 15977c4ece6SBarry Smith #else 16077c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \ 16177c4ece6SBarry Smith { _tacky++; \ 162*614700edSBarry Smith if (_PLB && PLogEventFlags[e]) \ 16377c4ece6SBarry Smith (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 16477c4ece6SBarry Smith } 16577c4ece6SBarry Smith #endif 16677c4ece6SBarry Smith 16777c4ece6SBarry Smith #if defined(HAVE_MPE) 16877c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 169*614700edSBarry Smith if (_PLE && PLogEventFlags[e]) \ 17077c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 171*614700edSBarry Smith if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\ 17277c4ece6SBarry Smith MPE_Log_event(MPEBEGIN+2*e+1,0,"");\ 17377c4ece6SBarry Smith } _tacky--;} 17477c4ece6SBarry Smith #else 17577c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\ 176*614700edSBarry Smith if (_PLE && PLogEventFlags[e]) \ 17777c4ece6SBarry Smith (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\ 17877c4ece6SBarry Smith } _tacky--;} 17977c4ece6SBarry Smith #endif 18077c4ece6SBarry Smith 18177c4ece6SBarry Smith 18277c4ece6SBarry Smith #define PLogObjectParent(p,c) {PetscValidHeader((PetscObject)c); \ 18377c4ece6SBarry Smith PetscValidHeader((PetscObject)p);\ 18477c4ece6SBarry Smith ((PetscObject)(c))->parent = (PetscObject) p;} 18577c4ece6SBarry Smith #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 18677c4ece6SBarry Smith PLogObjectParent(p,(d)[_i]);} 18777c4ece6SBarry Smith #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 18877c4ece6SBarry Smith #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 18977c4ece6SBarry Smith #define PLogObjectMemory(p,m) {PetscValidHeader((PetscObject)p);\ 19077c4ece6SBarry Smith ((PetscObject)(p))->mem += (m);} 19177c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...); 19277c4ece6SBarry Smith extern int PLogDestroy(); 19377c4ece6SBarry Smith extern int PLogStagePush(int); 19477c4ece6SBarry Smith extern int PLogStagePop(); 19577c4ece6SBarry Smith extern int PLogStageRegister(int,char*); 196edde42fcSLois Curfman McInnes extern int PLogPrintSummary(MPI_Comm,FILE *); 197edde42fcSLois Curfman McInnes extern int PLogBegin(); 198edde42fcSLois Curfman McInnes extern int PLogAllBegin(); 199edde42fcSLois Curfman McInnes extern int PLogDump(char*); 200edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*); 20177c4ece6SBarry Smith 202*614700edSBarry Smith 203*614700edSBarry Smith #else /* ------------------------------------------------------------*/ 204*614700edSBarry Smith 205*614700edSBarry Smith #define PLogFlops(n) 206*614700edSBarry Smith 207*614700edSBarry Smith #if defined (HAVE_MPE) 208*614700edSBarry Smith #define MPEBEGIN 1000 209*614700edSBarry Smith extern int PLogMPEBegin(); 210*614700edSBarry Smith extern int PLogMPEDump(char *); 21177c4ece6SBarry Smith #else 212*614700edSBarry Smith #define PLogEventMPEActivate(a) 213*614700edSBarry Smith #define PLogEventMPEDeActivate(a) 214*614700edSBarry Smith #endif 215*614700edSBarry Smith 216*614700edSBarry Smith #define PLogEventActivate(a) 217*614700edSBarry Smith #define PLogEventDeActivate(a) 218*614700edSBarry Smith 219*614700edSBarry Smith #define PLogEventActivateClass() 220*614700edSBarry Smith #define PLogEventDeActivateClass() 22177c4ece6SBarry Smith 2227f8359c1SLois Curfman McInnes #define _PLB 0 2237f8359c1SLois Curfman McInnes #define _PLE 0 2247f8359c1SLois Curfman McInnes #define _PHC 0 2257f8359c1SLois Curfman McInnes #define _PHD 0 226d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 227d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 228d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c) 229d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c) 230d7a720efSLois Curfman McInnes #define PLogObjectCreate(h) 231d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h) 232d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m) 233d7a720efSLois Curfman McInnes #define PLogDestroy() 234d7a720efSLois Curfman McInnes #define PLogStagePush(int) 235d7a720efSLois Curfman McInnes #define PLogStagePop() 236d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b) 237d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file) 238d7a720efSLois Curfman McInnes #define PLogBegin() 239d7a720efSLois Curfman McInnes #define PLogAllBegin() 240d7a720efSLois Curfman McInnes #define PLogDump(char) 241d7a720efSLois Curfman McInnes #define PLogEventRegister(a,b,c) 242d7a720efSLois Curfman McInnes #define PLogMPEBegin() 243d7a720efSLois Curfman McInnes #define PLogMPEDump(a) 2447f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 245edde42fcSLois Curfman McInnes 24677c4ece6SBarry Smith #endif 2476daaf66cSBarry Smith 2488b6d568bSLois Curfman McInnes /*MC 24919b02663SBarry Smith PLogFlops - Adds floating point operations to the global counter. 25019b02663SBarry Smith 25119b02663SBarry Smith Input Parameter: 25219b02663SBarry Smith . f - flop counter 25319b02663SBarry Smith 25419b02663SBarry Smith Synopsis: 255682ac3c9SWilliam Gropp void PLogFlops(int f) 25619b02663SBarry Smith 25719b02663SBarry Smith Notes: 25819b02663SBarry Smith A global counter logs all PETSc flop counts. The user can use 25919b02663SBarry Smith PLogFlops() to increment this counter to include flops for the 26019b02663SBarry Smith application code. 26119b02663SBarry Smith 26219b02663SBarry Smith PETSc automatically logs library events if the code has been 26319b02663SBarry Smith compiled with -DPETSC_LOG (which is the default), and -log, 26419b02663SBarry Smith -log_summary, or -log_all are specified. PLogFlops() is 26519b02663SBarry Smith intended for logging user flops to supplement this PETSc 26619b02663SBarry Smith information. 26719b02663SBarry Smith 26819b02663SBarry Smith Example of Usage: 26935aab85fSBarry Smith $ int USER_EVENT; 270b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 27119b02663SBarry Smith $ PLogEventBegin(USER_EVENT,0,0,0,0); 27219b02663SBarry Smith $ [code segment to monitor] 27319b02663SBarry Smith $ PLogFlops(user_flops) 27419b02663SBarry Smith $ PLogEventEnd(USER_EVENT,0,0,0,0); 27519b02663SBarry Smith 27658cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops() 27719b02663SBarry Smith 278edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations 27919b02663SBarry Smith M*/ 28019b02663SBarry Smith 28197bb86f7SLois Curfman McInnes 282d7a720efSLois Curfman McInnes /*MC 28319b02663SBarry Smith PLogEventBegin - Logs the beginning of a user event. 28497bb86f7SLois Curfman McInnes 28597bb86f7SLois Curfman McInnes Input Parameters: 28635aab85fSBarry Smith . e - integer associated with the event obtained from PLogEventRegister() 28797bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 28897bb86f7SLois Curfman McInnes 28997bb86f7SLois Curfman McInnes Synopsis: 290682ac3c9SWilliam Gropp void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 29197bb86f7SLois Curfman McInnes PetscObject o4) 29297bb86f7SLois Curfman McInnes 29397bb86f7SLois Curfman McInnes Notes: 29497bb86f7SLois Curfman McInnes You should also register each integer event with the command 29597bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 29697bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 29797bb86f7SLois Curfman McInnes 29897bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 29997bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 30097bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 30197bb86f7SLois Curfman McInnes to supplement this PETSc information. 30297bb86f7SLois Curfman McInnes 30397bb86f7SLois Curfman McInnes Example of Usage: 30435aab85fSBarry Smith $ int USER_EVENT; 3050eb211faSLois Curfman McInnes $ int user_event_flops; 306b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 30735aab85fSBarry Smith $ PLogEventBegin(&USER_EVENT,0,0,0,0); 30897bb86f7SLois Curfman McInnes $ [code segment to monitor] 3090eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 31035aab85fSBarry Smith $ PLogEventEnd(&USER_EVENT,0,0,0,0); 31197bb86f7SLois Curfman McInnes 31297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 31397bb86f7SLois Curfman McInnes 31497bb86f7SLois Curfman McInnes .keywords: log, event, begin 31597bb86f7SLois Curfman McInnes M*/ 31697bb86f7SLois Curfman McInnes 317d7a720efSLois Curfman McInnes /*MC 31819b02663SBarry Smith PLogEventEnd - Log the end of a user event. 31997bb86f7SLois Curfman McInnes 32097bb86f7SLois Curfman McInnes Input Parameters: 32135aab85fSBarry Smith . e - integer associated with the event obtained with PLogEventRegister() 32297bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 32397bb86f7SLois Curfman McInnes 32497bb86f7SLois Curfman McInnes Synopsis: 325682ac3c9SWilliam Gropp void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 32697bb86f7SLois Curfman McInnes PetscObject o4) 32797bb86f7SLois Curfman McInnes 32897bb86f7SLois Curfman McInnes Notes: 32997bb86f7SLois Curfman McInnes You should also register each integer event with the command 33097bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 33197bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 33297bb86f7SLois Curfman McInnes 33397bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 33497bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 33597bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 33697bb86f7SLois Curfman McInnes to supplement this PETSc information. 33797bb86f7SLois Curfman McInnes 33897bb86f7SLois Curfman McInnes Example of Usage: 33935aab85fSBarry Smith $ int USER_EVENT; 3400eb211faSLois Curfman McInnes $ int user_event_flops; 341b045bd31SSatish Balay $ PLogEventRegister(&USER_EVENT,"User event","Color:"); 34297bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 34397bb86f7SLois Curfman McInnes $ [code segment to monitor] 3440eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 34597bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 34697bb86f7SLois Curfman McInnes 34797bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 34897bb86f7SLois Curfman McInnes 34997bb86f7SLois Curfman McInnes .keywords: log, event, end 35097bb86f7SLois Curfman McInnes M*/ 35197bb86f7SLois Curfman McInnes 35297bb86f7SLois Curfman McInnes #endif 35341debaddSBarry Smith 35477c4ece6SBarry Smith 35577c4ece6SBarry Smith 356