| Index: base/trace_event.cc
|
| ===================================================================
|
| --- base/trace_event.cc (revision 63176)
|
| +++ base/trace_event.cc (working copy)
|
| @@ -1,164 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/trace_event.h"
|
| -
|
| -#include "base/format_macros.h"
|
| -#include "base/file_path.h"
|
| -#include "base/file_util.h"
|
| -#include "base/path_service.h"
|
| -#include "base/platform_thread.h"
|
| -#include "base/process_util.h"
|
| -#include "base/stringprintf.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "base/time.h"
|
| -
|
| -#define USE_UNRELIABLE_NOW
|
| -
|
| -namespace base {
|
| -
|
| -static const char* kEventTypeNames[] = {
|
| - "BEGIN",
|
| - "END",
|
| - "INSTANT"
|
| -};
|
| -
|
| -static const FilePath::CharType* kLogFileName =
|
| - FILE_PATH_LITERAL("trace_%d.log");
|
| -
|
| -TraceLog::TraceLog() : enabled_(false), log_file_(NULL) {
|
| - base::ProcessHandle proc = base::GetCurrentProcessHandle();
|
| -#if !defined(OS_MACOSX)
|
| - process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(proc));
|
| -#else
|
| - // The default port provider is sufficient to get data for the current
|
| - // process.
|
| - process_metrics_.reset(base::ProcessMetrics::CreateProcessMetrics(proc,
|
| - NULL));
|
| -#endif
|
| -}
|
| -
|
| -TraceLog::~TraceLog() {
|
| - Stop();
|
| -}
|
| -
|
| -// static
|
| -bool TraceLog::IsTracing() {
|
| - TraceLog* trace = Singleton<TraceLog>::get();
|
| - return trace->enabled_;
|
| -}
|
| -
|
| -// static
|
| -bool TraceLog::StartTracing() {
|
| - TraceLog* trace = Singleton<TraceLog>::get();
|
| - return trace->Start();
|
| -}
|
| -
|
| -bool TraceLog::Start() {
|
| - if (enabled_)
|
| - return true;
|
| - enabled_ = OpenLogFile();
|
| - if (enabled_) {
|
| - Log("var raw_trace_events = [\n");
|
| - trace_start_time_ = TimeTicks::Now();
|
| - timer_.Start(TimeDelta::FromMilliseconds(250), this, &TraceLog::Heartbeat);
|
| - }
|
| - return enabled_;
|
| -}
|
| -
|
| -// static
|
| -void TraceLog::StopTracing() {
|
| - TraceLog* trace = Singleton<TraceLog>::get();
|
| - return trace->Stop();
|
| -}
|
| -
|
| -void TraceLog::Stop() {
|
| - if (enabled_) {
|
| - enabled_ = false;
|
| - Log("];\n");
|
| - CloseLogFile();
|
| - timer_.Stop();
|
| - }
|
| -}
|
| -
|
| -void TraceLog::Heartbeat() {
|
| - std::string cpu = StringPrintf("%.0f", process_metrics_->GetCPUUsage());
|
| - TRACE_EVENT_INSTANT("heartbeat.cpu", 0, cpu);
|
| -}
|
| -
|
| -void TraceLog::CloseLogFile() {
|
| - if (log_file_) {
|
| - file_util::CloseFile(log_file_);
|
| - }
|
| -}
|
| -
|
| -bool TraceLog::OpenLogFile() {
|
| - FilePath::StringType pid_filename =
|
| - StringPrintf(kLogFileName, base::GetCurrentProcId());
|
| - FilePath log_file_path;
|
| - if (!PathService::Get(base::DIR_EXE, &log_file_path))
|
| - return false;
|
| - log_file_path = log_file_path.Append(pid_filename);
|
| - log_file_ = file_util::OpenFile(log_file_path, "a");
|
| - if (!log_file_) {
|
| - // try the current directory
|
| - log_file_ = file_util::OpenFile(FilePath(pid_filename), "a");
|
| - if (!log_file_) {
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void TraceLog::Trace(const std::string& name,
|
| - EventType type,
|
| - const void* id,
|
| - const std::wstring& extra,
|
| - const char* file,
|
| - int line) {
|
| - if (!enabled_)
|
| - return;
|
| - Trace(name, type, id, WideToUTF8(extra), file, line);
|
| -}
|
| -
|
| -void TraceLog::Trace(const std::string& name,
|
| - EventType type,
|
| - const void* id,
|
| - const std::string& extra,
|
| - const char* file,
|
| - int line) {
|
| - if (!enabled_)
|
| - return;
|
| -
|
| -#ifdef USE_UNRELIABLE_NOW
|
| - TimeTicks tick = TimeTicks::HighResNow();
|
| -#else
|
| - TimeTicks tick = TimeTicks::Now();
|
| -#endif
|
| - TimeDelta delta = tick - trace_start_time_;
|
| - int64 usec = delta.InMicroseconds();
|
| - std::string msg =
|
| - StringPrintf("{'pid':'0x%lx', 'tid':'0x%lx', 'type':'%s', "
|
| - "'name':'%s', 'id':'%p', 'extra':'%s', 'file':'%s', "
|
| - "'line_number':'%d', 'usec_begin': %" PRId64 "},\n",
|
| - static_cast<unsigned long>(base::GetCurrentProcId()),
|
| - static_cast<unsigned long>(PlatformThread::CurrentId()),
|
| - kEventTypeNames[type],
|
| - name.c_str(),
|
| - id,
|
| - extra.c_str(),
|
| - file,
|
| - line,
|
| - usec);
|
| -
|
| - Log(msg);
|
| -}
|
| -
|
| -void TraceLog::Log(const std::string& msg) {
|
| - AutoLock lock(file_lock_);
|
| -
|
| - fprintf(log_file_, "%s", msg.c_str());
|
| -}
|
| -
|
| -} // namespace base
|
|
|