| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef TOOLS_GN_TRACE_H_ | |
| #define TOOLS_GN_TRACE_H_ | |
| #include <memory> | |
| #include <string> | |
| #include <thread> | |
| #include "util/ticks.h" | |
| class Label; | |
| namespace base { | |
| class CommandLine; | |
| class FilePath; | |
| } // namespace base | |
| class TraceItem { | |
| public: | |
| enum Type { | |
| TRACE_SETUP, | |
| TRACE_FILE_LOAD, | |
| TRACE_FILE_PARSE, | |
| TRACE_FILE_EXECUTE, | |
| TRACE_FILE_EXECUTE_TEMPLATE, | |
| TRACE_FILE_WRITE, | |
| TRACE_FILE_WRITE_GENERATED, | |
| TRACE_FILE_WRITE_NINJA, | |
| TRACE_IMPORT_LOAD, | |
| TRACE_IMPORT_BLOCK, | |
| TRACE_SCRIPT_EXECUTE, | |
| TRACE_DEFINE_TARGET, | |
| TRACE_ON_RESOLVED, | |
| TRACE_CHECK_HEADER, // One file. | |
| TRACE_CHECK_HEADERS, // All files. | |
| TRACE_WALK_METADATA, | |
| }; | |
| TraceItem(Type type, const std::string& name, std::thread::id thread_id); | |
| ~TraceItem(); | |
| Type type() const { return type_; } | |
| const std::string& name() const { return name_; } | |
| std::thread::id thread_id() const { return thread_id_; } | |
| Ticks begin() const { return begin_; } | |
| void set_begin(Ticks b) { begin_ = b; } | |
| Ticks end() const { return end_; } | |
| void set_end(Ticks e) { end_ = e; } | |
| TickDelta delta() const { return TicksDelta(end_, begin_); } | |
| // Optional toolchain label. | |
| const std::string& toolchain() const { return toolchain_; } | |
| void set_toolchain(const std::string& t) { toolchain_ = t; } | |
| // Optional command line. | |
| const std::string& cmdline() const { return cmdline_; } | |
| void set_cmdline(const std::string& c) { cmdline_ = c; } | |
| private: | |
| Type type_; | |
| std::string name_; | |
| std::thread::id thread_id_; | |
| Ticks begin_; | |
| Ticks end_; | |
| std::string toolchain_; | |
| std::string cmdline_; | |
| }; | |
| class ScopedTrace { | |
| public: | |
| ScopedTrace(TraceItem::Type t, const std::string& name); | |
| ScopedTrace(TraceItem::Type t, const Label& label); | |
| ~ScopedTrace(); | |
| void SetToolchain(const Label& label); | |
| void SetCommandLine(const base::CommandLine& cmdline); | |
| void Done(); | |
| private: | |
| std::unique_ptr<TraceItem> item_; | |
| bool done_; | |
| }; | |
| // Call to turn tracing on. It's off by default. | |
| void EnableTracing(); | |
| // Returns whether tracing is enabled. | |
| bool TracingEnabled(); | |
| // Adds a trace event to the log. | |
| void AddTrace(std::unique_ptr<TraceItem> item); | |
| // Returns a summary of the current traces, or the empty string if tracing is | |
| // not enabled. | |
| std::string SummarizeTraces(); | |
| // Saves the current traces to the given filename in JSON format. | |
| void SaveTraces(const base::FilePath& file_name); | |
| #endif // TOOLS_GN_TRACE_H_ |