10970d93fSToby Isaac #include <petsc/private/loghandlerimpl.h>
20970d93fSToby Isaac
30970d93fSToby Isaac typedef struct _n_PetscLogHandler_Legacy *PetscLogHandler_Legacy;
40970d93fSToby Isaac struct _n_PetscLogHandler_Legacy {
50970d93fSToby Isaac PetscErrorCode (*PetscLogPLB)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
60970d93fSToby Isaac PetscErrorCode (*PetscLogPLE)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
70970d93fSToby Isaac PetscErrorCode (*PetscLogPHC)(PetscObject);
80970d93fSToby Isaac PetscErrorCode (*PetscLogPHD)(PetscObject);
90970d93fSToby Isaac };
100970d93fSToby Isaac
PetscLogHandlerEventBegin_Legacy(PetscLogHandler handler,PetscLogEvent e,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4)110970d93fSToby Isaac static PetscErrorCode PetscLogHandlerEventBegin_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
120970d93fSToby Isaac {
130970d93fSToby Isaac PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
140970d93fSToby Isaac
15f4f49eeaSPierre Jolivet return (*legacy->PetscLogPLB)(e, 0, o1, o2, o3, o4);
160970d93fSToby Isaac }
170970d93fSToby Isaac
PetscLogHandlerEventEnd_Legacy(PetscLogHandler handler,PetscLogEvent e,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4)180970d93fSToby Isaac static PetscErrorCode PetscLogHandlerEventEnd_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
190970d93fSToby Isaac {
200970d93fSToby Isaac PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
210970d93fSToby Isaac
22f4f49eeaSPierre Jolivet return (*legacy->PetscLogPLE)(e, 0, o1, o2, o3, o4);
230970d93fSToby Isaac }
240970d93fSToby Isaac
PetscLogHandlerObjectCreate_Legacy(PetscLogHandler handler,PetscObject o)250970d93fSToby Isaac static PetscErrorCode PetscLogHandlerObjectCreate_Legacy(PetscLogHandler handler, PetscObject o)
260970d93fSToby Isaac {
270970d93fSToby Isaac PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
280970d93fSToby Isaac
29f4f49eeaSPierre Jolivet return (*legacy->PetscLogPHC)(o);
300970d93fSToby Isaac }
310970d93fSToby Isaac
PetscLogHandlerObjectDestroy_Legacy(PetscLogHandler handler,PetscObject o)320970d93fSToby Isaac static PetscErrorCode PetscLogHandlerObjectDestroy_Legacy(PetscLogHandler handler, PetscObject o)
330970d93fSToby Isaac {
340970d93fSToby Isaac PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
350970d93fSToby Isaac
36f4f49eeaSPierre Jolivet return (*legacy->PetscLogPHD)(o);
370970d93fSToby Isaac }
380970d93fSToby Isaac
PetscLogHandlerDestroy_Legacy(PetscLogHandler handler)39*54c05997SPierre Jolivet static PetscErrorCode PetscLogHandlerDestroy_Legacy(PetscLogHandler handler)
400970d93fSToby Isaac {
410970d93fSToby Isaac PetscFunctionBegin;
420970d93fSToby Isaac PetscCall(PetscFree(handler->data));
430970d93fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS);
440970d93fSToby Isaac }
450970d93fSToby Isaac
460970d93fSToby Isaac /*MC
47294de794SToby Isaac PETSCLOGHANDLERLEGACY - PETSCLOGHANDLERLEGACY = "legacy" - A
480970d93fSToby Isaac `PetscLogHandler` that can be constructed from the callbacks used in
49b665b14eSToby Isaac `PetscLogSet()`. A log handler of this type is created and started by
50b665b14eSToby Isaac `PetscLogLegacyCallbacksBegin()`.
510970d93fSToby Isaac
520970d93fSToby Isaac Level: developer
530970d93fSToby Isaac
540970d93fSToby Isaac .seealso: [](ch_profiling), `PetscLogHandler`, `PetscLogHandlerCreateLegacy()`
550970d93fSToby Isaac M*/
560970d93fSToby Isaac
PetscLogHandlerCreate_Legacy(PetscLogHandler handler)570970d93fSToby Isaac PETSC_INTERN PetscErrorCode PetscLogHandlerCreate_Legacy(PetscLogHandler handler)
580970d93fSToby Isaac {
590970d93fSToby Isaac PetscLogHandler_Legacy legacy;
600970d93fSToby Isaac
610970d93fSToby Isaac PetscFunctionBegin;
620970d93fSToby Isaac PetscCall(PetscNew(&legacy));
630970d93fSToby Isaac handler->data = (void *)legacy;
64*54c05997SPierre Jolivet handler->ops->destroy = PetscLogHandlerDestroy_Legacy;
650970d93fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS);
660970d93fSToby Isaac }
670970d93fSToby Isaac
680970d93fSToby Isaac /*@C
690970d93fSToby Isaac PetscLogHandlerCreateLegacy - Create a `PetscLogHandler` from callbacks matching PETSc's legacy log handler callbacks
700970d93fSToby Isaac
710970d93fSToby Isaac Collective
720970d93fSToby Isaac
730970d93fSToby Isaac Input Parameters:
740970d93fSToby Isaac + comm - an MPI communicator
750970d93fSToby Isaac . PetscLogPLB - a function to call during `PetscLogHandlerEventBegin()` (or `NULL`)
760970d93fSToby Isaac . PetscLogPLE - a function to call during `PetscLogHandlerEventEnd()` (or `NULL`)
770970d93fSToby Isaac . PetscLogPHC - a function to call during `PetscLogHandlerObjectCreate()` (or `NULL`)
780970d93fSToby Isaac - PetscLogPHD - a function to call during `PetscLogHandlerObjectDestroy()` (or `NULL`)
790970d93fSToby Isaac
800970d93fSToby Isaac Output Parameter:
810970d93fSToby Isaac . handler - a `PetscLogHandler`
820970d93fSToby Isaac
830970d93fSToby Isaac Calling sequence of `PetscLogPLB`:
840970d93fSToby Isaac + e - a `PetscLogEvent` that is beginning
850970d93fSToby Isaac . _i - deprecated, unused
860970d93fSToby Isaac . o1 - a `PetscObject` associated with `e` (or `NULL`)
870970d93fSToby Isaac . o2 - a `PetscObject` associated with `e` (or `NULL`)
880970d93fSToby Isaac . o3 - a `PetscObject` associated with `e` (or `NULL`)
890970d93fSToby Isaac - o4 - a `PetscObject` associated with `e` (or `NULL`)
900970d93fSToby Isaac
910970d93fSToby Isaac Calling sequence of `PetscLogPLE`:
920970d93fSToby Isaac + e - a `PetscLogEvent` that is beginning
930970d93fSToby Isaac . _i - deprecated, unused
940970d93fSToby Isaac . o1 - a `PetscObject` associated with `e` (or `NULL`)
950970d93fSToby Isaac . o2 - a `PetscObject` associated with `e` (or `NULL`)
960970d93fSToby Isaac . o3 - a `PetscObject` associated with `e` (or `NULL`)
970970d93fSToby Isaac - o4 - a `PetscObject` associated with `e` (or `NULL`)
980970d93fSToby Isaac
990970d93fSToby Isaac Calling sequence of `PetscLogPHC`:
1000970d93fSToby Isaac . o - a `PetscObject` that has just been created
1010970d93fSToby Isaac
1020970d93fSToby Isaac Calling sequence of `PetscLogPHD`:
1030970d93fSToby Isaac . o - a `PetscObject` that is about to be destroyed
1040970d93fSToby Isaac
1050970d93fSToby Isaac Level: developer
1060970d93fSToby Isaac
1070970d93fSToby Isaac Notes:
1080970d93fSToby Isaac This is for transitioning from the deprecated function `PetscLogSet()` and should not be used in new code.
1090970d93fSToby Isaac
1100970d93fSToby Isaac `PetscLogLegacyCallbacksBegin()`, which calls this function, creates and starts (`PetscLogHandlerStart()`) a log handler,
1110970d93fSToby Isaac should be used in almost all cases.
1120970d93fSToby Isaac
1130970d93fSToby Isaac .seealso: [](ch_profiling)
1140970d93fSToby Isaac @*/
PetscLogHandlerCreateLegacy(MPI_Comm comm,PetscErrorCode (* PetscLogPLB)(PetscLogEvent e,int _i,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4),PetscErrorCode (* PetscLogPLE)(PetscLogEvent e,int _i,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4),PetscErrorCode (* PetscLogPHC)(PetscObject o),PetscErrorCode (* PetscLogPHD)(PetscObject o),PetscLogHandler * handler)1150970d93fSToby Isaac PetscErrorCode PetscLogHandlerCreateLegacy(MPI_Comm comm, PetscErrorCode (*PetscLogPLB)(PetscLogEvent e, int _i, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4), PetscErrorCode (*PetscLogPLE)(PetscLogEvent e, int _i, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4), PetscErrorCode (*PetscLogPHC)(PetscObject o), PetscErrorCode (*PetscLogPHD)(PetscObject o), PetscLogHandler *handler)
1160970d93fSToby Isaac {
1170970d93fSToby Isaac PetscLogHandler_Legacy legacy;
1180970d93fSToby Isaac PetscLogHandler h;
1194d86920dSPierre Jolivet
1200970d93fSToby Isaac PetscFunctionBegin;
1210970d93fSToby Isaac PetscCall(PetscLogHandlerCreate(comm, handler));
1220970d93fSToby Isaac h = *handler;
123294de794SToby Isaac PetscCall(PetscLogHandlerSetType(h, PETSCLOGHANDLERLEGACY));
1240970d93fSToby Isaac legacy = (PetscLogHandler_Legacy)h->data;
1250970d93fSToby Isaac
1260970d93fSToby Isaac legacy->PetscLogPLB = PetscLogPLB;
1270970d93fSToby Isaac legacy->PetscLogPLE = PetscLogPLE;
1280970d93fSToby Isaac legacy->PetscLogPHC = PetscLogPHC;
1290970d93fSToby Isaac legacy->PetscLogPHD = PetscLogPHD;
1300970d93fSToby Isaac
1310970d93fSToby Isaac h->ops->eventbegin = PetscLogPLB ? PetscLogHandlerEventBegin_Legacy : NULL;
1320970d93fSToby Isaac h->ops->eventend = PetscLogPLE ? PetscLogHandlerEventEnd_Legacy : NULL;
1330970d93fSToby Isaac h->ops->objectcreate = PetscLogPHC ? PetscLogHandlerObjectCreate_Legacy : NULL;
1340970d93fSToby Isaac h->ops->objectdestroy = PetscLogPHD ? PetscLogHandlerObjectDestroy_Legacy : NULL;
1350970d93fSToby Isaac PetscFunctionReturn(PETSC_SUCCESS);
1360970d93fSToby Isaac }
137