Home | History | Annotate | Download | only in gn
      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 
     38   Type type() const { return type_; }
     39   const std::string& name() const { return name_; }
     40   base::PlatformThreadId thread_id() const { return thread_id_; }
     41 
     42   base::TimeTicks begin() const { return begin_; }
     43   void set_begin(base::TimeTicks b) { begin_ = b; }
     44   base::TimeTicks end() const { return end_; }
     45   void set_end(base::TimeTicks e) { end_ = e; }
     46 
     47   base::TimeDelta delta() const { return end_ - begin_; }
     48 
     49   // Optional toolchain label.
     50   const std::string& toolchain() const { return toolchain_; }
     51   void set_toolchain(const std::string& t) { toolchain_ = t; }
     52 
     53   // Optional command line.
     54   const std::string& cmdline() const { return cmdline_; }
     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