| // Copyright 2016 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 BASE_TEST_LAUNCHER_TEST_LAUNCHER_TRACER_H_ | 
 | #define BASE_TEST_LAUNCHER_TEST_LAUNCHER_TRACER_H_ | 
 |  | 
 | #include <string> | 
 | #include <vector> | 
 |  | 
 | #include "base/synchronization/lock.h" | 
 | #include "base/threading/platform_thread.h" | 
 | #include "base/time/time.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | class FilePath; | 
 |  | 
 | // Records traces of test execution, e.g. to analyze performance. | 
 | // Thread safe. | 
 | class TestLauncherTracer { | 
 |  public: | 
 |   TestLauncherTracer(); | 
 |   ~TestLauncherTracer(); | 
 |  | 
 |   // Records an event corresponding to test process execution. | 
 |   void RecordProcessExecution(TimeTicks start_time, TimeDelta duration); | 
 |  | 
 |   // Dumps trace data as JSON. Returns true on success. | 
 |   bool Dump(const FilePath& path) WARN_UNUSED_RESULT; | 
 |  | 
 |  private: | 
 |   // Simplified version of base::TraceEvent. | 
 |   struct Event { | 
 |     std::string name;            // Displayed name. | 
 |     TimeTicks timestamp;         // Timestamp when this event began. | 
 |     TimeDelta duration;          // How long was this event. | 
 |     PlatformThreadId thread_id;  // Thread ID where event was reported. | 
 |   }; | 
 |  | 
 |   // Timestamp when tracing started. | 
 |   TimeTicks trace_start_time_; | 
 |  | 
 |   // Log of trace events. | 
 |   std::vector<Event> events_; | 
 |  | 
 |   // Lock to protect all member variables. | 
 |   Lock lock_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(TestLauncherTracer); | 
 | }; | 
 |  | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_TEST_LAUNCHER_TEST_LAUNCHER_TRACER_H_ |