thread_name.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "thread_name.h"
  2. #include <library/cpp/yt/misc/tls.h>
  3. #include <util/generic/string.h>
  4. #include <util/system/thread.h>
  5. #include <algorithm>
  6. #include <cstring>
  7. namespace NYT {
  8. ////////////////////////////////////////////////////////////////////////////////
  9. TStringBuf TThreadName::ToStringBuf() const
  10. {
  11. // Buffer is zero terminated.
  12. return TStringBuf(Buffer.data(), Length);
  13. }
  14. ////////////////////////////////////////////////////////////////////////////////
  15. TThreadName::TThreadName(const TString& name)
  16. {
  17. Length = std::min<int>(TThreadName::BufferCapacity - 1, name.length());
  18. ::memcpy(Buffer.data(), name.data(), Length);
  19. }
  20. ////////////////////////////////////////////////////////////////////////////////
  21. // This function uses cached TThread::CurrentThreadName() result
  22. YT_PREVENT_TLS_CACHING TThreadName GetCurrentThreadName()
  23. {
  24. static thread_local TThreadName ThreadName;
  25. if (ThreadName.Length == 0) {
  26. if (auto name = TThread::CurrentThreadName()) {
  27. auto length = std::min<int>(TThreadName::BufferCapacity - 1, name.length());
  28. ThreadName.Length = length;
  29. ::memcpy(ThreadName.Buffer.data(), name.data(), length);
  30. }
  31. }
  32. return ThreadName;
  33. }
  34. ////////////////////////////////////////////////////////////////////////////////
  35. } // namespace NYT