| 64 | } |
| 65 | |
| 66 | void AssignLanes(RunMetadata* run_metadata) { |
| 67 | for (size_t device_id = 0; |
| 68 | device_id < run_metadata->step_stats().dev_stats_size(); ++device_id) { |
| 69 | auto* device_stats = |
| 70 | run_metadata->mutable_step_stats()->mutable_dev_stats(device_id); |
| 71 | if (device_stats->thread_names_size() > 0 || |
| 72 | device_stats->node_stats_size() == 0) { |
| 73 | continue; |
| 74 | } |
| 75 | std::vector<uint64> lanes; |
| 76 | for (auto ns = device_stats->mutable_node_stats()->rbegin(); |
| 77 | ns != device_stats->mutable_node_stats()->rend(); ns++) { |
| 78 | uint64 end_micros = ns->all_start_micros() + ns->all_end_rel_micros(); |
| 79 | bool found_lane = false; |
| 80 | for (size_t l = 0; l < lanes.size(); l++) { |
| 81 | if (end_micros <= lanes[l]) { |
| 82 | ns->set_thread_id(l); |
| 83 | found_lane = true; |
| 84 | lanes[l] = ns->all_start_micros(); |
| 85 | break; |
| 86 | } |
| 87 | } |
| 88 | if (!found_lane) { |
| 89 | ns->set_thread_id(lanes.size()); |
| 90 | lanes.push_back(ns->all_start_micros()); |
| 91 | } |
| 92 | } |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | void ConvertRunMetadataToTraceEvent(RunMetadata* run_metadata, |
| 97 | profiler::Trace* trace, |
no test coverage detected