Actual source code: lognested.h

  1: #pragma once

  3: #include <petsc/private/loghandlerimpl.h>
  4: #include <petsc/private/logimpl.h>
  5: #include <../src/sys/logging/handler/impls/default/logdefault.h>
  6: #include <petsc/private/hashmap.h>

  8: typedef int NestedId;

 10: static inline PETSC_UNUSED NestedId NestedIdFromEvent(PetscLogEvent e)
 11: {
 12:   return e;
 13: }

 15: static inline PETSC_UNUSED PetscLogEvent NestedIdToEvent(NestedId e)
 16: {
 17:   return e;
 18: }

 20: static inline PETSC_UNUSED NestedId NestedIdFromStage(PetscLogStage s)
 21: {
 22:   return -(s + 2);
 23: }

 25: static inline PETSC_UNUSED PetscLogStage NestedIdToStage(NestedId s)
 26: {
 27:   return -(s + 2);
 28: }

 30: typedef struct _n_NestedIdPair NestedIdPair;
 31: struct _n_NestedIdPair {
 32:   PetscLogEvent root;
 33:   NestedId      leaf;
 34: };

 36: #define NestedIdPairHash(key)     PetscHashCombine(PetscHash_UInt32((PetscHash32_t)((key).root)), PetscHash_UInt32((PetscHash32_t)((key).leaf)))
 37: #define NestedIdPairEqual(k1, k2) (((k1).root == (k2).root) && ((k1).leaf == (k2).leaf))

 39: PETSC_HASH_MAP(NestedHash, NestedIdPair, PetscLogEvent, NestedIdPairHash, NestedIdPairEqual, -1)

 41: typedef struct _n_PetscLogHandler_Nested *PetscLogHandler_Nested;
 42: struct _n_PetscLogHandler_Nested {
 43:   PetscLogState   state;
 44:   PetscLogHandler handler;
 45:   PetscNestedHash pair_map;
 46:   PetscIntStack   nested_stack; // stack of nested ids
 47:   PetscIntStack   orig_stack;   // stack of the original ids
 48:   PetscClassId    nested_stage_id;
 49:   PetscLogDouble  threshold;
 50: };

 52: typedef struct {
 53:   const char *name;
 54:   PetscInt    id;
 55:   PetscInt    parent;
 56:   PetscInt    num_descendants;
 57: } PetscNestedEventNode;

 59: typedef struct {
 60:   MPI_Comm              comm;
 61:   PetscLogGlobalNames   global_events;
 62:   PetscNestedEventNode *nodes;
 63:   PetscEventPerfInfo   *perf;
 64: } PetscNestedEventTree;

 66: typedef enum {
 67:   PETSC_LOG_NESTED_XML,
 68:   PETSC_LOG_NESTED_FLAMEGRAPH
 69: } PetscLogNestedType;

 71: PETSC_INTERN PetscErrorCode PetscLogHandlerView_Nested_XML(PetscLogHandler_Nested, PetscNestedEventTree *, PetscViewer);
 72: PETSC_INTERN PetscErrorCode PetscLogHandlerView_Nested_Flamegraph(PetscLogHandler_Nested, PetscNestedEventTree *, PetscViewer);