| 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 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 837 // When running in the simulator, the runtime entry function address | 837 // When running in the simulator, the runtime entry function address |
| 838 // (stored as the vm tag) is the address of a redirect function. | 838 // (stored as the vm tag) is the address of a redirect function. |
| 839 // Attempt to find the real runtime entry function address and use that. | 839 // Attempt to find the real runtime entry function address and use that. |
| 840 uword redirect_vm_tag = Simulator::FunctionForRedirect(vm_tag); | 840 uword redirect_vm_tag = Simulator::FunctionForRedirect(vm_tag); |
| 841 if (redirect_vm_tag != 0) { | 841 if (redirect_vm_tag != 0) { |
| 842 vm_tag = redirect_vm_tag; | 842 vm_tag = redirect_vm_tag; |
| 843 } | 843 } |
| 844 #endif | 844 #endif |
| 845 sample->set_vm_tag(vm_tag); | 845 sample->set_vm_tag(vm_tag); |
| 846 sample->set_user_tag(isolate->user_tag()); | 846 sample->set_user_tag(isolate->user_tag()); |
| 847 // TODO(rmacnak): Consider tracking the current Task kind so the profiler |
| 848 // can say the program spent x% of cpu time in the main thread, GC, |
| 849 // background compilation, etc. |
| 850 sample->set_is_mutator_thread(thread->IsMutatorThread()); |
| 847 return sample; | 851 return sample; |
| 848 } | 852 } |
| 849 | 853 |
| 850 | 854 |
| 851 static bool CheckIsolate(Isolate* isolate) { | 855 static bool CheckIsolate(Isolate* isolate) { |
| 852 if ((isolate == NULL) || (Dart::vm_isolate() == NULL)) { | 856 if ((isolate == NULL) || (Dart::vm_isolate() == NULL)) { |
| 853 // No isolate. | 857 // No isolate. |
| 854 return false; | 858 return false; |
| 855 } | 859 } |
| 856 return isolate != Dart::vm_isolate(); | 860 return isolate != Dart::vm_isolate(); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 } | 982 } |
| 979 | 983 |
| 980 if (!InitialRegisterCheck(pc, fp, sp)) { | 984 if (!InitialRegisterCheck(pc, fp, sp)) { |
| 981 return; | 985 return; |
| 982 } | 986 } |
| 983 | 987 |
| 984 if (!CheckIsolate(isolate)) { | 988 if (!CheckIsolate(isolate)) { |
| 985 return; | 989 return; |
| 986 } | 990 } |
| 987 | 991 |
| 988 if (!thread->IsMutatorThread()) { | |
| 989 // Not a mutator thread. | |
| 990 // TODO(johnmccutchan): Profile all threads with an isolate. | |
| 991 return; | |
| 992 } | |
| 993 | |
| 994 uword stack_lower = 0; | 992 uword stack_lower = 0; |
| 995 uword stack_upper = 0; | 993 uword stack_upper = 0; |
| 996 if (!GetAndValidateIsolateStackBounds(thread, | 994 if (!GetAndValidateIsolateStackBounds(thread, |
| 997 fp, | 995 fp, |
| 998 sp, | 996 sp, |
| 999 &stack_lower, | 997 &stack_lower, |
| 1000 &stack_upper)) { | 998 &stack_upper)) { |
| 1001 // Could not get stack boundary. | 999 // Could not get stack boundary. |
| 1002 return; | 1000 return; |
| 1003 } | 1001 } |
| 1004 | 1002 |
| 1005 // At this point we have a valid stack boundary for this isolate and | 1003 // At this point we have a valid stack boundary for this isolate and |
| 1006 // know that our initial stack and frame pointers are within the boundary. | 1004 // know that our initial stack and frame pointers are within the boundary. |
| 1007 SampleBuffer* sample_buffer = Profiler::sample_buffer(); | 1005 SampleBuffer* sample_buffer = Profiler::sample_buffer(); |
| 1008 if (sample_buffer == NULL) { | 1006 if (sample_buffer == NULL) { |
| 1009 // Profiler not initialized. | 1007 // Profiler not initialized. |
| 1010 return; | 1008 return; |
| 1011 } | 1009 } |
| 1012 | 1010 |
| 1013 // Setup sample. | 1011 // Setup sample. |
| 1014 Sample* sample = SetupSample(thread, sample_buffer, os_thread->trace_id()); | 1012 Sample* sample = SetupSample(thread, sample_buffer, os_thread->trace_id()); |
| 1015 // Increment counter for vm tag. | 1013 // Increment counter for vm tag. |
| 1016 VMTagCounters* counters = isolate->vm_tag_counters(); | 1014 VMTagCounters* counters = isolate->vm_tag_counters(); |
| 1017 ASSERT(counters != NULL); | 1015 ASSERT(counters != NULL); |
| 1018 counters->Increment(sample->vm_tag()); | 1016 if (thread->IsMutatorThread()) { |
| 1017 counters->Increment(sample->vm_tag()); |
| 1018 } |
| 1019 | 1019 |
| 1020 ProfilerNativeStackWalker native_stack_walker(isolate, | 1020 ProfilerNativeStackWalker native_stack_walker(isolate, |
| 1021 sample, | 1021 sample, |
| 1022 sample_buffer, | 1022 sample_buffer, |
| 1023 stack_lower, | 1023 stack_lower, |
| 1024 stack_upper, | 1024 stack_upper, |
| 1025 pc, | 1025 pc, |
| 1026 fp, | 1026 fp, |
| 1027 sp); | 1027 sp); |
| 1028 | 1028 |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1380 | 1380 |
| 1381 | 1381 |
| 1382 ProcessedSampleBuffer::ProcessedSampleBuffer() | 1382 ProcessedSampleBuffer::ProcessedSampleBuffer() |
| 1383 : code_lookup_table_(new CodeLookupTable(Thread::Current())) { | 1383 : code_lookup_table_(new CodeLookupTable(Thread::Current())) { |
| 1384 ASSERT(code_lookup_table_ != NULL); | 1384 ASSERT(code_lookup_table_ != NULL); |
| 1385 } | 1385 } |
| 1386 | 1386 |
| 1387 #endif // !PRODUCT | 1387 #endif // !PRODUCT |
| 1388 | 1388 |
| 1389 } // namespace dart | 1389 } // namespace dart |
| OLD | NEW |