7 #ifndef PXR_BASE_TF_DIAGNOSTIC_MGR_H
8 #define PXR_BASE_TF_DIAGNOSTIC_MGR_H
30 #include <tbb/enumerable_thread_specific.h>
41 TF_LOG_STACK_TRACE_ON_ERROR,
42 TF_LOG_STACK_TRACE_ON_WARNING,
43 TF_ERROR_MARK_TRACKING,
44 TF_PRINT_ALL_POSTED_ERRORS_TO_STDERR
129 std::string
const &msg) = 0;
246 std::string
const &msg)
const;
252 #if !defined(doxygen)
260 const char* errorCodeString)
261 : _context(context), _errorCode(errorCode),
262 _errorCodeString(errorCodeString)
267 void Post(
const char* fmt, ...) const
268 ARCH_PRINTF_FUNCTION(2,3);
271 void PostQuietly(const
char* fmt, ...) const
272 ARCH_PRINTF_FUNCTION(2,3);
275 void Post(const std::
string& msg) const;
279 const std::
string& msg,
283 void PostQuietly(const std::
string& msg,
289 const
char *_errorCodeString;
294 const char *warningCodeString)
295 : _context(context), _warningCode(warningCode),
296 _warningCodeString(warningCodeString)
301 void Post(
const char* fmt, ...) const
302 ARCH_PRINTF_FUNCTION(2,3);
305 void PostQuietly(const
char* fmt, ...) const
306 ARCH_PRINTF_FUNCTION(2,3);
309 void Post(const std::
string &str) const;
313 const std::
string& msg,
317 void PostQuietly(const std::
string& msg) const;
322 const
char *_warningCodeString;
327 const char *statusCodeString)
328 : _context(context), _statusCode(statusCode),
329 _statusCodeString(statusCodeString)
334 void Post(
const char* fmt, ...) const
335 ARCH_PRINTF_FUNCTION(2,3);
338 void PostQuietly(const
char* fmt, ...) const
339 ARCH_PRINTF_FUNCTION(2,3);
342 void Post(const std::
string &str) const;
346 const std::
string& msg,
350 void PostQuietly(const std::
string& msg) const;
355 const
char *_statusCodeString;
361 _statusCode(statusCode)
365 void Post(
const std::string &str)
const {
384 ErrorIterator _GetErrorMarkBegin(
size_t mark,
size_t *nErrors);
387 inline void _CreateErrorMark() { ++_errorMarkCounts.local(); }
390 inline bool _DestroyErrorMark() {
return --_errorMarkCounts.local() == 0; }
402 void _ReportError(
const TfError &err);
414 void _RebuildPendingErrorLogText();
418 void _RebuildTrappedDiagnosticsLogText();
423 bool _ForEachDelegate(Fn
const &fn)
const;
427 mutable tbb::enumerable_thread_specific<bool> _reentrantGuard;
430 std::vector<Delegate*> _delegates;
435 tbb::enumerable_thread_specific<
436 std::vector<TfDiagnosticTrap*>> _scopedTrapStack;
439 std::atomic<size_t> _nextSerial;
442 tbb::enumerable_thread_specific<ErrorList> _errorList;
448 struct _LogTextBuffer {
449 _LogTextBuffer() =
default;
450 explicit _LogTextBuffer(std::string &&
label);
451 template <
class Fn>
void Update(Fn &&fn);
454 std::pair<std::vector<std::string>,
455 std::vector<std::string>> _texts;
456 bool _parity =
false;
460 tbb::enumerable_thread_specific<_LogTextBuffer> _pendingErrorsLogText;
463 tbb::enumerable_thread_specific<_LogTextBuffer> _trappedDiagnosticsLogText;
467 tbb::enumerable_thread_specific<
468 size_t, tbb::cache_aligned_allocator<size_t>,
469 tbb::ets_key_per_instance> _errorMarkCounts;
485 #endif // PXR_BASE_TF_DIAGNOSTIC_MGR_H
WarningHelper(TfCallContext const &context, TfEnum warningCode, const char *warningCodeString)
GLuint GLsizei const GLchar * label
virtual TF_API ~Delegate()=0
TF_API ErrorIterator EraseRange(ErrorIterator first, ErrorIterator last)
static TF_API std::string GetCodeName(const TfEnum &code)
Returns the name of the given diagnostic code.
TF_API void PostError(TfEnum errorCode, const char *errorCodeString, TfCallContext const &context, const std::string &commentary, TfDiagnosticInfo info, bool quiet)
TF_API void _UnhandledAbort() const
ErrorIterator GetErrorBegin()
Return an iterator to the beginning of this thread's error list.
#define PXR_NAMESPACE_OPEN_SCOPE
ErrorList::iterator ErrorIterator
StatusHelper(TfCallContext const &context, TfEnum statusCode, const char *statusCodeString)
static TF_API This & GetInstance()
Return the singleton instance.
PXR_NAMESPACE_OPEN_SCOPE typedef std::any TfDiagnosticInfo
TF_API ErrorIterator EraseError(ErrorIterator i)
TF_API void PostWarning(TfEnum warningCode, const char *warningCodeString, TfCallContext const &context, std::string const &commentary, TfDiagnosticInfo info, bool quiet)
TF_API void PostFatal(TfCallContext const &context, TfEnum statusCode, std::string const &msg) const
virtual void IssueError(TfError const &err)=0
Called when a TfError is posted.
TF_API void AppendError(TfError const &e)
std::list< TfError > ErrorList
FatalHelper(TfCallContext const &context, TfEnum statusCode)
virtual void IssueWarning(TfWarning const &warning)=0
Called when a TF_WARNING() is issued.
TF_API void RemoveDelegate(Delegate *delegate)
bool HasActiveErrorMark()
TF_API void AddDelegate(Delegate *delegate)
TF_API void SetQuiet(bool quiet)
virtual void IssueStatus(TfStatus const &status)=0
Called when a TF_STATUS() is issued.
__hostdev__ uint64_t last(uint32_t i) const
ErrorIterator GetErrorEnd()
Return an iterator to the end of this thread's error list.
void Post(const std::string &str) const
static TF_API std::string FormatDiagnostic(const TfEnum &code, const TfCallContext &context, const std::string &msg, const TfDiagnosticInfo &info)
#define PXR_NAMESPACE_CLOSE_SCOPE
virtual void IssueFatalError(TfCallContext const &context, std::string const &msg)=0
PXR_NAMESPACE_OPEN_SCOPE TF_DEBUG_CODES(TF_LOG_STACK_TRACE_ON_ERROR, TF_LOG_STACK_TRACE_ON_WARNING, TF_ERROR_MARK_TRACKING, TF_PRINT_ALL_POSTED_ERRORS_TO_STDERR)
TF_API_TEMPLATE_CLASS(TfSingleton< TfDiagnosticMgr >)
TF_API void PostStatus(TfEnum statusCode, const char *statusCodeString, TfCallContext const &context, std::string const &commentary, TfDiagnosticInfo info, bool quiet)