20#ifndef LIBMESH_LIBMESH_LOGGING_H
21#define LIBMESH_LIBMESH_LOGGING_H
25#include "libmesh/libmesh_common.h"
27#include "libmesh/perf_log.h"
31#define TOKENPASTE(x, y) x ## y
32#define TOKENPASTE2(x, y) TOKENPASTE(x, y)
70 bool per_entity=
false) :
110#ifdef LIBMESH_ENABLE_PERFORMANCE_LOGGING
112# define START_LOG(a,b) { libMesh::perflog.push(a,b); }
113# define STOP_LOG(a,b) { libMesh::perflog.pop(a,b); }
114# define LOG_SCOPE(a,b) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b);
115# define LOG_SCOPE_IF(a,b,enabled) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b,enabled);
116# define LOG_SCOPE_WITH(a,b,logger) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b,true,&logger);
119# define LOG_ONE_ENTITY_SCOPE(a,b) libMesh::PerfItem TOKENPASTE2(perf_item_, __LINE__)(a,b,true,&libMesh::perflog,true);
123# define START_LOG(a,b) {}
124# define STOP_LOG(a,b) {}
125# define PALIBMESH_USE_LOG(a,b) {}
126# define RESTART_LOG(a,b) {}
127# define LOG_SCOPE(a,b) {}
128# define LOG_SCOPE_IF(a,b,enabled) {}
129# define LOG_SCOPE_WITH(a,b,logger) {}
130# define LOG_ONE_ENTITY_SCOPE(a,b) {}
135#define LOG_CALL(a,b,X) \
The PerfLog class allows monitoring of specific events.
void fast_push(const char *label, const char *header="", bool per_entity=false)
Push the event label onto the stack, pausing any active event.
void fast_pop(const char *label, const char *header="", bool per_entity=false) noexcept
Pop the event label off the stack, resuming any lower event.
The libMesh namespace provides an interface to certain functionality in the library.
PerfLog perflog
A PerfLog object to log performance.
Used for logging something that naturally lasts as long as some enclosing scope, such as the current ...
bool _per_entity
Whether the event fires once per mesh entity or more often; see PerfLog::fast_push().
PerfItem(const char *label, const char *header, bool enabled=true, PerfLog *my_perflog=&perflog, bool per_entity=false)