OLD | NEW |
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/renderer/render_thread_impl.h" | 5 #include "content/renderer/render_thread_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 #include "content/child/resource_dispatcher.h" | 64 #include "content/child/resource_dispatcher.h" |
65 #include "content/child/resource_scheduling_filter.h" | 65 #include "content/child/resource_scheduling_filter.h" |
66 #include "content/child/runtime_features.h" | 66 #include "content/child/runtime_features.h" |
67 #include "content/child/thread_safe_sender.h" | 67 #include "content/child/thread_safe_sender.h" |
68 #include "content/child/web_database_observer_impl.h" | 68 #include "content/child/web_database_observer_impl.h" |
69 #include "content/child/worker_thread_registry.h" | 69 #include "content/child/worker_thread_registry.h" |
70 #include "content/common/child_process_messages.h" | 70 #include "content/common/child_process_messages.h" |
71 #include "content/common/content_constants_internal.h" | 71 #include "content/common/content_constants_internal.h" |
72 #include "content/common/dom_storage/dom_storage_messages.h" | 72 #include "content/common/dom_storage/dom_storage_messages.h" |
73 #include "content/common/features.h" | 73 #include "content/common/features.h" |
| 74 #include "content/common/field_trial_recorder.mojom.h" |
74 #include "content/common/frame_messages.h" | 75 #include "content/common/frame_messages.h" |
75 #include "content/common/frame_owner_properties.h" | 76 #include "content/common/frame_owner_properties.h" |
76 #include "content/common/render_process_messages.h" | 77 #include "content/common/render_process_messages.h" |
77 #include "content/common/resource_messages.h" | 78 #include "content/common/resource_messages.h" |
78 #include "content/common/site_isolation_policy.h" | 79 #include "content/common/site_isolation_policy.h" |
79 #include "content/common/view_messages.h" | 80 #include "content/common/view_messages.h" |
80 #include "content/common/worker_messages.h" | 81 #include "content/common/worker_messages.h" |
81 #include "content/public/common/content_constants.h" | 82 #include "content/public/common/content_constants.h" |
82 #include "content/public/common/content_features.h" | 83 #include "content/public/common/content_features.h" |
83 #include "content/public/common/content_paths.h" | 84 #include "content/public/common/content_paths.h" |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, | 573 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, |
573 const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) | 574 const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) |
574 : ChildThreadImpl(Options::Builder() | 575 : ChildThreadImpl(Options::Builder() |
575 .InBrowserProcess(params) | 576 .InBrowserProcess(params) |
576 .AutoStartServiceManagerConnection(false) | 577 .AutoStartServiceManagerConnection(false) |
577 .ConnectToBrowser(true) | 578 .ConnectToBrowser(true) |
578 .Build()), | 579 .Build()), |
579 renderer_scheduler_(std::move(scheduler)), | 580 renderer_scheduler_(std::move(scheduler)), |
580 categorized_worker_pool_(new CategorizedWorkerPool()), | 581 categorized_worker_pool_(new CategorizedWorkerPool()), |
581 renderer_binding_(this), | 582 renderer_binding_(this), |
582 client_id_(1) { | 583 client_id_(1), |
| 584 field_trial_syncer_(this) { |
583 Init(resource_task_queue); | 585 Init(resource_task_queue); |
584 } | 586 } |
585 | 587 |
586 // When we run plugins in process, we actually run them on the render thread, | 588 // When we run plugins in process, we actually run them on the render thread, |
587 // which means that we need to make the render thread pump UI events. | 589 // which means that we need to make the render thread pump UI events. |
588 RenderThreadImpl::RenderThreadImpl( | 590 RenderThreadImpl::RenderThreadImpl( |
589 std::unique_ptr<base::MessageLoop> main_message_loop, | 591 std::unique_ptr<base::MessageLoop> main_message_loop, |
590 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler) | 592 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler) |
591 : ChildThreadImpl(Options::Builder() | 593 : ChildThreadImpl(Options::Builder() |
592 .AutoStartServiceManagerConnection(false) | 594 .AutoStartServiceManagerConnection(false) |
593 .ConnectToBrowser(true) | 595 .ConnectToBrowser(true) |
594 .Build()), | 596 .Build()), |
595 renderer_scheduler_(std::move(scheduler)), | 597 renderer_scheduler_(std::move(scheduler)), |
596 main_message_loop_(std::move(main_message_loop)), | 598 main_message_loop_(std::move(main_message_loop)), |
597 categorized_worker_pool_(new CategorizedWorkerPool()), | 599 categorized_worker_pool_(new CategorizedWorkerPool()), |
598 is_scroll_animator_enabled_(false), | 600 is_scroll_animator_enabled_(false), |
599 is_surface_synchronization_enabled_(false), | 601 is_surface_synchronization_enabled_(false), |
600 renderer_binding_(this) { | 602 renderer_binding_(this), |
| 603 field_trial_syncer_(this) { |
601 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; | 604 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; |
602 DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | 605 DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( |
603 switches::kRendererClientId)); | 606 switches::kRendererClientId)); |
604 base::StringToInt(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 607 base::StringToInt(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
605 switches::kRendererClientId), | 608 switches::kRendererClientId), |
606 &client_id_); | 609 &client_id_); |
607 Init(test_task_counter); | 610 Init(test_task_counter); |
608 } | 611 } |
609 | 612 |
610 void RenderThreadImpl::Init( | 613 void RenderThreadImpl::Init( |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 switches::kNoUseMusInRenderer)) { | 713 switches::kNoUseMusInRenderer)) { |
711 CreateRenderWidgetWindowTreeClientFactory(GetServiceManagerConnection()); | 714 CreateRenderWidgetWindowTreeClientFactory(GetServiceManagerConnection()); |
712 } | 715 } |
713 #endif | 716 #endif |
714 | 717 |
715 // Must be called before RenderThreadStarted() below. | 718 // Must be called before RenderThreadStarted() below. |
716 StartServiceManagerConnection(); | 719 StartServiceManagerConnection(); |
717 | 720 |
718 GetContentClient()->renderer()->RenderThreadStarted(); | 721 GetContentClient()->renderer()->RenderThreadStarted(); |
719 | 722 |
| 723 field_trial_syncer_.InitFieldTrialObserving( |
| 724 *base::CommandLine::ForCurrentProcess(), switches::kSingleProcess); |
| 725 |
720 GetAssociatedInterfaceRegistry()->AddInterface( | 726 GetAssociatedInterfaceRegistry()->AddInterface( |
721 base::Bind(&RenderThreadImpl::OnRendererInterfaceRequest, | 727 base::Bind(&RenderThreadImpl::OnRendererInterfaceRequest, |
722 base::Unretained(this))); | 728 base::Unretained(this))); |
723 | 729 |
724 InitSkiaEventTracer(); | 730 InitSkiaEventTracer(); |
725 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( | 731 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
726 skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); | 732 skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); |
727 | 733 |
728 const base::CommandLine& command_line = | 734 const base::CommandLine& command_line = |
729 *base::CommandLine::ForCurrentProcess(); | 735 *base::CommandLine::ForCurrentProcess(); |
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1478 scoped_refptr<base::SingleThreadTaskRunner> | 1484 scoped_refptr<base::SingleThreadTaskRunner> |
1479 RenderThreadImpl::GetTimerTaskRunner() { | 1485 RenderThreadImpl::GetTimerTaskRunner() { |
1480 return renderer_scheduler_->TimerTaskRunner(); | 1486 return renderer_scheduler_->TimerTaskRunner(); |
1481 } | 1487 } |
1482 | 1488 |
1483 scoped_refptr<base::SingleThreadTaskRunner> | 1489 scoped_refptr<base::SingleThreadTaskRunner> |
1484 RenderThreadImpl::GetLoadingTaskRunner() { | 1490 RenderThreadImpl::GetLoadingTaskRunner() { |
1485 return renderer_scheduler_->LoadingTaskRunner(); | 1491 return renderer_scheduler_->LoadingTaskRunner(); |
1486 } | 1492 } |
1487 | 1493 |
| 1494 void RenderThreadImpl::SetFieldTrialGroup(const std::string& trial_name, |
| 1495 const std::string& group_name) { |
| 1496 field_trial_syncer_.OnSetFieldTrialGroup(trial_name, group_name); |
| 1497 } |
| 1498 |
1488 void RenderThreadImpl::OnAssociatedInterfaceRequest( | 1499 void RenderThreadImpl::OnAssociatedInterfaceRequest( |
1489 const std::string& name, | 1500 const std::string& name, |
1490 mojo::ScopedInterfaceEndpointHandle handle) { | 1501 mojo::ScopedInterfaceEndpointHandle handle) { |
1491 if (associated_interfaces_.CanBindRequest(name)) | 1502 if (associated_interfaces_.CanBindRequest(name)) |
1492 associated_interfaces_.BindRequest(name, std::move(handle)); | 1503 associated_interfaces_.BindRequest(name, std::move(handle)); |
1493 else | 1504 else |
1494 ChildThreadImpl::OnAssociatedInterfaceRequest(name, std::move(handle)); | 1505 ChildThreadImpl::OnAssociatedInterfaceRequest(name, std::move(handle)); |
1495 } | 1506 } |
1496 | 1507 |
1497 bool RenderThreadImpl::IsGpuRasterizationForced() { | 1508 bool RenderThreadImpl::IsGpuRasterizationForced() { |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2040 } | 2051 } |
2041 | 2052 |
2042 gpu::GpuChannelHost* RenderThreadImpl::GetGpuChannel() { | 2053 gpu::GpuChannelHost* RenderThreadImpl::GetGpuChannel() { |
2043 if (!gpu_channel_) | 2054 if (!gpu_channel_) |
2044 return nullptr; | 2055 return nullptr; |
2045 if (gpu_channel_->IsLost()) | 2056 if (gpu_channel_->IsLost()) |
2046 return nullptr; | 2057 return nullptr; |
2047 return gpu_channel_.get(); | 2058 return gpu_channel_.get(); |
2048 } | 2059 } |
2049 | 2060 |
| 2061 void RenderThreadImpl::OnFieldTrialGroupFinalized( |
| 2062 const std::string& trial_name, |
| 2063 const std::string& group_name) { |
| 2064 mojom::FieldTrialRecorderPtr field_trial_recorder; |
| 2065 GetRemoteInterfaces()->GetInterface(&field_trial_recorder); |
| 2066 field_trial_recorder->FieldTrialActivated(trial_name); |
| 2067 } |
| 2068 |
2050 void RenderThreadImpl::CreateView(mojom::CreateViewParamsPtr params) { | 2069 void RenderThreadImpl::CreateView(mojom::CreateViewParamsPtr params) { |
2051 CompositorDependencies* compositor_deps = this; | 2070 CompositorDependencies* compositor_deps = this; |
2052 is_scroll_animator_enabled_ = params->web_preferences.enable_scroll_animator; | 2071 is_scroll_animator_enabled_ = params->web_preferences.enable_scroll_animator; |
2053 // When bringing in render_view, also bring in webkit's glue and jsbindings. | 2072 // When bringing in render_view, also bring in webkit's glue and jsbindings. |
2054 RenderViewImpl::Create(compositor_deps, *params, | 2073 RenderViewImpl::Create(compositor_deps, *params, |
2055 RenderWidget::ShowCallback()); | 2074 RenderWidget::ShowCallback()); |
2056 } | 2075 } |
2057 | 2076 |
2058 void RenderThreadImpl::CreateFrame(mojom::CreateFrameParamsPtr params) { | 2077 void RenderThreadImpl::CreateFrame(mojom::CreateFrameParamsPtr params) { |
2059 // Debug cases of https://crbug.com/626802. | 2078 // Debug cases of https://crbug.com/626802. |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2400 } | 2419 } |
2401 } | 2420 } |
2402 | 2421 |
2403 void RenderThreadImpl::OnRendererInterfaceRequest( | 2422 void RenderThreadImpl::OnRendererInterfaceRequest( |
2404 mojom::RendererAssociatedRequest request) { | 2423 mojom::RendererAssociatedRequest request) { |
2405 DCHECK(!renderer_binding_.is_bound()); | 2424 DCHECK(!renderer_binding_.is_bound()); |
2406 renderer_binding_.Bind(std::move(request)); | 2425 renderer_binding_.Bind(std::move(request)); |
2407 } | 2426 } |
2408 | 2427 |
2409 } // namespace content | 2428 } // namespace content |
OLD | NEW |