1 // Copyright 2016 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/test/launcher/test_launcher_tracer.h" 6 7 #include "base/json/json_file_value_serializer.h" 8 #include "base/numerics/safe_conversions.h" 9 #include "base/strings/stringprintf.h" 10 #include "base/values.h" 11 12 namespace base { 13 TestLauncherTracer()14TestLauncherTracer::TestLauncherTracer() 15 : trace_start_time_(TimeTicks::Now()) {} 16 17 TestLauncherTracer::~TestLauncherTracer() = default; 18 RecordProcessExecution(TimeTicks start_time,TimeDelta duration)19int TestLauncherTracer::RecordProcessExecution(TimeTicks start_time, 20 TimeDelta duration) { 21 AutoLock lock(lock_); 22 23 int process_num = events_.size(); 24 Event event; 25 event.name = StringPrintf("process #%d", process_num); 26 event.timestamp = start_time; 27 event.duration = duration; 28 event.thread_id = PlatformThread::CurrentId(); 29 events_.push_back(event); 30 return process_num; 31 } 32 Dump(const FilePath & path)33bool TestLauncherTracer::Dump(const FilePath& path) { 34 AutoLock lock(lock_); 35 36 Value::List json_events_list; 37 for (const Event& event : events_) { 38 Value::Dict json_event; 39 json_event.Set("name", event.name); 40 json_event.Set("ph", "X"); 41 json_event.Set("ts", 42 checked_cast<int>( 43 (event.timestamp - trace_start_time_).InMicroseconds())); 44 json_event.Set("dur", checked_cast<int>(event.duration.InMicroseconds())); 45 json_event.Set("tid", checked_cast<int>(event.thread_id)); 46 47 // Add fake values required by the trace viewer. 48 json_event.Set("pid", 0); 49 50 json_events_list.Append(std::move(json_event)); 51 } 52 53 JSONFileValueSerializer serializer(path); 54 return serializer.Serialize(json_events_list); 55 } 56 57 } // namespace base 58