diff options
author | Pavel Labath <labath@google.com> | 2016-02-01 13:29:41 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2016-02-01 13:29:41 +0000 |
commit | 061140c680d2f0685b160e06216304ffe09f1d44 (patch) | |
tree | 9cb31591aa2b03d926c3b645c284022fa37b723e | |
parent | 6277b185d4059358056d35af093bc195206a67b5 (diff) | |
download | bcm5719-llvm-061140c680d2f0685b160e06216304ffe09f1d44.tar.gz bcm5719-llvm-061140c680d2f0685b160e06216304ffe09f1d44.zip |
Remove Timer::Initialize routine
Summary:
I've run into an issue when running unit tests, where the underlying problem turned out to be
that we were creating Timer objects (through several layers of indirection) without calling
Timer::Initialize. Since Timer's thread-local storage was not properly initialized, we were
overwriting gtest's own thread-local storage, causing test failures.
Instead of requiring that every test calls Timer::Initialize(), I remove the function altogether:
The thread-local storage can be initialized on-demand, and the g_file variable initialized to
stdout and never changed, so I have simply removed it.
Reviewers: clayborg, zturner, tberghammer
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D16722
llvm-svn: 259356
-rw-r--r-- | lldb/include/lldb/Core/Timer.h | 4 | ||||
-rw-r--r-- | lldb/source/Core/Timer.cpp | 35 | ||||
-rw-r--r-- | lldb/source/Initialization/SystemInitializerCommon.cpp | 1 |
3 files changed, 12 insertions, 28 deletions
diff --git a/lldb/include/lldb/Core/Timer.h b/lldb/include/lldb/Core/Timer.h index ffaeba6fce9..4996db62557 100644 --- a/lldb/include/lldb/Core/Timer.h +++ b/lldb/include/lldb/Core/Timer.h @@ -50,9 +50,6 @@ public: //-------------------------------------------------------------- ~Timer(); - static void - Initialize (); - void Dump (); @@ -90,7 +87,6 @@ protected: static std::atomic<bool> g_quiet; static std::atomic<unsigned> g_display_depth; static std::mutex g_file_mutex; - static FILE* g_file; private: Timer(); diff --git a/lldb/source/Core/Timer.cpp b/lldb/source/Core/Timer.cpp index e53ce2ec453..7a6e5de75cf 100644 --- a/lldb/source/Core/Timer.cpp +++ b/lldb/source/Core/Timer.cpp @@ -40,9 +40,7 @@ namespace std::atomic<bool> Timer::g_quiet(true); std::atomic<unsigned> Timer::g_display_depth(0); std::mutex Timer::g_file_mutex; -FILE* Timer::g_file = nullptr; -static lldb::thread_key_t g_key; static Mutex & GetCategoryMutex() @@ -58,10 +56,17 @@ GetCategoryMap() return g_category_map; } +static void +ThreadSpecificCleanup(void *p) +{ + delete static_cast<TimerStack *>(p); +} static TimerStack * GetTimerStackForCurrentThread () { + static lldb::thread_key_t g_key = Host::ThreadLocalStorageCreate(ThreadSpecificCleanup); + void *timer_stack = Host::ThreadLocalStorageGet(g_key); if (timer_stack == NULL) { @@ -72,24 +77,11 @@ GetTimerStackForCurrentThread () } void -ThreadSpecificCleanup (void *p) -{ - delete (TimerStack *)p; -} - -void Timer::SetQuiet (bool value) { g_quiet = value; } -void -Timer::Initialize () -{ - Timer::g_file = stdout; - g_key = Host::ThreadLocalStorageCreate(ThreadSpecificCleanup); -} - Timer::Timer (const char *category, const char *format, ...) : m_category (category), m_total_start (), @@ -108,15 +100,15 @@ Timer::Timer (const char *category, const char *format, ...) : std::lock_guard<std::mutex> lock(g_file_mutex); // Indent - ::fprintf (g_file, "%*s", stack->m_depth * TIMER_INDENT_AMOUNT, ""); + ::fprintf(stdout, "%*s", stack->m_depth * TIMER_INDENT_AMOUNT, ""); // Print formatted string va_list args; va_start (args, format); - ::vfprintf (g_file, format, args); + ::vfprintf(stdout, format, args); va_end (args); // Newline - ::fprintf (g_file, "\n"); + ::fprintf(stdout, "\n"); } TimeValue start_time(TimeValue::Now()); m_total_start = start_time; @@ -161,11 +153,8 @@ Timer::~Timer() if (g_quiet == false) { std::lock_guard<std::mutex> lock(g_file_mutex); - ::fprintf (g_file, - "%*s%.9f sec (%.9f sec)\n", - (stack->m_depth - 1) *TIMER_INDENT_AMOUNT, "", - total_nsec / 1000000000.0, - timer_nsec / 1000000000.0); + ::fprintf(stdout, "%*s%.9f sec (%.9f sec)\n", (stack->m_depth - 1) * TIMER_INDENT_AMOUNT, "", + total_nsec / 1000000000.0, timer_nsec / 1000000000.0); } // Keep total results for each category so we can dump results. diff --git a/lldb/source/Initialization/SystemInitializerCommon.cpp b/lldb/source/Initialization/SystemInitializerCommon.cpp index 6cbc0b707df..a5e3c116e72 100644 --- a/lldb/source/Initialization/SystemInitializerCommon.cpp +++ b/lldb/source/Initialization/SystemInitializerCommon.cpp @@ -97,7 +97,6 @@ SystemInitializerCommon::Initialize() Log::Initialize(); HostInfo::Initialize(); - Timer::Initialize(); Timer scoped_timer(__PRETTY_FUNCTION__, __PRETTY_FUNCTION__); llvm::install_fatal_error_handler(fatal_error_handler, 0); |