Chromium Code Reviews| 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 bool Profiler::initialized_ = false; | 62 bool Profiler::initialized_ = false; |
| 63 SampleBuffer* Profiler::sample_buffer_ = NULL; | 63 SampleBuffer* Profiler::sample_buffer_ = NULL; |
| 64 AllocationSampleBuffer* Profiler::allocation_sample_buffer_ = NULL; | 64 AllocationSampleBuffer* Profiler::allocation_sample_buffer_ = NULL; |
| 65 ProfilerCounters Profiler::counters_; | 65 ProfilerCounters Profiler::counters_; |
| 66 | 66 |
| 67 void Profiler::InitOnce() { | 67 void Profiler::InitOnce() { |
| 68 // Place some sane restrictions on user controlled flags. | 68 // Place some sane restrictions on user controlled flags. |
| 69 SetSamplePeriod(FLAG_profile_period); | 69 SetSamplePeriod(FLAG_profile_period); |
| 70 SetSampleDepth(FLAG_max_profile_depth); | 70 SetSampleDepth(FLAG_max_profile_depth); |
| 71 Sample::InitOnce(); | 71 Sample::InitOnce(); |
| 72 #if !defined(TARGET_ARCH_DBC) | |
|
zra
2017/07/31 15:03:11
I thought the profiler was kind of working somewha
rmacnak
2017/07/31 21:12:12
Removed; this was a bad merge. I was working from
| |
| 72 if (!FLAG_profiler) { | 73 if (!FLAG_profiler) { |
| 73 return; | 74 return; |
| 74 } | 75 } |
| 75 ASSERT(!initialized_); | 76 ASSERT(!initialized_); |
| 76 sample_buffer_ = new SampleBuffer(); | 77 sample_buffer_ = new SampleBuffer(); |
| 77 Profiler::InitAllocationSampleBuffer(); | 78 Profiler::InitAllocationSampleBuffer(); |
| 78 // Zero counters. | 79 // Zero counters. |
| 79 memset(&counters_, 0, sizeof(counters_)); | 80 memset(&counters_, 0, sizeof(counters_)); |
| 80 NativeSymbolResolver::InitOnce(); | 81 NativeSymbolResolver::InitOnce(); |
| 82 ThreadInterrupter::InitOnce(); | |
| 81 ThreadInterrupter::SetInterruptPeriod(FLAG_profile_period); | 83 ThreadInterrupter::SetInterruptPeriod(FLAG_profile_period); |
| 82 ThreadInterrupter::Startup(); | 84 ThreadInterrupter::Startup(); |
| 83 initialized_ = true; | 85 initialized_ = true; |
| 86 #endif // !DBC | |
| 84 } | 87 } |
| 85 | 88 |
| 86 void Profiler::InitAllocationSampleBuffer() { | 89 void Profiler::InitAllocationSampleBuffer() { |
| 87 if (FLAG_profiler_native_memory && | 90 if (FLAG_profiler_native_memory && |
| 88 (Profiler::allocation_sample_buffer_ == NULL)) { | 91 (Profiler::allocation_sample_buffer_ == NULL)) { |
| 89 Profiler::allocation_sample_buffer_ = new AllocationSampleBuffer(); | 92 Profiler::allocation_sample_buffer_ = new AllocationSampleBuffer(); |
| 90 } | 93 } |
| 91 } | 94 } |
| 92 | 95 |
| 93 void Profiler::Shutdown() { | 96 void Profiler::Shutdown() { |
| 97 #if !defined(TARGET_ARCH_DBC) | |
| 94 if (!FLAG_profiler) { | 98 if (!FLAG_profiler) { |
| 95 return; | 99 return; |
| 96 } | 100 } |
| 97 ASSERT(initialized_); | 101 ASSERT(initialized_); |
| 98 ThreadInterrupter::Shutdown(); | 102 ThreadInterrupter::Shutdown(); |
| 99 NativeSymbolResolver::ShutdownOnce(); | 103 NativeSymbolResolver::ShutdownOnce(); |
| 104 // Note we do not free the sample buffer because there may be SIGPROFs | |
|
zra
2017/07/31 15:03:11
Can you set a "shutting down" bit somewhere that t
rmacnak
2017/07/31 21:12:12
The signal handler could be between that check and
zra
2017/07/31 21:59:28
Maybe some thing like:
Signal handler:
AtomicInc(
rmacnak
2017/08/01 19:58:58
Added TODO(30309)
| |
| 105 // in flight. | |
| 106 #endif // !DBC | |
| 100 } | 107 } |
| 101 | 108 |
| 102 void Profiler::SetSampleDepth(intptr_t depth) { | 109 void Profiler::SetSampleDepth(intptr_t depth) { |
| 103 const int kMinimumDepth = 2; | 110 const int kMinimumDepth = 2; |
| 104 const int kMaximumDepth = 255; | 111 const int kMaximumDepth = 255; |
| 105 if (depth < kMinimumDepth) { | 112 if (depth < kMinimumDepth) { |
| 106 FLAG_max_profile_depth = kMinimumDepth; | 113 FLAG_max_profile_depth = kMinimumDepth; |
| 107 } else if (depth > kMaximumDepth) { | 114 } else if (depth > kMaximumDepth) { |
| 108 FLAG_max_profile_depth = kMaximumDepth; | 115 FLAG_max_profile_depth = kMaximumDepth; |
| 109 } else { | 116 } else { |
| (...skipping 1571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1681 } | 1688 } |
| 1682 | 1689 |
| 1683 ProcessedSampleBuffer::ProcessedSampleBuffer() | 1690 ProcessedSampleBuffer::ProcessedSampleBuffer() |
| 1684 : code_lookup_table_(new CodeLookupTable(Thread::Current())) { | 1691 : code_lookup_table_(new CodeLookupTable(Thread::Current())) { |
| 1685 ASSERT(code_lookup_table_ != NULL); | 1692 ASSERT(code_lookup_table_ != NULL); |
| 1686 } | 1693 } |
| 1687 | 1694 |
| 1688 #endif // !PRODUCT | 1695 #endif // !PRODUCT |
| 1689 | 1696 |
| 1690 } // namespace dart | 1697 } // namespace dart |
| OLD | NEW |