| 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/address_sanitizer.h" | 5 #include "platform/address_sanitizer.h" |
| 6 #include "platform/memory_sanitizer.h" | 6 #include "platform/memory_sanitizer.h" |
| 7 #include "platform/utils.h" | 7 #include "platform/utils.h" |
| 8 | 8 |
| 9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
| 10 #include "vm/atomic.h" | 10 #include "vm/atomic.h" |
| (...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 break; | 1246 break; |
| 1247 } | 1247 } |
| 1248 processed_sample->Add(current->At(i)); | 1248 processed_sample->Add(current->At(i)); |
| 1249 } | 1249 } |
| 1250 | 1250 |
| 1251 truncated = truncated || current->truncated_trace(); | 1251 truncated = truncated || current->truncated_trace(); |
| 1252 current = Next(current); | 1252 current = Next(current); |
| 1253 } | 1253 } |
| 1254 | 1254 |
| 1255 if (!sample->exit_frame_sample()) { | 1255 if (!sample->exit_frame_sample()) { |
| 1256 Isolate* isolate = thread->isolate(); | |
| 1257 Isolate* vm_isolate = Dart::vm_isolate(); | 1256 Isolate* vm_isolate = Dart::vm_isolate(); |
| 1258 processed_sample->FixupCaller(isolate, | 1257 processed_sample->FixupCaller(thread, |
| 1259 vm_isolate, | 1258 vm_isolate, |
| 1260 sample->pc_marker(), | 1259 sample->pc_marker(), |
| 1261 sample->GetStackBuffer()); | 1260 sample->GetStackBuffer()); |
| 1262 } | 1261 } |
| 1263 | 1262 |
| 1264 processed_sample->set_truncated(truncated); | 1263 processed_sample->set_truncated(truncated); |
| 1265 return processed_sample; | 1264 return processed_sample; |
| 1266 } | 1265 } |
| 1267 | 1266 |
| 1268 | 1267 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1289 ProcessedSample::ProcessedSample() | 1288 ProcessedSample::ProcessedSample() |
| 1290 : pcs_(kSampleSize), | 1289 : pcs_(kSampleSize), |
| 1291 timestamp_(0), | 1290 timestamp_(0), |
| 1292 vm_tag_(0), | 1291 vm_tag_(0), |
| 1293 user_tag_(0), | 1292 user_tag_(0), |
| 1294 allocation_cid_(-1), | 1293 allocation_cid_(-1), |
| 1295 truncated_(false) { | 1294 truncated_(false) { |
| 1296 } | 1295 } |
| 1297 | 1296 |
| 1298 | 1297 |
| 1299 void ProcessedSample::FixupCaller(Isolate* isolate, | 1298 void ProcessedSample::FixupCaller(Thread* thread, |
| 1300 Isolate* vm_isolate, | 1299 Isolate* vm_isolate, |
| 1301 uword pc_marker, | 1300 uword pc_marker, |
| 1302 uword* stack_buffer) { | 1301 uword* stack_buffer) { |
| 1303 REUSABLE_CODE_HANDLESCOPE(isolate); | 1302 REUSABLE_CODE_HANDLESCOPE(thread); |
| 1304 // Lookup code object for leaf frame. | 1303 // Lookup code object for leaf frame. |
| 1305 Code& code = reused_code_handle.Handle(); | 1304 Code& code = reused_code_handle.Handle(); |
| 1306 code = FindCodeForPC(isolate, vm_isolate, At(0)); | 1305 code = FindCodeForPC(thread->isolate(), vm_isolate, At(0)); |
| 1307 if (code.IsNull()) { | 1306 if (code.IsNull()) { |
| 1308 return; | 1307 return; |
| 1309 } | 1308 } |
| 1310 if (code.compile_timestamp() > timestamp()) { | 1309 if (code.compile_timestamp() > timestamp()) { |
| 1311 // Code compiled after sample. Ignore. | 1310 // Code compiled after sample. Ignore. |
| 1312 return; | 1311 return; |
| 1313 } | 1312 } |
| 1314 CheckForMissingDartFrame(isolate, vm_isolate, code, pc_marker, stack_buffer); | 1313 CheckForMissingDartFrame( |
| 1314 thread->isolate(), vm_isolate, code, pc_marker, stack_buffer); |
| 1315 } | 1315 } |
| 1316 | 1316 |
| 1317 | 1317 |
| 1318 void ProcessedSample::CheckForMissingDartFrame(Isolate* isolate, | 1318 void ProcessedSample::CheckForMissingDartFrame(Isolate* isolate, |
| 1319 Isolate* vm_isolate, | 1319 Isolate* vm_isolate, |
| 1320 const Code& code, | 1320 const Code& code, |
| 1321 uword pc_marker, | 1321 uword pc_marker, |
| 1322 uword* stack_buffer) { | 1322 uword* stack_buffer) { |
| 1323 // Some stubs (and intrinsics) do not push a frame onto the stack leaving | 1323 // Some stubs (and intrinsics) do not push a frame onto the stack leaving |
| 1324 // the frame pointer in the caller. | 1324 // the frame pointer in the caller. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1391 uword pc) { | 1391 uword pc) { |
| 1392 return vm_isolate->heap()->CodeContains(pc) | 1392 return vm_isolate->heap()->CodeContains(pc) |
| 1393 || isolate->heap()->CodeContains(pc); | 1393 || isolate->heap()->CodeContains(pc); |
| 1394 } | 1394 } |
| 1395 | 1395 |
| 1396 | 1396 |
| 1397 ProcessedSampleBuffer::ProcessedSampleBuffer() { | 1397 ProcessedSampleBuffer::ProcessedSampleBuffer() { |
| 1398 } | 1398 } |
| 1399 | 1399 |
| 1400 } // namespace dart | 1400 } // namespace dart |
| OLD | NEW |