Chromium Code Reviews| Index: content/browser/profiler_controller_impl.cc |
| diff --git a/content/browser/profiler_controller_impl.cc b/content/browser/profiler_controller_impl.cc |
| index 98fd2c068ac377ccde4b6025ab2758721c1fa738..8388413311bcb4ffbc37b764325087cc67c5447d 100644 |
| --- a/content/browser/profiler_controller_impl.cc |
| +++ b/content/browser/profiler_controller_impl.cc |
| @@ -72,7 +72,8 @@ void ProfilerControllerImpl::Unregister(const ProfilerSubscriber* subscriber) { |
| } |
| void ProfilerControllerImpl::GetProfilerDataFromChildProcesses( |
| - int sequence_number) { |
| + int sequence_number, |
| + int current_profiling_phase) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| int pending_processes = 0; |
| @@ -85,8 +86,10 @@ void ProfilerControllerImpl::GetProfilerDataFromChildProcesses( |
| continue; |
| ++pending_processes; |
| - if (!iter.Send(new ChildProcessMsg_GetChildProfilerData(sequence_number))) |
| + if (!iter.Send(new ChildProcessMsg_GetChildProfilerData( |
| + sequence_number, current_profiling_phase))) { |
| --pending_processes; |
| + } |
| } |
| BrowserThread::PostTask( |
| @@ -100,26 +103,59 @@ void ProfilerControllerImpl::GetProfilerDataFromChildProcesses( |
| true)); |
| } |
| -void ProfilerControllerImpl::GetProfilerData(int sequence_number) { |
| +void ProfilerControllerImpl::NotifyChildProcessesOfProfilingPhaseCompletion( |
| + int profiling_phase) { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + for (BrowserChildProcessHostIterator iter; !iter.Done(); ++iter) { |
| + // In some cases, there may be no child process of the given type (for |
| + // example, the GPU process may not exist and there may instead just be a |
| + // GPU thread in the browser process). If that's the case, then the process |
| + // handle will be base::kNullProcessHandle and we shouldn't send it a |
| + // message. |
| + if (iter.GetData().handle == base::kNullProcessHandle) |
| + continue; |
| + |
| + iter.Send(new ChildProcessMsg_OnProfilingPhase(profiling_phase)); |
| + } |
| +} |
| + |
| +void ProfilerControllerImpl::GetProfilerData(int sequence_number, |
| + int current_profiling_phase) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| int pending_processes = 0; |
| for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); |
| !it.IsAtEnd(); it.Advance()) { |
| ++pending_processes; |
| - if (!it.GetCurrentValue()->Send( |
| - new ChildProcessMsg_GetChildProfilerData(sequence_number))) { |
| + if (!it.GetCurrentValue()->Send(new ChildProcessMsg_GetChildProfilerData( |
| + sequence_number, current_profiling_phase))) { |
| --pending_processes; |
| } |
| } |
| OnPendingProcesses(sequence_number, pending_processes, false); |
| BrowserThread::PostTask( |
| - BrowserThread::IO, |
| - FROM_HERE, |
| + BrowserThread::IO, FROM_HERE, |
| base::Bind(&ProfilerControllerImpl::GetProfilerDataFromChildProcesses, |
| - base::Unretained(this), |
| - sequence_number)); |
| + base::Unretained(this), sequence_number, |
| + current_profiling_phase)); |
| +} |
| + |
| +void ProfilerControllerImpl::OnProfilingPhaseCompletion(int profiling_phase) { |
|
Alexei Svitkine (slow)
2015/04/02 16:59:31
Should probably have a comment in this function ex
vadimt
2015/04/06 23:25:12
Hmm. I don't wait for any result simply because th
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| + for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); |
|
Alexei Svitkine (slow)
2015/04/02 16:59:31
Hmm, I realise you're just following the same patt
vadimt
2015/04/06 23:25:12
I checked that everything works correctly, and tha
Alexei Svitkine (slow)
2015/04/09 15:39:05
Sorry, forgot to follow-up on this earlier. When y
vadimt
2015/04/09 21:28:39
I've set a breakpoint in the renderer, and checked
|
| + !it.IsAtEnd(); it.Advance()) { |
| + it.GetCurrentValue()->Send( |
| + new ChildProcessMsg_OnProfilingPhase(profiling_phase)); |
| + } |
| + |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + base::Bind(&ProfilerControllerImpl:: |
| + NotifyChildProcessesOfProfilingPhaseCompletion, |
| + base::Unretained(this), profiling_phase)); |
| } |
| } // namespace content |