Index: content/browser/profiler_synchronizer.cc |
=================================================================== |
--- content/browser/profiler_synchronizer.cc (revision 0) |
+++ content/browser/profiler_synchronizer.cc (revision 0) |
@@ -0,0 +1,103 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/public/browser/profiler_synchronizer.h" |
+ |
+#include "base/bind.h" |
+#include "content/browser/browser_child_process_host.h" |
+#include "content/common/child_process_info.h" |
+#include "content/common/child_process_messages.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/profiler_controller.h" |
+#include "content/public/browser/render_process_host.h" |
+ |
+namespace content { |
+ |
+// static |
+void GetProfilerDataFromChildProcesses(int sequence_number) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ |
+ int pending_processes = 0; |
+ for (BrowserChildProcessHost::Iterator child_process_host; |
+ !child_process_host.Done(); ++child_process_host) { |
+ const std::string process_type = |
+ ChildProcessInfo::GetTypeNameInEnglish(child_process_host->type()); |
+ |
+ ++pending_processes; |
+ if (!child_process_host->Send(new ChildProcessMsg_GetChildProfilerData( |
+ sequence_number, process_type))) { |
+ --pending_processes; |
+ } |
+ } |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, |
+ FROM_HERE, |
+ base::Bind(&ProfilerController::OnPendingProcesses, |
jam
2011/11/28 15:17:34
nit: per other comments, all this stuff should be
ramant (doing other things)
2011/11/29 01:32:20
Done.
|
+ base::Unretained(content::ProfilerController::GetInstance()), |
+ sequence_number, |
+ pending_processes)); |
+} |
+ |
+// static |
+int GetProfilerData(int sequence_number) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind(&GetProfilerDataFromChildProcesses, sequence_number)); |
+ |
+ int pending_processes = 0; |
+ const std::string render_process_type = |
+ ChildProcessInfo::GetTypeNameInEnglish(ChildProcessInfo::RENDER_PROCESS); |
+ |
+ for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); |
+ !it.IsAtEnd(); it.Advance()) { |
+ ++pending_processes; |
+ if (!it.GetCurrentValue()->Send(new ChildProcessMsg_GetChildProfilerData( |
+ sequence_number, render_process_type))) { |
+ --pending_processes; |
+ } |
+ } |
+ |
+ content::ProfilerController::GetInstance()->OnPendingProcesses( |
+ sequence_number, pending_processes); |
+ |
+ // Returns 2 to indicate that OnPendingProcesses will be called once for |
+ // renderer processes and another for browser child processes. |
+ return 2; |
+} |
+ |
+// static |
+void SetProfilerStatusInChildProcesses(bool enable) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ |
+ for (BrowserChildProcessHost::Iterator child_process_host; |
+ !child_process_host.Done(); ++child_process_host) { |
+ child_process_host->Send(new ChildProcessMsg_SetProfilerStatus(enable)); |
+ } |
+} |
+ |
+// static |
+void SetProfilerStatus(bool enable) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ // Now tell subprocesses. Messages to ChildProcess-derived |
+ // processes must be done on the IO thread. |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, |
+ FROM_HERE, |
+ base::Bind( |
+ &SetProfilerStatusInChildProcesses, enable)); |
+ |
+ // Finally, tell the renderers which don't derive from ChildProcess. |
+ // Messages to the renderers must be done on the UI (main) thread. |
+ for (content::RenderProcessHost::iterator it( |
+ content::RenderProcessHost::AllHostsIterator()); |
+ !it.IsAtEnd(); it.Advance()) { |
+ it.GetCurrentValue()->Send(new ChildProcessMsg_SetProfilerStatus(enable)); |
+ } |
+} |
+} // content |
Property changes on: content\browser\profiler_synchronizer.cc |
___________________________________________________________________ |
Added: svn:executable |
+ * |