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