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/profiler_service.h" | 5 #include "vm/profiler_service.h" |
6 | 6 |
7 #include "vm/growable_array.h" | 7 #include "vm/growable_array.h" |
8 #include "vm/native_symbol.h" | 8 #include "vm/native_symbol.h" |
9 #include "vm/object.h" | 9 #include "vm/object.h" |
10 #include "vm/os.h" | 10 #include "vm/os.h" |
(...skipping 1372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1383 ProfileCode* profile_code = GetProfileCode(pc, | 1383 ProfileCode* profile_code = GetProfileCode(pc, |
1384 sample->timestamp()); | 1384 sample->timestamp()); |
1385 ProfileFunction* function = profile_code->function(); | 1385 ProfileFunction* function = profile_code->function(); |
1386 ASSERT(function != NULL); | 1386 ASSERT(function != NULL); |
1387 const intptr_t code_index = profile_code->code_table_index(); | 1387 const intptr_t code_index = profile_code->code_table_index(); |
1388 ASSERT(profile_code != NULL); | 1388 ASSERT(profile_code != NULL); |
1389 const Code& code = Code::ZoneHandle(profile_code->code()); | 1389 const Code& code = Code::ZoneHandle(profile_code->code()); |
1390 GrowableArray<Function*> inlined_functions; | 1390 GrowableArray<Function*> inlined_functions; |
1391 if (!code.IsNull()) { | 1391 if (!code.IsNull()) { |
1392 intptr_t offset = pc - code.EntryPoint(); | 1392 intptr_t offset = pc - code.EntryPoint(); |
| 1393 if (frame_index != 0) { |
| 1394 // The PC of frames below the top frame is a call's return address, |
| 1395 // which can belong to a different inlining interval than the call. |
| 1396 offset--; |
| 1397 } |
1393 code.GetInlinedFunctionsAt(offset, &inlined_functions); | 1398 code.GetInlinedFunctionsAt(offset, &inlined_functions); |
1394 } | 1399 } |
1395 if (code.IsNull() || (inlined_functions.length() == 0)) { | 1400 if (code.IsNull() || (inlined_functions.length() == 0)) { |
1396 // No inlined functions. | 1401 // No inlined functions. |
1397 if (inclusive_tree_) { | 1402 if (inclusive_tree_) { |
1398 current = AppendKind(code, current); | 1403 current = AppendKind(code, current); |
1399 } | 1404 } |
1400 current = ProcessFunction(current, | 1405 current = ProcessFunction(current, |
1401 sample_index, | 1406 sample_index, |
1402 sample, | 1407 sample, |
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2396 Isolate* isolate = thread->isolate(); | 2401 Isolate* isolate = thread->isolate(); |
2397 | 2402 |
2398 // Disable thread interrupts while processing the buffer. | 2403 // Disable thread interrupts while processing the buffer. |
2399 DisableThreadInterruptsScope dtis(thread); | 2404 DisableThreadInterruptsScope dtis(thread); |
2400 | 2405 |
2401 ClearProfileVisitor clear_profile(isolate); | 2406 ClearProfileVisitor clear_profile(isolate); |
2402 sample_buffer->VisitSamples(&clear_profile); | 2407 sample_buffer->VisitSamples(&clear_profile); |
2403 } | 2408 } |
2404 | 2409 |
2405 } // namespace dart | 2410 } // namespace dart |
OLD | NEW |