Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Unified Diff: runtime/vm/profiler_service.cc

Issue 1412733008: Switch profiler from isolates to threads (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/profiler_service.cc
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index 7ea7d3b129cc138ebf54bb7b7f3494861c74cffb..02a75d3525f12fc49e0cf8ec6330d6ca443a864a 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -1051,13 +1051,7 @@ class ProfileBuilder : public ValueObject {
void FilterSamples() {
ScopeTimer sw("ProfileBuilder::FilterSamples", FLAG_trace_profiler);
- Isolate* isolate = thread_->isolate();
- MutexLocker profiler_data_lock(isolate->profiler_data_mutex());
- IsolateProfilerData* profiler_data = isolate->profiler_data();
- if (profiler_data == NULL) {
- return;
- }
- SampleBuffer* sample_buffer = profiler_data->sample_buffer();
+ SampleBuffer* sample_buffer = Profiler::sample_buffer();
if (sample_buffer == NULL) {
return;
}
@@ -2202,16 +2196,13 @@ void ProfilerService::PrintJSONImpl(Thread* thread,
intptr_t extra_tags,
SampleFilter* filter) {
Isolate* isolate = thread->isolate();
- // Disable profile interrupts while processing the buffer.
- Profiler::EndExecution(isolate);
+ // Disable thread interrupts while processing the buffer.
+ thread->DisableThreadInterrupts();
Ivan Posva 2015/10/28 19:31:53 Should we have a DisableInterruptsScope?
Cutch 2015/10/28 19:50:33 Done here and below.
- {
- MutexLocker profiler_data_lock(isolate->profiler_data_mutex());
- IsolateProfilerData* profiler_data = isolate->profiler_data();
- if (profiler_data == NULL) {
- stream->PrintError(kFeatureDisabled, NULL);
- return;
- }
+ SampleBuffer* sample_buffer = Profiler::sample_buffer();
+ if (sample_buffer == NULL) {
+ stream->PrintError(kFeatureDisabled, NULL);
+ return;
}
{
@@ -2222,8 +2213,8 @@ void ProfilerService::PrintJSONImpl(Thread* thread,
profile.PrintJSON(stream);
}
- // Enable profile interrupts.
- Profiler::BeginExecution(isolate);
+ // Re-enable.
+ thread->EnableThreadInterrupts();
}
@@ -2278,24 +2269,22 @@ void ProfilerService::PrintAllocationJSON(JSONStream* stream,
void ProfilerService::ClearSamples() {
- Isolate* isolate = Isolate::Current();
-
- // Disable profile interrupts while processing the buffer.
- Profiler::EndExecution(isolate);
-
- MutexLocker profiler_data_lock(isolate->profiler_data_mutex());
- IsolateProfilerData* profiler_data = isolate->profiler_data();
- if (profiler_data == NULL) {
+ SampleBuffer* sample_buffer = Profiler::sample_buffer();
+ if (sample_buffer == NULL) {
return;
}
- SampleBuffer* sample_buffer = profiler_data->sample_buffer();
- ASSERT(sample_buffer != NULL);
+
+ Thread* thread = Thread::Current();
+ Isolate* isolate = thread->isolate();
+
+ // Disable thread interrupts while processing the buffer.
+ thread->DisableThreadInterrupts();
ClearProfileVisitor clear_profile(isolate);
sample_buffer->VisitSamples(&clear_profile);
- // Enable profile interrupts.
- Profiler::BeginExecution(isolate);
+ // Re-enable.
+ thread->EnableThreadInterrupts();
}
} // namespace dart

Powered by Google App Engine
This is Rietveld 408576698