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