chromium 各線程的創建

  看了一些博客,一般介紹的線程是browser跟render線程。但是ps |grep shell 獲取進程號,top -t |grep 進程號,你會看到的,估計跟我看到的差不多,就是這樣的嘩啦啦的一大片或者還更多。看到這麼多線程,總會先想想在什麼時候創建的,創建出來是做什麼用的。

我在platform_thread_android.c文件中SetName添加了打印,打印出線程名跟線程號,還順便打印了堆棧,看看線程是在什麼時候創建的。SetName部分代碼實現如下,設置線程名稱,也有線程號。

void PlatformThread::SetName(const std::string& name) {
  ThreadIdNameManager::GetInstance()->SetName(CurrentId(), name);
  tracked_objects::ThreadData::InitializeThreadContext(name);
  
  base::debug::StackTrace().Print();
  DLOG(ERROR) <<__FUNCTION__<< " CurrentId="<<CurrentId()<<" name="<<name;
......
}

如下是我打印的輸出的結果,可以看到創建了57個線程,線程的名稱也都有,這樣後續添加日誌的過程通過logcat -v threadtime

就可以打印出帶線程號的日誌,是哪個線程的操作。logcat始終是個比較笨的方法,後續有新方法了再進行更新。

爲了確認各線程是如何創建的,我在thread.cc的構造函數中添加了堆棧打印,打印出各線程創建的堆棧,也可以在platform_thread_android.cc的SetName打印出線程名跟線程號,便於後續debug追蹤。如下是我根據堆棧獲取的各線程的創建流程:

 

Chrome_UIThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:154 (discriminator 3)													 : Thread(GetThreadName(identifier)), identifier_(identifier) {	
./content/browser/browser_main_loop.cc:1204 (discriminator 2)													 new BrowserThreadImpl(BrowserThread::UI, base::MessageLoop::current()));
./content/browser/browser_main_loop.cc:575																		 InitializeMainThread();
./content/browser/browser_main_runner.cc:129 (discriminator 1)													 main_loop_->MainMessageLoopStart();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params);
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

Chrome_DBThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3)													 : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24																 : BrowserThreadImpl(identifier) {	
./content/browser/browser_main_loop.cc:948 (discriminator 1)													 (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

Chrome_FileThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3)													 : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24																 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1)													 (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();	
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

Chrome_FileUserBlockingThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3)													 : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24																 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1)													 (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();	
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

Chrome_ProcessLauncherThread
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3)													 : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24																 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1)													 (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();	
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

Chrome_CacheThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3)													 : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24																 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1)													 (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();	
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

Chrome_IOThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3)													 : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24																 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1)													 (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();	
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

IndexedDB:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_main_loop.cc:1222 (discriminator 2)													indexed_db_thread_.reset(new base::Thread("IndexedDB"));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();	
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

AudioThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/browser_main_loop.cc:1559 (discriminator 2													 audio_thread_.reset(new base::Thread("AudioThread"));
./content/browser/browser_main_loop.cc:1288																		 CreateAudioManager();
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1)													 startup_task_runner_->RunAllTasksNow();	
./content/browser/browser_main_runner.cc:141 (discriminator 1)													 main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1)											 int exit_code = browser_runner_->Initialize(main_function_params); 
./content/app/content_main_runner.cc:403																		 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786																		 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2)														 return g_content_runner.Get()->Run();

Chrome_DevToolsHandlerThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/browser/devtools/devtools_http_handler.cc:239 (discriminator 2)										  new base::Thread(kDevToolsHandlerThreadName));
./base/bind_internal.h:164 (discriminator 6)
./base/callback.h:64 (discriminator 1)
./base/message_loop/message_loop.cc:405																			  task_annotator_.RunTask("MessageLoop::PostTask", pending_task);
./base/message_loop/message_loop.cc:414																			  RunTask(pending_task);
./base/message_loop/message_loop.cc:513 (discriminator 2)														  if (DeferOrRunPendingTask(std::move(pending_task)))
./base/message_loop/message_pump_libevent.cc:217																  bool did_work = delegate->DoWork();
./base/message_loop/message_loop.cc:370 (discriminator 1)														  pump_->Run(this);
./base/run_loop.cc:35																							  loop_->RunHandler();		
./base/threading/thread.cc:249																					  run_loop->Run();	
./content/browser/browser_thread_impl.cc:217
./content/browser/browser_thread_impl.cc:270
./base/threading/thread.cc:337                                                                                    Run(run_loop_);
./base/threading/platform_thread_posix.cc:72																	  delegate->ThreadMain();

Chrome_InProcRendererThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/renderer/in_process_renderer_thread.cc:24 (discriminator 1)											 : Thread("Chrome_InProcRendererThread"), params_(params) {
./content/renderer/in_process_renderer_thread.cc:77 (discriminator 1)											 return new InProcessRendererThread(params);
./content/browser/renderer_host/render_process_host_impl.cc:934 (discriminator 5)								 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
./content/browser/frame_host/render_frame_host_manager.cc:1887 (discriminator 1)								 if (!render_view_host->GetProcess()->Init())	
./content/browser/frame_host/render_frame_host_manager.cc:2064 (discriminator 1)								 if (!InitRenderView(render_frame_host->render_view_host(), nullptr))
./content/browser/frame_host/render_frame_host_manager.cc:241													 if (!ReinitializeRenderFrame(dest_render_frame_host))
./content/browser/frame_host/navigator_impl.cc:370 (discriminator 1)											 frame_tree_node->render_manager()->Navigate(
./content/browser/frame_host/navigator_impl.cc:460 (discriminator 1)											 return NavigateToEntry(frame_tree_node, frame_entry,
./content/browser/frame_host/navigation_controller_impl.cc:1929													 success |= frame->navigator()->NavigateToPendingEntry(frame, *item.second,
./content/browser/frame_host/navigation_controller_impl.cc:1867													 bool success = NavigateToPendingEntryInternal(reload_type);
./content/browser/frame_host/navigation_controller_impl.cc:457													 NavigateToPendingEntry(ReloadType::NONE);
./content/browser/frame_host/navigation_controller_impl.cc:790 (discriminator 2)								 LoadEntry(std::move(entry));
./content/browser/frame_host/navigation_controller_android.cc:258												 navigation_controller_->LoadURLWithParams(params);

Chrome_ChildIOThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/child/child_process.cc:44 (discriminator 2)															 io_thread_("Chrome_ChildIOThread") {
./content/child/child_process.cc:38																				 ChildProcess::ChildProcess() : ChildProcess(base::ThreadPriority::NORMAL) {}
./content/renderer/render_process.h:22																			 RenderProcess
./content/renderer/in_process_renderer_thread.cc:49 (discriminator 1)											 render_process_.reset(new RenderProcessImpl());
./base/threading/thread.cc:326																					 Init();
./base/threading/platform_thread_posix.cc:72																	 delegate->ThreadMain();

Compositor:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./third_party/WebKit/Source/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc:30 (discriminator 9) : thread_(new base::Thread(name ? name : std::string())) {
./content/renderer/render_thread_impl.cc:288 (discriminator 1)													 : WebThreadImplForWorkerScheduler("Compositor", options) {
./content/renderer/render_thread_impl.cc:1258																	 InitializeCompositorThread();
./content/renderer/render_thread_impl.cc:659																	 InitializeWebKit(resource_task_queue);
./content/renderer/render_thread_impl.cc:610																	 Init(resource_task_queue);
./content/renderer/render_thread_impl.cc:611																	 RenderThreadImpl::RenderThreadImpl(
./content/renderer/render_thread_impl.cc:567 (discriminator 3)													 return new RenderThreadImpl(
./content/renderer/in_process_renderer_thread.cc:50																 RenderThreadImpl::Create(params_);
./base/threading/thread.cc:326																					 Init();
./base/threading/platform_thread_posix.cc:72																	  delegate->ThreadMain();

Renderer::FILE:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/renderer/render_thread_impl.cc:2156 (discriminator 2)													 file_thread_.reset(new base::Thread("Renderer::FILE"));
./content/renderer/render_thread_impl.cc:687																	 blob_message_filter_ = new BlobMessageFilter(GetFileThreadTaskRunner());
./content/renderer/render_thread_impl.cc:610																	 Init(resource_task_queue);
./content/renderer/render_thread_impl.cc:611																	 RenderThreadImpl::RenderThreadImpl(
./content/renderer/render_thread_impl.cc:567 (discriminator 3)													 return new RenderThreadImpl(
./content/renderer/in_process_renderer_thread.cc:50																 RenderThreadImpl::Create(params_);
./base/threading/thread.cc:326																					 Init();
./base/threading/platform_thread_posix.cc:72																	  delegate->ThreadMain();

Chrome_libJingle_Signaling
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/renderer/media/webrtc/peer_connection_dependency_factory.cc:109 (discriminator 8)	  					 chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
./content/renderer/render_thread_impl.cc:706 (discriminator 2)													 new PeerConnectionDependencyFactory(p2p_socket_dispatcher_.get()));
./content/renderer/render_thread_impl.cc:610																	 Init(resource_task_queue);
./content/renderer/render_thread_impl.cc:611																	 RenderThreadImpl::RenderThreadImpl(
./content/renderer/render_thread_impl.cc:567 (discriminator 3)													 return new RenderThreadImpl(
./content/renderer/in_process_renderer_thread.cc:50																 RenderThreadImpl::Create(params_);
./base/threading/thread.cc:326																					 Init();
./base/threading/platform_thread_posix.cc:72																	  delegate->ThreadMain();

Chrome_libJingle_WorkerThread
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/renderer/media/webrtc/peer_connection_dependency_factory.cc:109 (discriminator 11)					 chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
./content/renderer/render_thread_impl.cc:706 (discriminator 2)													 new PeerConnectionDependencyFactory(p2p_socket_dispatcher_.get()));
./content/renderer/render_thread_impl.cc:610																	 Init(resource_task_queue);
./content/renderer/render_thread_impl.cc:611																	 RenderThreadImpl::RenderThreadImpl(
./content/renderer/render_thread_impl.cc:567 (discriminator 3)													 return new RenderThreadImpl(
./content/renderer/in_process_renderer_thread.cc:50																 RenderThreadImpl::Create(params_);
./base/threading/thread.cc:326																					 Init();
./base/threading/platform_thread_posix.cc:72																	  delegate->ThreadMain();

Chrome_InProcGpuThread
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/gpu/in_process_gpu_thread.cc:33 (discriminator 1)														 InProcessGpuThread::InProcessGpuThread(
./content/gpu/in_process_gpu_thread.cc:81 (discriminator 1)														 return new InProcessGpuThread(params, gpu_preferences);
./content/browser/gpu/gpu_process_host.cc:591 (discriminator 6)													 in_process_gpu_thread_.reset(g_gpu_main_thread_factory(
./content/browser/gpu/gpu_process_host.cc:371																	 if (host->Init())
./content/browser/renderer_host/render_message_filter.cc:632													 host = GpuProcessHost::Get(GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED);
./base/tuple.h:184 (discriminator 4)
./content/browser/renderer_host/render_message_filter.cc:198 (discriminator 3)									 IPC_MESSAGE_HANDLER_DELAY_REPLY(ChildProcessHostMsg_EstablishGpuChannel,
./content/public/browser/browser_message_filter.cc:90 (discriminator 1)											 bool rv = filter_->OnMessageReceived(message);
./content/public/browser/browser_message_filter.cc:70															 return DispatchMessage(message);
./ipc/message_filter_router.cc:22 (discriminator 1)																 if (filters[i]->OnMessageReceived(message)) {
./ipc/message_filter_router.cc:87																				 return TryFiltersImpl(message_class_filters_[message_class], message);
./ipc/ipc_channel_proxy.cc:101 (discriminator 1)													             if (message_filter_router_->TryFilters(message)) {
./ipc/ipc_sync_channel.cc:428																					 if (TryFilters(msg))
./ipc/ipc_channel_mojo.cc:406																					 listener_->OnMessageReceived(message);		
./ipc/ipc_message_pipe_reader.cc:113																			 delegate_->OnMessageReceived(message);	
./mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:339													 return incoming_receiver_->Accept(message);
./mojo/public/cpp/bindings/lib/filter_chain.cc:40																 return sink_->Accept(message);
./mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:273													 return filters_.Accept(message);
./ipc/ipc_mojo_bootstrap.cc:644																					 return client->HandleIncomingMessage(message);
./mojo/public/cpp/bindings/lib/filter_chain.cc:40																  return sink_->Accept(message);
./mojo/public/cpp/bindings/lib/connector.cc:247 (discriminator 2)												 incoming_receiver_ && incoming_receiver_->Accept(&message);	
./mojo/public/cpp/bindings/lib/connector.cc:272																	 if (!ReadSingleMessage(&rv)) {
./mojo/public/cpp/bindings/lib/connector.cc:205																	 ReadAllAvailableMessages();
./base/callback.h:64 (discriminator 2)
./base/bind_internal.h:214 (discriminator 5)
./base/callback.h:64 (discriminator 1)
./base/message_loop/message_loop.cc:405																			  task_annotator_.RunTask("MessageLoop::PostTask", pending_task);
./base/message_loop/message_loop.cc:414																			  RunTask(pending_task);
./base/message_loop/message_loop.cc:513 (discriminator 2)														  if (DeferOrRunPendingTask(std::move(pending_task)))
./base/message_loop/message_pump_libevent.cc:217																  bool did_work = delegate->DoWork();
./base/message_loop/message_loop.cc:370 (discriminator 1)														  pump_->Run(this);
./base/run_loop.cc:35																							  loop_->RunHandler();		
./base/threading/thread.cc:249																					  run_loop->Run();	

Chrome_ChildIOThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./content/child/child_process.cc:44 (discriminator 2)															 io_thread_("Chrome_ChildIOThread") {
./content/gpu/gpu_process.cc:10																					 ChildProcess(io_thread_priority) {}		
./content/gpu/in_process_gpu_thread.cc:52 (discriminator 1)														 gpu_process_ = new GpuProcess(io_thread_priority);
./base/threading/thread.cc:326																					 Init();
./base/threading/platform_thread_posix.cc:72																	 delegate->ThreadMain();

Unknown:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./gpu/command_buffer/service/gpu_tracer.cc:59 (discriminator 3)													 TraceOutputter::TraceOutputter(const std::string& name)
./gpu/command_buffer/service/gpu_tracer.cc:53 (discriminator 1)													 g_outputter_thread = new TraceOutputter(name);			
./gpu/command_buffer/service/gpu_tracer.cc:384																	 return TraceOutputter::Create(name);
./gpu/command_buffer/service/gpu_tracer.cc:275 (discriminator 3)												 outputter_ = CreateOutputter(gpu_timing_client_->GetTimerTypeName());
./gpu/command_buffer/service/gles2_cmd_decoder.cc:16520 (discriminator 1)										 if (!gpu_tracer_->Begin(category_name, trace_name, kTraceCHROMIUM)) {
./gpu/command_buffer/service/gles2_cmd_decoder.cc:5099 (discriminator 4)										 result = (this->*info.cmd_handler)(immediate_data_size, cmd_data);	
./gpu/command_buffer/service/cmd_parser.cc:54																	 error::Error result = handler_->DoCommands(
./gpu/command_buffer/service/command_executor.cc:61 (discriminator 1)											 error = parser_->ProcessCommands(CommandParser::kParseCommandsSlice);
./gpu/ipc/service/gpu_command_buffer_stub.cc:784 (discriminator 1)												 command_buffer_->Flush(put_offset);				
./base/tuple.h:144 (discriminator 10)
./gpu/ipc/service/gpu_command_buffer_stub.cc:243 (discriminator 3)												 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_AsyncFlush, OnAsyncFlush);
./gpu/ipc/service/gpu_channel.cc:807																			 handled = router_.RouteMessage(msg);
./gpu/ipc/service/gpu_channel.cc:787																			 HandleMessageHelper(msg);
./base/callback.h:64 (discriminator 1)
./base/message_loop/message_loop.cc:405																			 task_annotator_.RunTask("MessageLoop::PostTask", pending_task);
./base/message_loop/message_loop.cc:414																			 RunTask(pending_task);
./base/message_loop/message_loop.cc:513 (discriminator 2)														 if (DeferOrRunPendingTask(std::move(pending_task)))
./base/message_loop/message_pump_default.cc:35																     bool did_work = delegate->DoWork();
./base/message_loop/message_loop.cc:370 (discriminator 1)														 pump_->Run(this);
./base/run_loop.cc:35																							 loop_->RunHandler();		
./base/threading/thread.cc:249																					 run_loop->Run();	
./base/threading/thread.cc:337                                                                                   Run(run_loop_);
./base/threading/platform_thread_posix.cc:72																	 delegate->ThreadMain();

CookieMonsterClient:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./android_webview/native/cookie_manager.cc:248 (discriminator 2)												 cookie_store_backend_thread_("CookieMonsterBackend") {
./android_webview/native/cookie_manager.cc:617																	 cookie_store_backend_thread_("CookieMonsterBackend") {
./android_webview/browser/net/aw_cookie_store_wrapper.cc:20														 GetCookieStoreTaskRunner()->PostTask(FROM_HERE, task);
./android_webview/browser/net/aw_cookie_store_wrapper.cc:253 (discriminator 3)									 base::Bind(&GetCookieListWithOptionsAsyncOnCookieThread, url, options,
./net/url_request/url_request_http_job.cc:798 (discriminator 2)													 base::Bind(&URLRequestHttpJob::SetCookieHeaderAndStart,
./net/url_request/url_request_http_job.cc:400																	 AddCookieHeaderAndStart();
./net/url_request/url_request.cc:682 (discriminator 1)													         job_->Start();
./net/url_request/url_request.cc:695																		     StartJob(job);
./net/url_request/url_request.cc:689 (discriminator 2)															 URLRequestJobManager::GetInstance()->CreateJob
./net/url_request/url_request_job.cc:665																		 request_->Restart();
./android_webview/browser/net/android_stream_reader_url_request_job.cc:282										 NotifyRestartRequired();
./base/bind_internal.h:214 (discriminator 6)
./base/callback.h:64 (discriminator 2)
./base/bind_internal.h:214 (discriminator 6)
./base/callback.h:64 (discriminator 2)
./base/callback.h:64 (discriminator 1)
./base/callback.h:64 (discriminator 1)
./base/message_loop/message_loop.cc:405																			 task_annotator_.RunTask("MessageLoop::PostTask", pending_task);
./base/message_loop/message_loop.cc:414																			 RunTask(pending_task);
./base/message_loop/message_loop.cc:513 (discriminator 2)														 if (DeferOrRunPendingTask(std::move(pending_task)))
./base/message_loop/message_pump_libevent.cc:217																 bool did_work = delegate->DoWork();
./base/message_loop/message_loop.cc:370 (discriminator 1)														 pump_->Run(this);
./base/run_loop.cc:35																							 loop_->RunHandler();		
./base/threading/thread.cc:249																					 run_loop->Run();	
./content/browser/browser_thread_impl.cc:243																	 Thread::Run(run_loop);
./content/browser/browser_thread_impl.cc:278																	 return IOThreadRun(run_loop);
./base/threading/thread.cc:337                                                                                   Run(run_loop_);
./base/threading/platform_thread_posix.cc:72																	 delegate->ThreadMain();

CookieMonsterBackend:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./android_webview/native/cookie_manager.cc:248 (discriminator 5)												 cookie_store_backend_thread_("CookieMonsterBackend") {
./android_webview/native/cookie_manager.cc:617																	 return CookieManager::GetInstance()->GetCookieStoreTaskRunner();
./android_webview/browser/net/aw_cookie_store_wrapper.cc:20														 GetCookieStoreTaskRunner()->PostTask(FROM_HERE, task);
./android_webview/browser/net/aw_cookie_store_wrapper.cc:253 (discriminator 3)									 base::Bind(&GetCookieListWithOptionsAsyncOnCookieThread, url, options,
./net/url_request/url_request_http_job.cc:798 (discriminator 2)													 base::Bind(&URLRequestHttpJob::SetCookieHeaderAndStart,
./net/url_request/url_request_http_job.cc:400																	 AddCookieHeaderAndStart();
./net/url_request/url_request.cc:682 (discriminator 1)													         job_->Start();
./net/url_request/url_request.cc:695																			 StartJob(job);
./net/url_request/url_request.cc:689 (discriminator 2)					 										 URLRequestJobManager::GetInstance()->CreateJob
./net/url_request/url_request_job.cc:665																		 request_->Restart();
./android_webview/browser/net/android_stream_reader_url_request_job.cc:282										 NotifyRestartRequired();
./base/bind_internal.h:214 (discriminator 6)
./base/callback.h:64 (discriminator 2)
./base/bind_internal.h:214 (discriminator 6)
./base/callback.h:64 (discriminator 2)
./base/callback.h:64 (discriminator 1)
./base/callback.h:64 (discriminator 1)
./base/message_loop/message_loop.cc:405																			 task_annotator_.RunTask("MessageLoop::PostTask", pending_task);
./base/message_loop/message_loop.cc:414																			 RunTask(pending_task);
./base/message_loop/message_loop.cc:513 (discriminator 2)														 if (DeferOrRunPendingTask(std::move(pending_task)))
./base/message_loop/message_pump_libevent.cc:217																 bool did_work = delegate->DoWork();
./base/message_loop/message_loop.cc:370 (discriminator 1)														 pump_->Run(this);
./base/run_loop.cc:35																							 loop_->RunHandler();		
./base/threading/thread.cc:249																					 run_loop->Run();	
./content/browser/browser_thread_impl.cc:243																	 Thread::Run(run_loop);
./content/browser/browser_thread_impl.cc:278																	 return IOThreadRun(run_loop);
./base/threading/thread.cc:337                                                                                   Run(run_loop_);
./base/threading/platform_thread_posix.cc:72																	 delegate->ThreadMain();	 

HTMLParserThread:
./base/threading/thread.cc:61																					 Thread::Thread(const std::string& name)
./third_party/WebKit/Source/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc:30 (discriminator 9) thread_(new base::Thread(name ? name : std::string())) {
./third_party/WebKit/Source/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc:25 (discriminator 1)  WebThreadImplForWorkerScheduler(name, base::Thread::Options()) {}
./content/child/blink_platform_impl.cc:452 (discriminator 1)													  new WebThreadImplForWorkerScheduler(name));	
./third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp:40 (discriminator 1)								  m_owningThread = wrapUnique(Platform::current()->createThread(name));
./third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp:18 (discriminator 1)                               return wrapUnique(new WebThreadSupportingGC(name, nullptr, threadHeapMode));
./third_party/WebKit/Source/core/html/parser/HTMLParserThread.cpp:86											  m_thread = WebThreadSupportingGC::create("HTMLParserThread",
./third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp:1284 (discriminator 2)						  HTMLParserThread::shared()->postTask(
./third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp:1143										  startBackgroundParser();
./third_party/WebKit/Source/core/loader/DocumentWriter.cpp:94 (discriminator 1)									  m_parser->appendBytes(bytes, length);
./third_party/WebKit/Source/core/loader/DocumentLoader.cpp:529 (discriminator 1)								  m_writer->addData(bytes, length);	
./third_party/WebKit/Source/core/loader/DocumentLoader.cpp:617													  commitData(data, length);
./third_party/WebKit/Source/core/loader/DocumentLoader.cpp:593													  processData(data, length);
./third_party/WebKit/Source/core/fetch/RawResource.cpp:132														  c->dataReceived(this, data, length)
./third_party/WebKit/Source/core/fetch/ResourceLoader.cpp:257 (discriminator 1)									  m_resource->appendData(data, length);
./content/child/web_url_loader_impl.cc:795 (discriminator 2)													  client_->didReceiveData(loader_, payload,	
./content/child/web_url_loader_impl.cc:973 (discriminator 3)													  context_->OnReceivedData(std::move(data))
./content/child/resource_dispatcher.cc:349 (discriminator 3)													  request_info->peer->OnReceivedData(std::move(data));
./base/tuple.h:144 (discriminator 14)
./content/child/resource_dispatcher.cc:573 (discriminator 3)													  IPC_MESSAGE_HANDLER(ResourceMsg_DataReceived, OnReceivedData)
./content/child/resource_dispatcher.cc:188																		  DispatchMessage(message);
./base/bind_internal.h:214 (discriminator 5)
./base/callback.h:64 (discriminator 1)
./third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:344									  task_annotator_.RunTask("TaskQueueManager::PostTask", pending_task);
./third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc:240									  switch (ProcessTaskFromWorkQueue(work_queue)) {
./base/bind_internal.h:214 (discriminator 6)
./base/callback.h:64 (discriminator 1)
./base/message_loop/message_loop.cc:405																			  task_annotator_.RunTask("MessageLoop::PostTask", pending_task);
./base/message_loop/message_loop.cc:414																			  RunTask(pending_task);
./base/message_loop/message_loop.cc:513 (discriminator 2)														  if (DeferOrRunPendingTask(std::move(pending_task)))
./base/message_loop/message_pump_default.cc:35																      bool did_work = delegate->DoWork();
./base/message_loop/message_loop.cc:370 (discriminator 1)														  pump_->Run(this);	
./base/run_loop.cc:35																							  loop_->RunHandler();
./base/threading/thread.cc:249																					  run_loop->Run();	
./base/threading/thread.cc:337                                                                                    Run(run_loop_); 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章