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_FILE_LOAD,
     23     TRACE_FILE_PARSE,
     24     TRACE_FILE_EXECUTE,
     25     TRACE_FILE_WRITE,
     26     TRACE_SCRIPT_EXECUTE,
     27     TRACE_DEFINE_TARGET
     28   };
     29 
     30   TraceItem(Type type,
     31             const std::string& name,
     32             base::PlatformThreadId thread_id);
     33   ~TraceItem();
     34 
     35   Type type() const { return type_; }
     36   const std::string& name() const { return name_; }
     37   base::PlatformThreadId thread_id() const { return thread_id_; }
     38 
     39   base::TimeTicks begin() const { return begin_; }
     40   void set_begin(base::TimeTicks b) { begin_ = b; }
     41   base::TimeTicks end() const { return end_; }
     42   void set_end(base::TimeTicks e) { end_ = e; }
     43 
     44   base::TimeDelta delta() const { return end_ - begin_; }
     45 
     46   // Optional toolchain label.
     47   const std::string& toolchain() const { return toolchain_; }
     48   void set_toolchain(const std::string& t) { toolchain_ = t; }
     49 
     50   // Optional command line.
     51   const std::string& cmdline() const { return cmdline_; }
     52   void set_cmdline(const std::string& c) { cmdline_ = c; }
     53 
     54  private:
     55   Type type_;
     56   std::string name_;
     57   base::PlatformThreadId thread_id_;
     58 
     59   base::TimeTicks begin_;
     60   base::TimeTicks end_;
     61 
     62   std::string toolchain_;
     63   std::string cmdline_;
     64 };
     65 
     66 class ScopedTrace {
     67  public:
     68   ScopedTrace(TraceItem::Type t, const std::string& name);
     69   ScopedTrace(TraceItem::Type t, const Label& label);
     70   ~ScopedTrace();
     71 
     72   void SetToolchain(const Label& label);
     73   void SetCommandLine(const CommandLine& cmdline);
     74 
     75   void Done();
     76 
     77  private:
     78   TraceItem* item_;
     79   bool done_;
     80 };
     81 
     82 // Call to turn tracing on. It's off by default.
     83 void EnableTracing();
     84 
     85 // Adds a trace event to the log. Takes ownership of the pointer.
     86 void AddTrace(TraceItem* item);
     87 
     88 // Returns a summary of the current traces, or the empty string if tracing is
     89 // not enabled.
     90 std::string SummarizeTraces();
     91 
     92 // Saves the current traces to the given filename in JSON format.
     93 void SaveTraces(const base::FilePath& file_name);
     94 
     95 #endif  // TOOLS_GN_TRACE_H_
     96