| 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 "platform/utils.h" | 5 #include "platform/utils.h" |
| 6 | 6 |
| 7 #include "vm/allocation.h" | 7 #include "vm/allocation.h" |
| 8 #include "vm/atomic.h" | 8 #include "vm/atomic.h" |
| 9 #include "vm/code_patcher.h" | 9 #include "vm/code_patcher.h" |
| 10 #include "vm/isolate.h" | 10 #include "vm/isolate.h" |
| (...skipping 1309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 | 1320 |
| 1321 CodeRegionTrieNode* exclusive_root_; | 1321 CodeRegionTrieNode* exclusive_root_; |
| 1322 CodeRegionTable* live_code_table_; | 1322 CodeRegionTable* live_code_table_; |
| 1323 CodeRegionTable* dead_code_table_; | 1323 CodeRegionTable* dead_code_table_; |
| 1324 CodeRegionTable* tag_code_table_; | 1324 CodeRegionTable* tag_code_table_; |
| 1325 intptr_t dead_code_table_offset_; | 1325 intptr_t dead_code_table_offset_; |
| 1326 intptr_t tag_code_table_offset_; | 1326 intptr_t tag_code_table_offset_; |
| 1327 }; | 1327 }; |
| 1328 | 1328 |
| 1329 | 1329 |
| 1330 void Profiler::PrintToJSONStream(Isolate* isolate, JSONStream* stream, | 1330 void Profiler::PrintJSON(Isolate* isolate, JSONStream* stream, |
| 1331 bool full, TagOrder tag_order) { | 1331 bool full, TagOrder tag_order) { |
| 1332 ASSERT(isolate == Isolate::Current()); | 1332 ASSERT(isolate == Isolate::Current()); |
| 1333 // Disable profile interrupts while processing the buffer. | 1333 // Disable profile interrupts while processing the buffer. |
| 1334 EndExecution(isolate); | 1334 EndExecution(isolate); |
| 1335 MutexLocker profiler_data_lock(isolate->profiler_data_mutex()); | 1335 MutexLocker profiler_data_lock(isolate->profiler_data_mutex()); |
| 1336 IsolateProfilerData* profiler_data = isolate->profiler_data(); | 1336 IsolateProfilerData* profiler_data = isolate->profiler_data(); |
| 1337 if (profiler_data == NULL) { | 1337 if (profiler_data == NULL) { |
| 1338 JSONObject error(stream); | 1338 JSONObject error(stream); |
| 1339 error.AddProperty("type", "Error"); | 1339 error.AddProperty("type", "Error"); |
| 1340 error.AddProperty("text", "Isolate does not have profiling enabled."); | 1340 error.AddProperty("text", "Isolate does not have profiling enabled."); |
| 1341 return; | 1341 return; |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1456 Dart_FileCloseCallback file_close = Isolate::file_close_callback(); | 1456 Dart_FileCloseCallback file_close = Isolate::file_close_callback(); |
| 1457 Dart_FileWriteCallback file_write = Isolate::file_write_callback(); | 1457 Dart_FileWriteCallback file_write = Isolate::file_write_callback(); |
| 1458 if ((file_open == NULL) || (file_close == NULL) || (file_write == NULL)) { | 1458 if ((file_open == NULL) || (file_close == NULL) || (file_write == NULL)) { |
| 1459 // Embedder has not provided necessary callbacks. | 1459 // Embedder has not provided necessary callbacks. |
| 1460 return; | 1460 return; |
| 1461 } | 1461 } |
| 1462 // We will be looking up code objects within the isolate. | 1462 // We will be looking up code objects within the isolate. |
| 1463 ASSERT(Isolate::Current() == isolate); | 1463 ASSERT(Isolate::Current() == isolate); |
| 1464 JSONStream stream(10 * MB); | 1464 JSONStream stream(10 * MB); |
| 1465 intptr_t pid = OS::ProcessId(); | 1465 intptr_t pid = OS::ProcessId(); |
| 1466 PrintToJSONStream(isolate, &stream, true, Profiler::kNoTags); | 1466 PrintJSON(isolate, &stream, true, Profiler::kNoTags); |
| 1467 const char* format = "%s/dart-profile-%" Pd "-%" Pd ".json"; | 1467 const char* format = "%s/dart-profile-%" Pd "-%" Pd ".json"; |
| 1468 intptr_t len = OS::SNPrint(NULL, 0, format, | 1468 intptr_t len = OS::SNPrint(NULL, 0, format, |
| 1469 FLAG_profile_dir, pid, isolate->main_port()); | 1469 FLAG_profile_dir, pid, isolate->main_port()); |
| 1470 char* filename = Isolate::Current()->current_zone()->Alloc<char>(len + 1); | 1470 char* filename = Isolate::Current()->current_zone()->Alloc<char>(len + 1); |
| 1471 OS::SNPrint(filename, len + 1, format, | 1471 OS::SNPrint(filename, len + 1, format, |
| 1472 FLAG_profile_dir, pid, isolate->main_port()); | 1472 FLAG_profile_dir, pid, isolate->main_port()); |
| 1473 void* f = file_open(filename, true); | 1473 void* f = file_open(filename, true); |
| 1474 if (f == NULL) { | 1474 if (f == NULL) { |
| 1475 // Cannot write. | 1475 // Cannot write. |
| 1476 return; | 1476 return; |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1723 ProfilerDartStackWalker stackWalker(sample); | 1723 ProfilerDartStackWalker stackWalker(sample); |
| 1724 stackWalker.walk(); | 1724 stackWalker.walk(); |
| 1725 } else { | 1725 } else { |
| 1726 // TODO(johnmccutchan): Support collecting only Dart frames with | 1726 // TODO(johnmccutchan): Support collecting only Dart frames with |
| 1727 // ProfilerNativeStackWalker. | 1727 // ProfilerNativeStackWalker. |
| 1728 } | 1728 } |
| 1729 } | 1729 } |
| 1730 } | 1730 } |
| 1731 | 1731 |
| 1732 } // namespace dart | 1732 } // namespace dart |
| OLD | NEW |