Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Side by Side Diff: tools/gn/trace.cc

Issue 610293003: Replace more for loops in GN (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: self review Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "tools/gn/trace.h" 5 #include "tools/gn/trace.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <sstream> 9 #include <sstream>
10 #include <vector> 10 #include <vector>
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 bool CoalescedDurationGreater(const Coalesced& a, const Coalesced& b) { 59 bool CoalescedDurationGreater(const Coalesced& a, const Coalesced& b) {
60 return a.total_duration > b.total_duration; 60 return a.total_duration > b.total_duration;
61 } 61 }
62 62
63 void SummarizeParses(std::vector<const TraceItem*>& loads, 63 void SummarizeParses(std::vector<const TraceItem*>& loads,
64 std::ostream& out) { 64 std::ostream& out) {
65 out << "File parse times: (time in ms, name)\n"; 65 out << "File parse times: (time in ms, name)\n";
66 66
67 std::sort(loads.begin(), loads.end(), &DurationGreater); 67 std::sort(loads.begin(), loads.end(), &DurationGreater);
68 68 for (const auto* load : loads) {
scottmg 2014/09/30 19:31:47 *?
69 for (size_t i = 0; i < loads.size(); i++) { 69 out << base::StringPrintf(" %8.2f ", load->delta().InMillisecondsF());
70 out << base::StringPrintf(" %8.2f ", 70 out << load->name() << std::endl;
71 loads[i]->delta().InMillisecondsF());
72 out << loads[i]->name() << std::endl;
73 } 71 }
74 } 72 }
75 73
76 void SummarizeCoalesced(std::vector<const TraceItem*>& items, 74 void SummarizeCoalesced(std::vector<const TraceItem*>& items,
77 std::ostream& out) { 75 std::ostream& out) {
78 // Group by file name. 76 // Group by file name.
79 std::map<std::string, Coalesced> coalesced; 77 std::map<std::string, Coalesced> coalesced;
80 for (size_t i = 0; i < items.size(); i++) { 78 for (const auto& item : items) {
81 Coalesced& c = coalesced[items[i]->name()]; 79 Coalesced& c = coalesced[item->name()];
82 c.name_ptr = &items[i]->name(); 80 c.name_ptr = &item->name();
83 c.total_duration += items[i]->delta().InMillisecondsF(); 81 c.total_duration += item->delta().InMillisecondsF();
84 c.count++; 82 c.count++;
85 } 83 }
86 84
87 // Sort by duration. 85 // Sort by duration.
88 std::vector<Coalesced> sorted; 86 std::vector<Coalesced> sorted;
89 for (std::map<std::string, Coalesced>::iterator iter = coalesced.begin(); 87 for (const auto& pair : coalesced)
90 iter != coalesced.end(); ++iter) 88 sorted.push_back(pair.second);
91 sorted.push_back(iter->second);
92 std::sort(sorted.begin(), sorted.end(), &CoalescedDurationGreater); 89 std::sort(sorted.begin(), sorted.end(), &CoalescedDurationGreater);
93 90
94 for (size_t i = 0; i < sorted.size(); i++) { 91 for (const auto& cur : sorted) {
95 out << base::StringPrintf(" %8.2f %d ", 92 out << base::StringPrintf(" %8.2f %d ", cur.total_duration, cur.count);
96 sorted[i].total_duration, sorted[i].count); 93 out << *cur.name_ptr << std::endl;
97 out << *sorted[i].name_ptr << std::endl;
98 } 94 }
99 } 95 }
100 96
101 void SummarizeFileExecs(std::vector<const TraceItem*>& execs, 97 void SummarizeFileExecs(std::vector<const TraceItem*>& execs,
102 std::ostream& out) { 98 std::ostream& out) {
103 out << "File execute times: (total time in ms, # executions, name)\n"; 99 out << "File execute times: (total time in ms, # executions, name)\n";
104 SummarizeCoalesced(execs, out); 100 SummarizeCoalesced(execs, out);
105 } 101 }
106 102
107 void SummarizeScriptExecs(std::vector<const TraceItem*>& execs, 103 void SummarizeScriptExecs(std::vector<const TraceItem*>& execs,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 return std::string(); 176 return std::string();
181 177
182 std::vector<TraceItem*> events = trace_log->events(); 178 std::vector<TraceItem*> events = trace_log->events();
183 179
184 // Classify all events. 180 // Classify all events.
185 std::vector<const TraceItem*> parses; 181 std::vector<const TraceItem*> parses;
186 std::vector<const TraceItem*> file_execs; 182 std::vector<const TraceItem*> file_execs;
187 std::vector<const TraceItem*> script_execs; 183 std::vector<const TraceItem*> script_execs;
188 std::vector<const TraceItem*> check_headers; 184 std::vector<const TraceItem*> check_headers;
189 int headers_checked = 0; 185 int headers_checked = 0;
190 for (size_t i = 0; i < events.size(); i++) { 186 for (const auto& event : events) {
191 switch (events[i]->type()) { 187 switch (event->type()) {
192 case TraceItem::TRACE_FILE_PARSE: 188 case TraceItem::TRACE_FILE_PARSE:
193 parses.push_back(events[i]); 189 parses.push_back(event);
194 break; 190 break;
195 case TraceItem::TRACE_FILE_EXECUTE: 191 case TraceItem::TRACE_FILE_EXECUTE:
196 file_execs.push_back(events[i]); 192 file_execs.push_back(event);
197 break; 193 break;
198 case TraceItem::TRACE_SCRIPT_EXECUTE: 194 case TraceItem::TRACE_SCRIPT_EXECUTE:
199 script_execs.push_back(events[i]); 195 script_execs.push_back(event);
200 break; 196 break;
201 case TraceItem::TRACE_CHECK_HEADERS: 197 case TraceItem::TRACE_CHECK_HEADERS:
202 check_headers.push_back(events[i]); 198 check_headers.push_back(event);
203 break; 199 break;
204 case TraceItem::TRACE_CHECK_HEADER: 200 case TraceItem::TRACE_CHECK_HEADER:
205 headers_checked++; 201 headers_checked++;
206 break; 202 break;
207 case TraceItem::TRACE_SETUP: 203 case TraceItem::TRACE_SETUP:
208 case TraceItem::TRACE_FILE_LOAD: 204 case TraceItem::TRACE_FILE_LOAD:
209 case TraceItem::TRACE_FILE_WRITE: 205 case TraceItem::TRACE_FILE_WRITE:
210 case TraceItem::TRACE_DEFINE_TARGET: 206 case TraceItem::TRACE_DEFINE_TARGET:
211 break; // Ignore these for the summary. 207 break; // Ignore these for the summary.
212 } 208 }
213 } 209 }
214 210
215 std::ostringstream out; 211 std::ostringstream out;
216 SummarizeParses(parses, out); 212 SummarizeParses(parses, out);
217 out << std::endl; 213 out << std::endl;
218 SummarizeFileExecs(file_execs, out); 214 SummarizeFileExecs(file_execs, out);
219 out << std::endl; 215 out << std::endl;
220 SummarizeScriptExecs(script_execs, out); 216 SummarizeScriptExecs(script_execs, out);
221 out << std::endl; 217 out << std::endl;
222 218
223 // Generally there will only be one header check, but it's theoretically 219 // Generally there will only be one header check, but it's theoretically
224 // possible for more than one to run if more than one build is going in 220 // possible for more than one to run if more than one build is going in
225 // parallel. Just report the total of all of them. 221 // parallel. Just report the total of all of them.
226 if (!check_headers.empty()) { 222 if (!check_headers.empty()) {
227 float check_headers_time = 0; 223 float check_headers_time = 0;
228 for (size_t i = 0; i < check_headers.size(); i++) 224 for (const auto& cur : check_headers)
229 check_headers_time += check_headers[i]->delta().InMillisecondsF(); 225 check_headers_time += cur->delta().InMillisecondsF();
230 226
231 out << "Header check time: (total time in ms, files checked)\n"; 227 out << "Header check time: (total time in ms, files checked)\n";
232 out << base::StringPrintf(" %8.2f %d\n", 228 out << base::StringPrintf(" %8.2f %d\n",
233 check_headers_time, headers_checked); 229 check_headers_time, headers_checked);
234 } 230 }
235 231
236 return out.str(); 232 return out.str();
237 } 233 }
238 234
239 void SaveTraces(const base::FilePath& file_name) { 235 void SaveTraces(const base::FilePath& file_name) {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 } 312 }
317 out << "}"; 313 out << "}";
318 } 314 }
319 315
320 out << "]}"; 316 out << "]}";
321 317
322 std::string out_str = out.str(); 318 std::string out_str = out.str();
323 base::WriteFile(file_name, out_str.data(), 319 base::WriteFile(file_name, out_str.data(),
324 static_cast<int>(out_str.size())); 320 static_cast<int>(out_str.size()));
325 } 321 }
OLDNEW
« tools/gn/args.cc ('K') | « tools/gn/substitution_writer.cc ('k') | tools/gn/value.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698