blob: 5238256c8aa630423545835a29468c62dedb7188 [file] [log] [blame]
//===-- Timer.h -------------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_Timer_h_
#define liblldb_Timer_h_
#if defined(__cplusplus)
#include <memory>
#include <stdio.h>
#include "lldb/lldb-private.h"
#include "lldb/Host/TimeValue.h"
namespace lldb_private {
//----------------------------------------------------------------------
/// @class Timer Timer.h "lldb/Core/Timer.h"
/// @brief A timer class that simplifies common timing metrics.
///
/// A scoped timer class that allows a variety of pthread mutex
/// objects to have a mutex locked when a Timer::Locker
/// object is created, and unlocked when it goes out of scope or
/// when the Timer::Locker::Reset(pthread_mutex_t *)
/// is called. This provides an exception safe way to lock a mutex
/// in a scope.
//----------------------------------------------------------------------
class Timer
{
public:
static void
Initialize ();
//--------------------------------------------------------------
/// Default constructor.
//--------------------------------------------------------------
Timer(const char *category, const char *format, ...) __attribute__ ((format (printf, 3, 4)));
//--------------------------------------------------------------
/// Desstructor
//--------------------------------------------------------------
~Timer();
void
Dump ();
static void
SetDisplayDepth (uint32_t depth);
static void
SetQuiet (bool value);
static void
DumpCategoryTimes (Stream *s);
static void
ResetCategoryTimes ();
protected:
void
ChildStarted (const TimeValue& time);
void
ChildStopped (const TimeValue& time);
uint64_t
GetTotalElapsedNanoSeconds();
uint64_t
GetTimerElapsedNanoSeconds();
//--------------------------------------------------------------
/// Member variables
//--------------------------------------------------------------
const char *m_category;
TimeValue m_total_start;
TimeValue m_timer_start;
uint64_t m_total_ticks; // Total running time for this timer including when other timers below this are running
uint64_t m_timer_ticks; // Ticks for this timer that do not include when other timers below this one are running
static uint32_t g_depth;
static uint32_t g_display_depth;
static FILE * g_file;
private:
Timer();
DISALLOW_COPY_AND_ASSIGN (Timer);
};
} // namespace lldb_private
#endif // #if defined(__cplusplus)
#endif // #ifndef liblldb_Timer_h_