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