OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/source_report.h" | 5 #include "vm/source_report.h" |
6 | 6 |
7 #include "vm/compiler.h" | 7 #include "vm/compiler.h" |
8 #include "vm/object.h" | 8 #include "vm/object.h" |
9 #include "vm/object_store.h" | 9 #include "vm/object_store.h" |
10 | 10 |
11 namespace dart { | 11 namespace dart { |
12 | 12 |
13 SourceReport::SourceReport(ReportKind report_kind, CompileMode compile_mode) | 13 SourceReport::SourceReport(intptr_t report_set, CompileMode compile_mode) |
14 : report_kind_(report_kind), | 14 : report_set_(report_set), |
15 compile_mode_(compile_mode), | 15 compile_mode_(compile_mode), |
16 thread_(NULL), | 16 thread_(NULL), |
17 script_(NULL), | 17 script_(NULL), |
18 start_pos_(-1), | 18 start_pos_(-1), |
19 end_pos_(-1), | 19 end_pos_(-1), |
20 next_script_index_(0) { | 20 next_script_index_(0) { |
21 } | 21 } |
22 | 22 |
23 | 23 |
24 void SourceReport::Init(Thread* thread, | 24 void SourceReport::Init(Thread* thread, |
25 const Script* script, | 25 const Script* script, |
26 intptr_t start_pos, | 26 intptr_t start_pos, |
27 intptr_t end_pos) { | 27 intptr_t end_pos) { |
28 thread_ = thread; | 28 thread_ = thread; |
29 script_ = script; | 29 script_ = script; |
30 start_pos_ = start_pos; | 30 start_pos_ = start_pos; |
31 end_pos_ = end_pos; | 31 end_pos_ = end_pos; |
32 script_table_entries_.Clear(); | 32 script_table_entries_.Clear(); |
33 script_table_.Clear(); | 33 script_table_.Clear(); |
34 next_script_index_ = 0; | 34 next_script_index_ = 0; |
35 } | 35 } |
36 | 36 |
37 | 37 |
| 38 bool SourceReport::IsReportRequested(ReportKind report_kind) { |
| 39 return (report_set_ & report_kind) != 0; |
| 40 } |
| 41 |
| 42 |
38 bool SourceReport::ShouldSkipFunction(const Function& func) { | 43 bool SourceReport::ShouldSkipFunction(const Function& func) { |
39 if (script_ != NULL && !script_->IsNull()) { | 44 if (script_ != NULL && !script_->IsNull()) { |
40 if (func.script() != script_->raw()) { | 45 if (func.script() != script_->raw()) { |
41 // The function is from the wrong script. | 46 // The function is from the wrong script. |
42 return true; | 47 return true; |
43 } | 48 } |
44 if (((start_pos_ > 0) && (func.end_token_pos() < start_pos_)) || | 49 if (((start_pos_ > 0) && (func.end_token_pos() < start_pos_)) || |
45 ((end_pos_ > 0) && (func.token_pos() > end_pos_))) { | 50 ((end_pos_ > 0) && (func.token_pos() > end_pos_))) { |
46 // The function does not intersect with the requested token range. | 51 // The function does not intersect with the requested token range. |
47 return true; | 52 return true; |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 } | 243 } |
239 } | 244 } |
240 ASSERT(!code.IsNull()); | 245 ASSERT(!code.IsNull()); |
241 | 246 |
242 JSONObject range(jsarr); | 247 JSONObject range(jsarr); |
243 range.AddProperty("scriptIndex", GetScriptIndex(script)); | 248 range.AddProperty("scriptIndex", GetScriptIndex(script)); |
244 range.AddProperty("startPos", begin_pos); | 249 range.AddProperty("startPos", begin_pos); |
245 range.AddProperty("endPos", end_pos); | 250 range.AddProperty("endPos", end_pos); |
246 range.AddProperty("compiled", true); | 251 range.AddProperty("compiled", true); |
247 | 252 |
248 if (report_kind_ == kCallSites) { | 253 if (IsReportRequested(kCallSites)) { |
249 PrintCallSitesData(&range, func, code); | 254 PrintCallSitesData(&range, func, code); |
250 } else if (report_kind_ == kCoverage) { | 255 } |
| 256 if (IsReportRequested(kCoverage)) { |
251 PrintCoverageData(&range, func, code); | 257 PrintCoverageData(&range, func, code); |
252 } | 258 } |
253 } | 259 } |
254 | 260 |
255 | 261 |
256 void SourceReport::VisitLibrary(JSONArray* jsarr, const Library& lib) { | 262 void SourceReport::VisitLibrary(JSONArray* jsarr, const Library& lib) { |
257 Class& cls = Class::Handle(zone()); | 263 Class& cls = Class::Handle(zone()); |
258 Array& functions = Array::Handle(zone()); | 264 Array& functions = Array::Handle(zone()); |
259 Function& func = Function::Handle(zone()); | 265 Function& func = Function::Handle(zone()); |
260 ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate); | 266 ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 VisitClosures(&ranges); | 315 VisitClosures(&ranges); |
310 } | 316 } |
311 | 317 |
312 // Print the script table. | 318 // Print the script table. |
313 JSONArray scripts(&report, "scripts"); | 319 JSONArray scripts(&report, "scripts"); |
314 PrintScriptTable(&scripts); | 320 PrintScriptTable(&scripts); |
315 } | 321 } |
316 | 322 |
317 | 323 |
318 } // namespace dart | 324 } // namespace dart |
OLD | NEW |