Index: runtime/vm/profiler.cc |
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc |
index 6ebe829103c80d7e52d29bf9af09abee0b4085bb..7945c1489e3f68f70b397d218829ff27a927dd9d 100644 |
--- a/runtime/vm/profiler.cc |
+++ b/runtime/vm/profiler.cc |
@@ -68,7 +68,6 @@ namespace dart { |
// fail (sometimes leading to a crash). |
// |
- |
DEFINE_FLAG(bool, profile, true, "Enable Sampling Profiler"); |
DEFINE_FLAG(bool, trace_profiled_isolates, false, "Trace profiled isolates."); |
@@ -81,6 +80,10 @@ intptr_t ProfilerManager::isolates_size_ = 0; |
void ProfilerManager::InitOnce() { |
+#if defined(USING_SIMULATOR) |
+ // Force disable of profiling on simulator. |
+ FLAG_profile = false; |
+#endif |
if (!FLAG_profile) { |
return; |
} |
@@ -123,8 +126,10 @@ void ProfilerManager::SetupIsolateForProfiling(Isolate* isolate) { |
{ |
ScopedMutex profiler_data_lock(isolate->profiler_data_mutex()); |
SampleBuffer* sample_buffer = new SampleBuffer(); |
+ ASSERT(sample_buffer != NULL); |
IsolateProfilerData* profiler_data = |
new IsolateProfilerData(isolate, sample_buffer); |
+ ASSERT(profiler_data != NULL); |
profiler_data->set_sample_interval_micros(1000); |
isolate->set_profiler_data(profiler_data); |
if (FLAG_trace_profiled_isolates) { |
@@ -148,6 +153,7 @@ void ProfilerManager::FreeIsolateProfilingData(Isolate* isolate) { |
isolate->set_profiler_data(NULL); |
SampleBuffer* sample_buffer = profiler_data->sample_buffer(); |
ASSERT(sample_buffer != NULL); |
+ profiler_data->set_sample_buffer(NULL); |
delete sample_buffer; |
delete profiler_data; |
if (FLAG_trace_profiled_isolates) { |
@@ -528,24 +534,27 @@ SampleBuffer::SampleBuffer(intptr_t capacity) { |
start_ = 0; |
end_ = 0; |
capacity_ = capacity; |
- samples_ = reinterpret_cast<Sample*>(calloc(capacity, sizeof(Sample))); |
+ samples_ = new Sample[capacity]; |
} |
SampleBuffer::~SampleBuffer() { |
if (samples_ != NULL) { |
- free(samples_); |
+ delete[] samples_; |
samples_ = NULL; |
} |
} |
Sample* SampleBuffer::ReserveSample() { |
+ ASSERT(samples_ != NULL); |
intptr_t index = end_; |
end_ = WrapIncrement(end_); |
if (end_ == start_) { |
start_ = WrapIncrement(start_); |
} |
+ ASSERT(index >= 0); |
+ ASSERT(index < capacity_); |
// Reset. |
samples_[index] = Sample(); |
return &samples_[index]; |