24 #ifndef PXR_BASE_TF_DIAGNOSTIC_MGR_H
25 #define PXR_BASE_TF_DIAGNOSTIC_MGR_H
46 #include <tbb/enumerable_thread_specific.h>
47 #include <tbb/spin_rw_mutex.h>
58 TF_LOG_STACK_TRACE_ON_ERROR,
59 TF_LOG_STACK_TRACE_ON_WARNING,
60 TF_ERROR_MARK_TRACKING,
61 TF_PRINT_ALL_POSTED_ERRORS_TO_STDERR
268 #if !defined(doxygen)
276 const char* errorCodeString)
277 : _context(context), _errorCode(errorCode),
278 _errorCodeString(errorCodeString)
283 void Post(
const char* fmt, ...)
const
284 ARCH_PRINTF_FUNCTION(2,3);
288 ARCH_PRINTF_FUNCTION(2,3);
295 const std::
string& msg,
299 void PostQuietly(const std::
string& msg,
305 const
char *_errorCodeString;
310 const char *warningCodeString)
311 : _context(context), _warningCode(warningCode),
312 _warningCodeString(warningCodeString)
317 void Post(
const char* fmt, ...) const
318 ARCH_PRINTF_FUNCTION(2,3);
321 void PostQuietly(const
char* fmt, ...) const
322 ARCH_PRINTF_FUNCTION(2,3);
325 void Post(const std::
string &str) const;
329 const std::
string& msg,
333 void PostQuietly(const std::
string& msg) const;
338 const
char *_warningCodeString;
343 const char *statusCodeString)
344 : _context(context), _statusCode(statusCode),
345 _statusCodeString(statusCodeString)
350 void Post(
const char* fmt, ...) const
351 ARCH_PRINTF_FUNCTION(2,3);
354 void PostQuietly(const
char* fmt, ...) const
355 ARCH_PRINTF_FUNCTION(2,3);
358 void Post(const std::
string &str) const;
362 const std::
string& msg,
366 void PostQuietly(const std::
string& msg) const;
371 const
char *_statusCodeString;
377 _statusCode(statusCode)
400 ErrorIterator _GetErrorMarkBegin(
size_t mark,
size_t *nErrors);
403 inline void _CreateErrorMark() { ++_errorMarkCounts.local(); }
406 inline bool _DestroyErrorMark() {
return --_errorMarkCounts.local() == 0; }
410 void _ReportError(
const TfError &err);
422 void _RebuildErrorLogText();
425 void _SetLogInfoForErrors(std::vector<std::string>
const &logText)
const;
429 mutable tbb::enumerable_thread_specific<bool> _reentrantGuard;
432 std::vector<Delegate*> _delegates;
434 mutable tbb::spin_rw_mutex _delegatesMutex;
437 std::atomic<size_t> _nextSerial;
440 tbb::enumerable_thread_specific<ErrorList> _errorList;
447 std::pair<std::vector<std::string>,
448 std::vector<std::string>> texts;
451 void _AppendAndPublishImpl(
bool clear,
454 tbb::enumerable_thread_specific<_LogText> _logText;
458 tbb::enumerable_thread_specific<
459 size_t, tbb::cache_aligned_allocator<size_t>,
460 tbb::ets_key_per_instance> _errorMarkCounts;
473 #endif // PXR_BASE_TF_DIAGNOSTIC_MGR_H
WarningHelper(TfCallContext const &context, TfEnum warningCode, const char *warningCodeString)
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.
ErrorList::iterator ErrorIterator
StatusHelper(TfCallContext const &context, TfEnum statusCode, const char *statusCodeString)
static TF_API This & GetInstance()
Return the singleton instance.
TF_API void PostStatus(TfEnum statusCode, const char *statusCodeString, TfCallContext const &context, std::string const &commentary, TfDiagnosticInfo info, bool quiet) const
TF_API ErrorIterator EraseError(ErrorIterator i)
PXR_NAMESPACE_OPEN_SCOPE typedef hboost::any TfDiagnosticInfo
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.
GLsizei const GLchar *const * string
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.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
TF_API void PostWarning(TfEnum warningCode, const char *warningCodeString, TfCallContext const &context, std::string const &commentary, TfDiagnosticInfo info, bool quiet) 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 >)