7 #ifndef PXR_BASE_TF_DIAGNOSTIC_MGR_H
8 #define PXR_BASE_TF_DIAGNOSTIC_MGR_H
29 #include <tbb/enumerable_thread_specific.h>
30 #include <tbb/spin_rw_mutex.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
122 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; }
394 void _ReportError(
const TfError &err);
406 void _RebuildErrorLogText();
409 void _SetLogInfoForErrors(std::vector<std::string>
const &logText)
const;
413 mutable tbb::enumerable_thread_specific<bool> _reentrantGuard;
416 std::vector<Delegate*> _delegates;
418 mutable tbb::spin_rw_mutex _delegatesMutex;
421 std::atomic<size_t> _nextSerial;
424 tbb::enumerable_thread_specific<ErrorList> _errorList;
431 std::pair<std::vector<std::string>,
432 std::vector<std::string>> texts;
435 void _AppendAndPublishImpl(
bool clear,
438 tbb::enumerable_thread_specific<_LogText> _logText;
442 tbb::enumerable_thread_specific<
443 size_t, tbb::cache_aligned_allocator<size_t>,
444 tbb::ets_key_per_instance> _errorMarkCounts;
457 #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
PXR_NAMESPACE_OPEN_SCOPE typedef std::any TfDiagnosticInfo
TF_API ErrorIterator EraseError(ErrorIterator i)
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
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 >)