• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef TOOLS_GN_TRACE_H_
6 #define TOOLS_GN_TRACE_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/command_line.h"
12 #include "base/files/file_path.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/threading/platform_thread.h"
15 #include "base/time/time.h"
16 
17 class Label;
18 
19 class TraceItem {
20  public:
21   enum Type {
22     TRACE_SETUP,
23     TRACE_FILE_LOAD,
24     TRACE_FILE_PARSE,
25     TRACE_FILE_EXECUTE,
26     TRACE_FILE_WRITE,
27     TRACE_SCRIPT_EXECUTE,
28     TRACE_DEFINE_TARGET,
29     TRACE_CHECK_HEADER,  // One file.
30     TRACE_CHECK_HEADERS,  // All files.
31   };
32 
33   TraceItem(Type type,
34             const std::string& name,
35             base::PlatformThreadId thread_id);
36   ~TraceItem();
37 
type()38   Type type() const { return type_; }
name()39   const std::string& name() const { return name_; }
thread_id()40   base::PlatformThreadId thread_id() const { return thread_id_; }
41 
begin()42   base::TimeTicks begin() const { return begin_; }
set_begin(base::TimeTicks b)43   void set_begin(base::TimeTicks b) { begin_ = b; }
end()44   base::TimeTicks end() const { return end_; }
set_end(base::TimeTicks e)45   void set_end(base::TimeTicks e) { end_ = e; }
46 
delta()47   base::TimeDelta delta() const { return end_ - begin_; }
48 
49   // Optional toolchain label.
toolchain()50   const std::string& toolchain() const { return toolchain_; }
set_toolchain(const std::string & t)51   void set_toolchain(const std::string& t) { toolchain_ = t; }
52 
53   // Optional command line.
cmdline()54   const std::string& cmdline() const { return cmdline_; }
set_cmdline(const std::string & c)55   void set_cmdline(const std::string& c) { cmdline_ = c; }
56 
57  private:
58   Type type_;
59   std::string name_;
60   base::PlatformThreadId thread_id_;
61 
62   base::TimeTicks begin_;
63   base::TimeTicks end_;
64 
65   std::string toolchain_;
66   std::string cmdline_;
67 };
68 
69 class ScopedTrace {
70  public:
71   ScopedTrace(TraceItem::Type t, const std::string& name);
72   ScopedTrace(TraceItem::Type t, const Label& label);
73   ~ScopedTrace();
74 
75   void SetToolchain(const Label& label);
76   void SetCommandLine(const base::CommandLine& cmdline);
77 
78   void Done();
79 
80  private:
81   TraceItem* item_;
82   bool done_;
83 };
84 
85 // Call to turn tracing on. It's off by default.
86 void EnableTracing();
87 
88 // Adds a trace event to the log. Takes ownership of the pointer.
89 void AddTrace(TraceItem* item);
90 
91 // Returns a summary of the current traces, or the empty string if tracing is
92 // not enabled.
93 std::string SummarizeTraces();
94 
95 // Saves the current traces to the given filename in JSON format.
96 void SaveTraces(const base::FilePath& file_name);
97 
98 #endif  // TOOLS_GN_TRACE_H_
99