OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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/coverage.h" | 5 #include "vm/coverage.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 | 8 |
9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
10 #include "vm/isolate.h" | 10 #include "vm/isolate.h" |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 break; | 224 break; |
225 } | 225 } |
226 CompileAndAdd(function, hits_or_sites, pos_to_line, as_call_sites); | 226 CompileAndAdd(function, hits_or_sites, pos_to_line, as_call_sites); |
227 i++; | 227 i++; |
228 } | 228 } |
229 } | 229 } |
230 } | 230 } |
231 } | 231 } |
232 | 232 |
233 | 233 |
234 void CodeCoverage::Write(Isolate* isolate) { | 234 void CodeCoverage::Write(Thread* thread) { |
235 if (FLAG_coverage_dir == NULL) { | 235 if (FLAG_coverage_dir == NULL) { |
236 return; | 236 return; |
237 } | 237 } |
238 | 238 |
239 Dart_FileOpenCallback file_open = Isolate::file_open_callback(); | 239 Dart_FileOpenCallback file_open = Isolate::file_open_callback(); |
240 Dart_FileWriteCallback file_write = Isolate::file_write_callback(); | 240 Dart_FileWriteCallback file_write = Isolate::file_write_callback(); |
241 Dart_FileCloseCallback file_close = Isolate::file_close_callback(); | 241 Dart_FileCloseCallback file_close = Isolate::file_close_callback(); |
242 if ((file_open == NULL) || (file_write == NULL) || (file_close == NULL)) { | 242 if ((file_open == NULL) || (file_write == NULL) || (file_close == NULL)) { |
243 return; | 243 return; |
244 } | 244 } |
245 | 245 |
246 JSONStream stream; | 246 JSONStream stream; |
247 PrintJSON(isolate, &stream, NULL, false); | 247 PrintJSON(thread, &stream, NULL, false); |
248 | 248 |
249 intptr_t pid = OS::ProcessId(); | 249 intptr_t pid = OS::ProcessId(); |
250 char* filename = OS::SCreate(Thread::Current()->zone(), | 250 char* filename = OS::SCreate(thread->zone(), |
251 "%s/dart-cov-%" Pd "-%" Pd64 ".json", | 251 "%s/dart-cov-%" Pd "-%" Pd64 ".json", |
252 FLAG_coverage_dir, pid, isolate->main_port()); | 252 FLAG_coverage_dir, pid, thread->isolate()->main_port()); |
253 void* file = (*file_open)(filename, true); | 253 void* file = (*file_open)(filename, true); |
254 if (file == NULL) { | 254 if (file == NULL) { |
255 OS::Print("Failed to write coverage file: %s\n", filename); | 255 OS::Print("Failed to write coverage file: %s\n", filename); |
256 return; | 256 return; |
257 } | 257 } |
258 (*file_write)(stream.buffer()->buf(), stream.buffer()->length(), file); | 258 (*file_write)(stream.buffer()->buf(), stream.buffer()->length(), file); |
259 (*file_close)(file); | 259 (*file_close)(file); |
260 } | 260 } |
261 | 261 |
262 | 262 |
263 void CodeCoverage::PrintJSON(Isolate* isolate, | 263 void CodeCoverage::PrintJSON(Thread* thread, |
264 JSONStream* stream, | 264 JSONStream* stream, |
265 CoverageFilter* filter, | 265 CoverageFilter* filter, |
266 bool as_call_sites) { | 266 bool as_call_sites) { |
267 CoverageFilterAll default_filter; | 267 CoverageFilterAll default_filter; |
268 if (filter == NULL) { | 268 if (filter == NULL) { |
269 filter = &default_filter; | 269 filter = &default_filter; |
270 } | 270 } |
271 const GrowableObjectArray& libs = GrowableObjectArray::Handle( | 271 const GrowableObjectArray& libs = GrowableObjectArray::Handle( |
272 isolate, isolate->object_store()->libraries()); | 272 thread->zone(), |
| 273 thread->isolate()->object_store()->libraries()); |
273 Library& lib = Library::Handle(); | 274 Library& lib = Library::Handle(); |
274 Class& cls = Class::Handle(); | 275 Class& cls = Class::Handle(); |
275 JSONObject coverage(stream); | 276 JSONObject coverage(stream); |
276 coverage.AddProperty("type", "CodeCoverage"); | 277 coverage.AddProperty("type", "CodeCoverage"); |
277 { | 278 { |
278 JSONArray jsarr(&coverage, "coverage"); | 279 JSONArray jsarr(&coverage, "coverage"); |
279 for (int i = 0; i < libs.Length(); i++) { | 280 for (int i = 0; i < libs.Length(); i++) { |
280 lib ^= libs.At(i); | 281 lib ^= libs.At(i); |
281 ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate); | 282 ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate); |
282 while (it.HasNext()) { | 283 while (it.HasNext()) { |
283 cls = it.GetNextClass(); | 284 cls = it.GetNextClass(); |
284 ASSERT(!cls.IsNull()); | 285 ASSERT(!cls.IsNull()); |
285 PrintClass(lib, cls, jsarr, filter, as_call_sites); | 286 PrintClass(lib, cls, jsarr, filter, as_call_sites); |
286 } | 287 } |
287 } | 288 } |
288 } | 289 } |
289 } | 290 } |
290 | 291 |
291 | 292 |
292 } // namespace dart | 293 } // namespace dart |
OLD | NEW |