xref: /petsc/src/sys/logging/handler/impls/legacy/loglegacy.c (revision 0970d93f389b89d61186faed376e9cc5531f567f)
1*0970d93fSToby Isaac #include <petsc/private/loghandlerimpl.h>
2*0970d93fSToby Isaac 
3*0970d93fSToby Isaac typedef struct _n_PetscLogHandler_Legacy *PetscLogHandler_Legacy;
4*0970d93fSToby Isaac struct _n_PetscLogHandler_Legacy {
5*0970d93fSToby Isaac   PetscErrorCode (*PetscLogPLB)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
6*0970d93fSToby Isaac   PetscErrorCode (*PetscLogPLE)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
7*0970d93fSToby Isaac   PetscErrorCode (*PetscLogPHC)(PetscObject);
8*0970d93fSToby Isaac   PetscErrorCode (*PetscLogPHD)(PetscObject);
9*0970d93fSToby Isaac };
10*0970d93fSToby Isaac 
11*0970d93fSToby Isaac static PetscErrorCode PetscLogHandlerEventBegin_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
12*0970d93fSToby Isaac {
13*0970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
14*0970d93fSToby Isaac 
15*0970d93fSToby Isaac   return (*(legacy->PetscLogPLB))(e, 0, o1, o2, o3, o4);
16*0970d93fSToby Isaac }
17*0970d93fSToby Isaac 
18*0970d93fSToby Isaac static PetscErrorCode PetscLogHandlerEventEnd_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
19*0970d93fSToby Isaac {
20*0970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
21*0970d93fSToby Isaac 
22*0970d93fSToby Isaac   return (*(legacy->PetscLogPLE))(e, 0, o1, o2, o3, o4);
23*0970d93fSToby Isaac }
24*0970d93fSToby Isaac 
25*0970d93fSToby Isaac static PetscErrorCode PetscLogHandlerObjectCreate_Legacy(PetscLogHandler handler, PetscObject o)
26*0970d93fSToby Isaac {
27*0970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
28*0970d93fSToby Isaac 
29*0970d93fSToby Isaac   return (*(legacy->PetscLogPHC))(o);
30*0970d93fSToby Isaac }
31*0970d93fSToby Isaac 
32*0970d93fSToby Isaac static PetscErrorCode PetscLogHandlerObjectDestroy_Legacy(PetscLogHandler handler, PetscObject o)
33*0970d93fSToby Isaac {
34*0970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
35*0970d93fSToby Isaac 
36*0970d93fSToby Isaac   return (*(legacy->PetscLogPHD))(o);
37*0970d93fSToby Isaac }
38*0970d93fSToby Isaac 
39*0970d93fSToby Isaac static PetscErrorCode PetcLogHandlerDestroy_Legacy(PetscLogHandler handler)
40*0970d93fSToby Isaac {
41*0970d93fSToby Isaac   PetscFunctionBegin;
42*0970d93fSToby Isaac   PetscCall(PetscFree(handler->data));
43*0970d93fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
44*0970d93fSToby Isaac }
45*0970d93fSToby Isaac 
46*0970d93fSToby Isaac /*MC
47*0970d93fSToby Isaac   PETSC_LOG_HANDLER_LEGACY - PETSC_LOG_HANDLER_LEGACY = "legacy" -  A
48*0970d93fSToby Isaac   `PetscLogHandler` that can be constructed from the callbacks used in
49*0970d93fSToby Isaac   `PetscLogSet()`.
50*0970d93fSToby Isaac 
51*0970d93fSToby Isaac   Level: developer
52*0970d93fSToby Isaac 
53*0970d93fSToby Isaac .seealso: [](ch_profiling), `PetscLogHandler`, `PetscLogHandlerCreateLegacy()`
54*0970d93fSToby Isaac M*/
55*0970d93fSToby Isaac 
56*0970d93fSToby Isaac PETSC_INTERN PetscErrorCode PetscLogHandlerCreate_Legacy(PetscLogHandler handler)
57*0970d93fSToby Isaac {
58*0970d93fSToby Isaac   PetscLogHandler_Legacy legacy;
59*0970d93fSToby Isaac 
60*0970d93fSToby Isaac   PetscFunctionBegin;
61*0970d93fSToby Isaac   PetscCall(PetscNew(&legacy));
62*0970d93fSToby Isaac   handler->data         = (void *)legacy;
63*0970d93fSToby Isaac   handler->ops->destroy = PetcLogHandlerDestroy_Legacy;
64*0970d93fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
65*0970d93fSToby Isaac }
66*0970d93fSToby Isaac 
67*0970d93fSToby Isaac /*@C
68*0970d93fSToby Isaac   PetscLogHandlerCreateLegacy - Create a `PetscLogHandler` from callbacks matching PETSc's legacy log handler callbacks
69*0970d93fSToby Isaac 
70*0970d93fSToby Isaac   Collective
71*0970d93fSToby Isaac 
72*0970d93fSToby Isaac   Input Parameters:
73*0970d93fSToby Isaac + comm        - an MPI communicator
74*0970d93fSToby Isaac . PetscLogPLB - a function to call during `PetscLogHandlerEventBegin()` (or `NULL`)
75*0970d93fSToby Isaac . PetscLogPLE - a function to call during `PetscLogHandlerEventEnd()` (or `NULL`)
76*0970d93fSToby Isaac . PetscLogPHC - a function to call during `PetscLogHandlerObjectCreate()` (or `NULL`)
77*0970d93fSToby Isaac - PetscLogPHD - a function to call during `PetscLogHandlerObjectDestroy()` (or `NULL`)
78*0970d93fSToby Isaac 
79*0970d93fSToby Isaac   Output Parameter:
80*0970d93fSToby Isaac . handler - a `PetscLogHandler`
81*0970d93fSToby Isaac 
82*0970d93fSToby Isaac   Calling sequence of `PetscLogPLB`:
83*0970d93fSToby Isaac + e  - a `PetscLogEvent` that is beginning
84*0970d93fSToby Isaac . _i - deprecated, unused
85*0970d93fSToby Isaac . o1 - a `PetscObject` associated with `e` (or `NULL`)
86*0970d93fSToby Isaac . o2 - a `PetscObject` associated with `e` (or `NULL`)
87*0970d93fSToby Isaac . o3 - a `PetscObject` associated with `e` (or `NULL`)
88*0970d93fSToby Isaac - o4 - a `PetscObject` associated with `e` (or `NULL`)
89*0970d93fSToby Isaac 
90*0970d93fSToby Isaac   Calling sequence of `PetscLogPLE`:
91*0970d93fSToby Isaac + e  - a `PetscLogEvent` that is beginning
92*0970d93fSToby Isaac . _i - deprecated, unused
93*0970d93fSToby Isaac . o1 - a `PetscObject` associated with `e` (or `NULL`)
94*0970d93fSToby Isaac . o2 - a `PetscObject` associated with `e` (or `NULL`)
95*0970d93fSToby Isaac . o3 - a `PetscObject` associated with `e` (or `NULL`)
96*0970d93fSToby Isaac - o4 - a `PetscObject` associated with `e` (or `NULL`)
97*0970d93fSToby Isaac 
98*0970d93fSToby Isaac   Calling sequence of `PetscLogPHC`:
99*0970d93fSToby Isaac . o - a `PetscObject` that has just been created
100*0970d93fSToby Isaac 
101*0970d93fSToby Isaac   Calling sequence of `PetscLogPHD`:
102*0970d93fSToby Isaac . o - a `PetscObject` that is about to be destroyed
103*0970d93fSToby Isaac 
104*0970d93fSToby Isaac   Level: developer
105*0970d93fSToby Isaac 
106*0970d93fSToby Isaac   Notes:
107*0970d93fSToby Isaac   This is for transitioning from the deprecated function `PetscLogSet()` and should not be used in new code.
108*0970d93fSToby Isaac 
109*0970d93fSToby Isaac   `PetscLogLegacyCallbacksBegin()`, which calls this function, creates and starts (`PetscLogHandlerStart()`) a log handler,
110*0970d93fSToby Isaac   should be used in almost all cases.
111*0970d93fSToby Isaac 
112*0970d93fSToby Isaac .seealso: [](ch_profiling)
113*0970d93fSToby Isaac @*/
114*0970d93fSToby 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)
115*0970d93fSToby Isaac {
116*0970d93fSToby Isaac   PetscLogHandler_Legacy legacy;
117*0970d93fSToby Isaac 
118*0970d93fSToby Isaac   PetscLogHandler h;
119*0970d93fSToby Isaac   PetscFunctionBegin;
120*0970d93fSToby Isaac   PetscCall(PetscLogHandlerCreate(comm, handler));
121*0970d93fSToby Isaac   h = *handler;
122*0970d93fSToby Isaac   PetscCall(PetscLogHandlerSetType(h, PETSC_LOG_HANDLER_LEGACY));
123*0970d93fSToby Isaac   legacy = (PetscLogHandler_Legacy)h->data;
124*0970d93fSToby Isaac 
125*0970d93fSToby Isaac   legacy->PetscLogPLB = PetscLogPLB;
126*0970d93fSToby Isaac   legacy->PetscLogPLE = PetscLogPLE;
127*0970d93fSToby Isaac   legacy->PetscLogPHC = PetscLogPHC;
128*0970d93fSToby Isaac   legacy->PetscLogPHD = PetscLogPHD;
129*0970d93fSToby Isaac 
130*0970d93fSToby Isaac   h->ops->eventbegin    = PetscLogPLB ? PetscLogHandlerEventBegin_Legacy : NULL;
131*0970d93fSToby Isaac   h->ops->eventend      = PetscLogPLE ? PetscLogHandlerEventEnd_Legacy : NULL;
132*0970d93fSToby Isaac   h->ops->objectcreate  = PetscLogPHC ? PetscLogHandlerObjectCreate_Legacy : NULL;
133*0970d93fSToby Isaac   h->ops->objectdestroy = PetscLogPHD ? PetscLogHandlerObjectDestroy_Legacy : NULL;
134*0970d93fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
135*0970d93fSToby Isaac }
136