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

Side by Side Diff: content/child/child_thread_impl.cc

Issue 1142063003: content/child: Remove use of MessageLoopProxy and deprecated MessageLoop APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup. Created 5 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/child_thread_impl.h" 5 #include "content/child/child_thread_impl.h"
6 6
7 #include <signal.h> 7 #include <signal.h>
8 8
9 #include <string> 9 #include <string>
10 10
11 #include "base/allocator/allocator_extension.h" 11 #include "base/allocator/allocator_extension.h"
12 #include "base/base_switches.h" 12 #include "base/base_switches.h"
13 #include "base/basictypes.h" 13 #include "base/basictypes.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/debug/leak_annotations.h" 15 #include "base/debug/leak_annotations.h"
16 #include "base/debug/profiler.h" 16 #include "base/debug/profiler.h"
17 #include "base/lazy_instance.h" 17 #include "base/lazy_instance.h"
18 #include "base/location.h"
18 #include "base/logging.h" 19 #include "base/logging.h"
19 #include "base/message_loop/message_loop.h"
20 #include "base/message_loop/timer_slack.h" 20 #include "base/message_loop/timer_slack.h"
21 #include "base/metrics/field_trial.h" 21 #include "base/metrics/field_trial.h"
22 #include "base/process/process.h" 22 #include "base/process/process.h"
23 #include "base/process/process_handle.h" 23 #include "base/process/process_handle.h"
24 #include "base/single_thread_task_runner.h"
24 #include "base/strings/string_number_conversions.h" 25 #include "base/strings/string_number_conversions.h"
25 #include "base/strings/string_util.h" 26 #include "base/strings/string_util.h"
26 #include "base/synchronization/condition_variable.h" 27 #include "base/synchronization/condition_variable.h"
27 #include "base/synchronization/lock.h" 28 #include "base/synchronization/lock.h"
29 #include "base/thread_task_runner_handle.h"
28 #include "base/threading/thread_local.h" 30 #include "base/threading/thread_local.h"
29 #include "base/trace_event/memory_dump_manager.h" 31 #include "base/trace_event/memory_dump_manager.h"
30 #include "base/tracked_objects.h" 32 #include "base/tracked_objects.h"
31 #include "components/tracing/child_trace_message_filter.h" 33 #include "components/tracing/child_trace_message_filter.h"
32 #include "content/child/bluetooth/bluetooth_message_filter.h" 34 #include "content/child/bluetooth/bluetooth_message_filter.h"
33 #include "content/child/child_discardable_shared_memory_manager.h" 35 #include "content/child/child_discardable_shared_memory_manager.h"
34 #include "content/child/child_gpu_memory_buffer_manager.h" 36 #include "content/child/child_gpu_memory_buffer_manager.h"
35 #include "content/child/child_histogram_message_filter.h" 37 #include "content/child/child_histogram_message_filter.h"
36 #include "content/child/child_process.h" 38 #include "content/child/child_process.h"
37 #include "content/child/child_resource_message_filter.h" 39 #include "content/child/child_resource_message_filter.h"
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 ChildThreadImpl::ChildThreadImpl(const Options& options) 266 ChildThreadImpl::ChildThreadImpl(const Options& options)
265 : router_(this), 267 : router_(this),
266 browser_process_io_runner_(options.browser_process_io_runner), 268 browser_process_io_runner_(options.browser_process_io_runner),
267 channel_connected_factory_(this) { 269 channel_connected_factory_(this) {
268 Init(options); 270 Init(options);
269 } 271 }
270 272
271 scoped_refptr<base::SequencedTaskRunner> ChildThreadImpl::GetIOTaskRunner() { 273 scoped_refptr<base::SequencedTaskRunner> ChildThreadImpl::GetIOTaskRunner() {
272 if (IsInBrowserProcess()) 274 if (IsInBrowserProcess())
273 return browser_process_io_runner_; 275 return browser_process_io_runner_;
274 return ChildProcess::current()->io_message_loop_proxy(); 276 return ChildProcess::current()->io_task_runner();
275 } 277 }
276 278
277 void ChildThreadImpl::ConnectChannel(bool use_mojo_channel) { 279 void ChildThreadImpl::ConnectChannel(bool use_mojo_channel) {
278 bool create_pipe_now = true; 280 bool create_pipe_now = true;
279 if (use_mojo_channel) { 281 if (use_mojo_channel) {
280 VLOG(1) << "Mojo is enabled on child"; 282 VLOG(1) << "Mojo is enabled on child";
281 scoped_refptr<base::SequencedTaskRunner> io_task_runner = GetIOTaskRunner(); 283 scoped_refptr<base::SequencedTaskRunner> io_task_runner = GetIOTaskRunner();
282 DCHECK(io_task_runner); 284 DCHECK(io_task_runner);
283 channel_->Init(IPC::ChannelMojo::CreateClientFactory( 285 channel_->Init(IPC::ChannelMojo::CreateClientFactory(
284 nullptr, io_task_runner, channel_name_), 286 nullptr, io_task_runner, channel_name_),
(...skipping 10 matching lines...) Expand all
295 297
296 g_lazy_tls.Pointer()->Set(this); 298 g_lazy_tls.Pointer()->Set(this);
297 on_channel_error_called_ = false; 299 on_channel_error_called_ = false;
298 message_loop_ = base::MessageLoop::current(); 300 message_loop_ = base::MessageLoop::current();
299 #ifdef IPC_MESSAGE_LOG_ENABLED 301 #ifdef IPC_MESSAGE_LOG_ENABLED
300 // We must make sure to instantiate the IPC Logger *before* we create the 302 // We must make sure to instantiate the IPC Logger *before* we create the
301 // channel, otherwise we can get a callback on the IO thread which creates 303 // channel, otherwise we can get a callback on the IO thread which creates
302 // the logger, and the logger does not like being created on the IO thread. 304 // the logger, and the logger does not like being created on the IO thread.
303 IPC::Logging::GetInstance(); 305 IPC::Logging::GetInstance();
304 #endif 306 #endif
305 channel_ = IPC::SyncChannel::Create( 307 channel_ =
306 this, ChildProcess::current()->io_message_loop_proxy(), 308 IPC::SyncChannel::Create(this, ChildProcess::current()->io_task_runner(),
307 ChildProcess::current()->GetShutDownEvent()); 309 ChildProcess::current()->GetShutDownEvent());
308 #ifdef IPC_MESSAGE_LOG_ENABLED 310 #ifdef IPC_MESSAGE_LOG_ENABLED
309 if (!IsInBrowserProcess()) 311 if (!IsInBrowserProcess())
310 IPC::Logging::GetInstance()->SetIPCSender(this); 312 IPC::Logging::GetInstance()->SetIPCSender(this);
311 #endif 313 #endif
312 314
313 mojo_application_.reset(new MojoApplication(GetIOTaskRunner())); 315 mojo_application_.reset(new MojoApplication(GetIOTaskRunner()));
314 316
315 sync_message_filter_ = 317 sync_message_filter_ =
316 new IPC::SyncMessageFilter(ChildProcess::current()->GetShutDownEvent()); 318 new IPC::SyncMessageFilter(ChildProcess::current()->GetShutDownEvent());
317 thread_safe_sender_ = new ThreadSafeSender( 319 thread_safe_sender_ = new ThreadSafeSender(
318 base::MessageLoopProxy::current().get(), sync_message_filter_.get()); 320 base::ThreadTaskRunnerHandle::Get().get(), sync_message_filter_.get());
no sievers 2015/05/20 23:02:38 You can actually use message_loop_.task_runner() w
Sami 2015/05/21 11:39:48 Thanks for the tip, done.
319 321
320 resource_dispatcher_.reset(new ResourceDispatcher( 322 resource_dispatcher_.reset(new ResourceDispatcher(
321 this, message_loop()->task_runner())); 323 this, message_loop()->task_runner()));
322 websocket_dispatcher_.reset(new WebSocketDispatcher); 324 websocket_dispatcher_.reset(new WebSocketDispatcher);
323 file_system_dispatcher_.reset(new FileSystemDispatcher()); 325 file_system_dispatcher_.reset(new FileSystemDispatcher());
324 326
325 histogram_message_filter_ = new ChildHistogramMessageFilter(); 327 histogram_message_filter_ = new ChildHistogramMessageFilter();
326 resource_message_filter_ = 328 resource_message_filter_ =
327 new ChildResourceMessageFilter(resource_dispatcher()); 329 new ChildResourceMessageFilter(resource_dispatcher());
328 330
(...skipping 22 matching lines...) Expand all
351 channel_->AddFilter(push_dispatcher_->GetFilter()); 353 channel_->AddFilter(push_dispatcher_->GetFilter());
352 channel_->AddFilter(service_worker_message_filter_->GetFilter()); 354 channel_->AddFilter(service_worker_message_filter_->GetFilter());
353 channel_->AddFilter(geofencing_message_filter_->GetFilter()); 355 channel_->AddFilter(geofencing_message_filter_->GetFilter());
354 channel_->AddFilter(bluetooth_message_filter_->GetFilter()); 356 channel_->AddFilter(bluetooth_message_filter_->GetFilter());
355 channel_->AddFilter(navigator_connect_dispatcher_->GetFilter()); 357 channel_->AddFilter(navigator_connect_dispatcher_->GetFilter());
356 358
357 if (!IsInBrowserProcess()) { 359 if (!IsInBrowserProcess()) {
358 // In single process mode, browser-side tracing will cover the whole 360 // In single process mode, browser-side tracing will cover the whole
359 // process including renderers. 361 // process including renderers.
360 channel_->AddFilter(new tracing::ChildTraceMessageFilter( 362 channel_->AddFilter(new tracing::ChildTraceMessageFilter(
361 ChildProcess::current()->io_message_loop_proxy())); 363 ChildProcess::current()->io_task_runner()));
362 } 364 }
363 365
364 // In single process mode we may already have a power monitor 366 // In single process mode we may already have a power monitor
365 if (!base::PowerMonitor::Get()) { 367 if (!base::PowerMonitor::Get()) {
366 scoped_ptr<PowerMonitorBroadcastSource> power_monitor_source( 368 scoped_ptr<PowerMonitorBroadcastSource> power_monitor_source(
367 new PowerMonitorBroadcastSource()); 369 new PowerMonitorBroadcastSource());
368 channel_->AddFilter(power_monitor_source->GetMessageFilter()); 370 channel_->AddFilter(power_monitor_source->GetMessageFilter());
369 371
370 power_monitor_.reset(new base::PowerMonitor( 372 power_monitor_.reset(new base::PowerMonitor(
371 power_monitor_source.Pass())); 373 power_monitor_source.Pass()));
(...skipping 16 matching lines...) Expand all
388 int connection_timeout = kConnectionTimeoutS; 390 int connection_timeout = kConnectionTimeoutS;
389 std::string connection_override = 391 std::string connection_override =
390 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 392 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
391 switches::kIPCConnectionTimeout); 393 switches::kIPCConnectionTimeout);
392 if (!connection_override.empty()) { 394 if (!connection_override.empty()) {
393 int temp; 395 int temp;
394 if (base::StringToInt(connection_override, &temp)) 396 if (base::StringToInt(connection_override, &temp))
395 connection_timeout = temp; 397 connection_timeout = temp;
396 } 398 }
397 399
398 base::MessageLoop::current()->PostDelayedTask( 400 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
no sievers 2015/05/20 23:02:38 nit: Maybe just do message_loop_->task_runner() he
Sami 2015/05/21 11:39:48 Done.
399 FROM_HERE, 401 FROM_HERE, base::Bind(&ChildThreadImpl::EnsureConnected,
400 base::Bind(&ChildThreadImpl::EnsureConnected, 402 channel_connected_factory_.GetWeakPtr()),
401 channel_connected_factory_.GetWeakPtr()),
402 base::TimeDelta::FromSeconds(connection_timeout)); 403 base::TimeDelta::FromSeconds(connection_timeout));
403 404
404 #if defined(OS_ANDROID) 405 #if defined(OS_ANDROID)
405 { 406 {
406 base::AutoLock lock(g_lazy_child_thread_lock.Get()); 407 base::AutoLock lock(g_lazy_child_thread_lock.Get());
407 g_child_thread = this; 408 g_child_thread = this;
408 g_child_thread_initialized = true; 409 g_child_thread_initialized = true;
409 } 410 }
410 // Signalling without locking is fine here because only 411 // Signalling without locking is fine here because only
411 // one thread can wait on the condition variable. 412 // one thread can wait on the condition variable.
412 g_lazy_child_thread_cv.Get().Signal(); 413 g_lazy_child_thread_cv.Get().Signal();
413 #endif 414 #endif
414 415
415 #if defined(TCMALLOC_TRACE_MEMORY_SUPPORTED) 416 #if defined(TCMALLOC_TRACE_MEMORY_SUPPORTED)
416 trace_memory_controller_.reset(new base::trace_event::TraceMemoryController( 417 trace_memory_controller_.reset(new base::trace_event::TraceMemoryController(
417 message_loop_->message_loop_proxy(), ::HeapProfilerWithPseudoStackStart, 418 message_loop_->task_runner(), ::HeapProfilerWithPseudoStackStart,
418 ::HeapProfilerStop, ::GetHeapProfile)); 419 ::HeapProfilerStop, ::GetHeapProfile));
419 #endif 420 #endif
420 421
421 base::trace_event::MemoryDumpManager::GetInstance()->Initialize(); 422 base::trace_event::MemoryDumpManager::GetInstance()->Initialize();
422 423
423 shared_bitmap_manager_.reset( 424 shared_bitmap_manager_.reset(
424 new ChildSharedBitmapManager(thread_safe_sender())); 425 new ChildSharedBitmapManager(thread_safe_sender()));
425 426
426 gpu_memory_buffer_manager_.reset( 427 gpu_memory_buffer_manager_.reset(
427 new ChildGpuMemoryBufferManager(thread_safe_sender())); 428 new ChildGpuMemoryBufferManager(thread_safe_sender()));
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 680
680 void ChildThreadImpl::OnProcessBackgrounded(bool background) { 681 void ChildThreadImpl::OnProcessBackgrounded(bool background) {
681 // Set timer slack to maximum on main thread when in background. 682 // Set timer slack to maximum on main thread when in background.
682 base::TimerSlack timer_slack = base::TIMER_SLACK_NONE; 683 base::TimerSlack timer_slack = base::TIMER_SLACK_NONE;
683 if (background) 684 if (background)
684 timer_slack = base::TIMER_SLACK_MAXIMUM; 685 timer_slack = base::TIMER_SLACK_MAXIMUM;
685 base::MessageLoop::current()->SetTimerSlack(timer_slack); 686 base::MessageLoop::current()->SetTimerSlack(timer_slack);
686 } 687 }
687 688
688 } // namespace content 689 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698