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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 #include "ipc/ipc_channel_mojo.h" | 134 #include "ipc/ipc_channel_mojo.h" |
135 #include "ipc/ipc_platform_file.h" | 135 #include "ipc/ipc_platform_file.h" |
136 #include "media/base/media.h" | 136 #include "media/base/media.h" |
137 #include "media/renderers/gpu_video_accelerator_factories.h" | 137 #include "media/renderers/gpu_video_accelerator_factories.h" |
138 #include "mojo/common/common_type_converters.h" | 138 #include "mojo/common/common_type_converters.h" |
139 #include "mojo/public/cpp/bindings/strong_binding.h" | 139 #include "mojo/public/cpp/bindings/strong_binding.h" |
140 #include "net/base/net_errors.h" | 140 #include "net/base/net_errors.h" |
141 #include "net/base/port_util.h" | 141 #include "net/base/port_util.h" |
142 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 142 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
143 #include "net/base/url_util.h" | 143 #include "net/base/url_util.h" |
| 144 #include "services/shell/public/cpp/interface_provider.h" |
| 145 #include "services/shell/public/cpp/interface_registry.h" |
144 #include "skia/ext/event_tracer_impl.h" | 146 #include "skia/ext/event_tracer_impl.h" |
145 #include "skia/ext/skia_memory_dump_provider.h" | 147 #include "skia/ext/skia_memory_dump_provider.h" |
146 #include "third_party/WebKit/public/platform/WebImageGenerator.h" | 148 #include "third_party/WebKit/public/platform/WebImageGenerator.h" |
147 #include "third_party/WebKit/public/platform/WebString.h" | 149 #include "third_party/WebKit/public/platform/WebString.h" |
148 #include "third_party/WebKit/public/platform/WebThread.h" | 150 #include "third_party/WebKit/public/platform/WebThread.h" |
149 #include "third_party/WebKit/public/web/WebCache.h" | 151 #include "third_party/WebKit/public/web/WebCache.h" |
150 #include "third_party/WebKit/public/web/WebDatabase.h" | 152 #include "third_party/WebKit/public/web/WebDatabase.h" |
151 #include "third_party/WebKit/public/web/WebDocument.h" | 153 #include "third_party/WebKit/public/web/WebDocument.h" |
152 #include "third_party/WebKit/public/web/WebFrame.h" | 154 #include "third_party/WebKit/public/web/WebFrame.h" |
153 #include "third_party/WebKit/public/web/WebKit.h" | 155 #include "third_party/WebKit/public/web/WebKit.h" |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
601 return lazy_tls.Pointer()->Get(); | 603 return lazy_tls.Pointer()->Get(); |
602 } | 604 } |
603 | 605 |
604 RenderThreadImpl::RenderThreadImpl( | 606 RenderThreadImpl::RenderThreadImpl( |
605 const InProcessChildThreadParams& params, | 607 const InProcessChildThreadParams& params, |
606 std::unique_ptr<scheduler::RendererScheduler> scheduler, | 608 std::unique_ptr<scheduler::RendererScheduler> scheduler, |
607 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) | 609 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) |
608 : ChildThreadImpl(Options::Builder() | 610 : ChildThreadImpl(Options::Builder() |
609 .InBrowserProcess(params) | 611 .InBrowserProcess(params) |
610 .UseMojoChannel(true) | 612 .UseMojoChannel(true) |
| 613 .AutoStartMojoShellConnection(false) |
611 .Build()), | 614 .Build()), |
612 renderer_scheduler_(std::move(scheduler)), | 615 renderer_scheduler_(std::move(scheduler)), |
613 categorized_worker_pool_(new CategorizedWorkerPool()) { | 616 categorized_worker_pool_(new CategorizedWorkerPool()) { |
614 Init(resource_task_queue); | 617 Init(resource_task_queue); |
615 } | 618 } |
616 | 619 |
617 // When we run plugins in process, we actually run them on the render thread, | 620 // When we run plugins in process, we actually run them on the render thread, |
618 // which means that we need to make the render thread pump UI events. | 621 // which means that we need to make the render thread pump UI events. |
619 RenderThreadImpl::RenderThreadImpl( | 622 RenderThreadImpl::RenderThreadImpl( |
620 std::unique_ptr<base::MessageLoop> main_message_loop, | 623 std::unique_ptr<base::MessageLoop> main_message_loop, |
621 std::unique_ptr<scheduler::RendererScheduler> scheduler) | 624 std::unique_ptr<scheduler::RendererScheduler> scheduler) |
622 : ChildThreadImpl(Options::Builder().UseMojoChannel(true).Build()), | 625 : ChildThreadImpl(Options::Builder() |
| 626 .UseMojoChannel(true) |
| 627 .AutoStartMojoShellConnection(false) |
| 628 .Build()), |
623 renderer_scheduler_(std::move(scheduler)), | 629 renderer_scheduler_(std::move(scheduler)), |
624 main_message_loop_(std::move(main_message_loop)), | 630 main_message_loop_(std::move(main_message_loop)), |
625 categorized_worker_pool_(new CategorizedWorkerPool()) { | 631 categorized_worker_pool_(new CategorizedWorkerPool()) { |
626 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; | 632 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; |
627 Init(test_task_counter); | 633 Init(test_task_counter); |
628 } | 634 } |
629 | 635 |
630 void RenderThreadImpl::Init( | 636 void RenderThreadImpl::Init( |
631 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { | 637 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { |
632 TRACE_EVENT0("startup", "RenderThreadImpl::Init"); | 638 TRACE_EVENT0("startup", "RenderThreadImpl::Init"); |
633 | 639 |
634 base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( | 640 base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( |
635 base::PlatformThread::CurrentId(), | 641 base::PlatformThread::CurrentId(), |
636 kTraceEventRendererMainThreadSortIndex); | 642 kTraceEventRendererMainThreadSortIndex); |
637 | 643 |
638 #if defined(USE_EXTERNAL_POPUP_MENU) | 644 #if defined(USE_EXTERNAL_POPUP_MENU) |
639 // On Mac and Android Java UI, the select popups are rendered by the browser. | 645 // On Mac and Android Java UI, the select popups are rendered by the browser. |
640 blink::WebView::setUseExternalPopupMenus(true); | 646 blink::WebView::setUseExternalPopupMenus(true); |
641 #endif | 647 #endif |
642 | 648 |
643 lazy_tls.Pointer()->Set(this); | 649 lazy_tls.Pointer()->Set(this); |
644 | 650 |
645 // Register this object as the main thread. | 651 // Register this object as the main thread. |
646 ChildProcess::current()->set_main_thread(this); | 652 ChildProcess::current()->set_main_thread(this); |
647 | 653 |
648 #if defined(MOJO_SHELL_CLIENT) | 654 #if defined(MOJO_SHELL_CLIENT) |
649 if (IsRunningInMash()) { | 655 if (IsRunningInMash()) |
650 auto* shell_connection = ChildThread::Get()->GetMojoShellConnection(); | 656 ui::GpuService::Initialize(GetMojoShellConnection()->GetConnector()); |
651 ui::GpuService::Initialize(shell_connection->GetConnector()); | |
652 } | |
653 #endif | 657 #endif |
654 | 658 |
655 InitializeWebKit(resource_task_queue); | 659 InitializeWebKit(resource_task_queue); |
656 | 660 |
657 // In single process the single process is all there is. | 661 // In single process the single process is all there is. |
658 webkit_shared_timer_suspended_ = false; | 662 webkit_shared_timer_suspended_ = false; |
659 widget_count_ = 0; | 663 widget_count_ = 0; |
660 hidden_widget_count_ = 0; | 664 hidden_widget_count_ = 0; |
661 idle_notification_delay_in_ms_ = kInitialIdleHandlerDelayMs; | 665 idle_notification_delay_in_ms_ = kInitialIdleHandlerDelayMs; |
662 idle_notifications_to_skip_ = 0; | 666 idle_notifications_to_skip_ = 0; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 | 720 |
717 midi_message_filter_ = new MidiMessageFilter(GetIOTaskRunner()); | 721 midi_message_filter_ = new MidiMessageFilter(GetIOTaskRunner()); |
718 AddFilter(midi_message_filter_.get()); | 722 AddFilter(midi_message_filter_.get()); |
719 | 723 |
720 AddFilter((new IndexedDBMessageFilter(thread_safe_sender()))->GetFilter()); | 724 AddFilter((new IndexedDBMessageFilter(thread_safe_sender()))->GetFilter()); |
721 | 725 |
722 AddFilter((new CacheStorageMessageFilter(thread_safe_sender()))->GetFilter()); | 726 AddFilter((new CacheStorageMessageFilter(thread_safe_sender()))->GetFilter()); |
723 | 727 |
724 AddFilter((new ServiceWorkerContextMessageFilter())->GetFilter()); | 728 AddFilter((new ServiceWorkerContextMessageFilter())->GetFilter()); |
725 | 729 |
| 730 #if defined(MOJO_SHELL_CLIENT) && defined(USE_AURA) |
| 731 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 732 switches::kUseMusInRenderer)) { |
| 733 CreateRenderWidgetWindowTreeClientFactory(GetMojoShellConnection()); |
| 734 } |
| 735 #endif |
| 736 |
| 737 // Must be called before RenderThreadStarted() below. |
| 738 StartMojoShellConnection(); |
| 739 |
726 GetContentClient()->renderer()->RenderThreadStarted(); | 740 GetContentClient()->renderer()->RenderThreadStarted(); |
727 | 741 |
728 InitSkiaEventTracer(); | 742 InitSkiaEventTracer(); |
729 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( | 743 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
730 skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); | 744 skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); |
731 | 745 |
732 const base::CommandLine& command_line = | 746 const base::CommandLine& command_line = |
733 *base::CommandLine::ForCurrentProcess(); | 747 *base::CommandLine::ForCurrentProcess(); |
734 | 748 |
735 #if defined(ENABLE_IPC_FUZZER) | 749 #if defined(ENABLE_IPC_FUZZER) |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 // See crbug.com/503724. | 855 // See crbug.com/503724. |
842 base::DiscardableMemoryAllocator::SetInstance( | 856 base::DiscardableMemoryAllocator::SetInstance( |
843 ChildThreadImpl::discardable_shared_memory_manager()); | 857 ChildThreadImpl::discardable_shared_memory_manager()); |
844 | 858 |
845 GetContentClient()->renderer()->ExposeInterfacesToBrowser( | 859 GetContentClient()->renderer()->ExposeInterfacesToBrowser( |
846 GetInterfaceRegistry()); | 860 GetInterfaceRegistry()); |
847 | 861 |
848 GetInterfaceRegistry()->AddInterface(base::Bind(CreateFrameFactory)); | 862 GetInterfaceRegistry()->AddInterface(base::Bind(CreateFrameFactory)); |
849 GetInterfaceRegistry()->AddInterface(base::Bind(CreateEmbeddedWorkerSetup)); | 863 GetInterfaceRegistry()->AddInterface(base::Bind(CreateEmbeddedWorkerSetup)); |
850 | 864 |
851 #if defined(MOJO_SHELL_CLIENT) && defined(USE_AURA) | |
852 // We may not have a MojoShellConnection object in tests that directly | |
853 // instantiate a RenderThreadImpl. | |
854 if (ChildThread::Get()->GetMojoShellConnection() && | |
855 base::CommandLine::ForCurrentProcess()->HasSwitch( | |
856 switches::kUseMusInRenderer)) | |
857 CreateRenderWidgetWindowTreeClientFactory(); | |
858 #endif | |
859 | |
860 GetRemoteInterfaces()->GetInterface( | 865 GetRemoteInterfaces()->GetInterface( |
861 mojo::GetProxy(&storage_partition_service_)); | 866 mojo::GetProxy(&storage_partition_service_)); |
862 | 867 |
863 is_renderer_suspended_ = false; | 868 is_renderer_suspended_ = false; |
864 } | 869 } |
865 | 870 |
866 RenderThreadImpl::~RenderThreadImpl() { | 871 RenderThreadImpl::~RenderThreadImpl() { |
867 } | 872 } |
868 | 873 |
869 void RenderThreadImpl::Shutdown() { | 874 void RenderThreadImpl::Shutdown() { |
(...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1815 bool use_software, | 1820 bool use_software, |
1816 int routing_id, | 1821 int routing_id, |
1817 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue, | 1822 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue, |
1818 const GURL& url) { | 1823 const GURL& url) { |
1819 const base::CommandLine& command_line = | 1824 const base::CommandLine& command_line = |
1820 *base::CommandLine::ForCurrentProcess(); | 1825 *base::CommandLine::ForCurrentProcess(); |
1821 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) | 1826 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) |
1822 use_software = true; | 1827 use_software = true; |
1823 | 1828 |
1824 #if defined(MOJO_SHELL_CLIENT) && defined(USE_AURA) | 1829 #if defined(MOJO_SHELL_CLIENT) && defined(USE_AURA) |
1825 if (ChildThread::Get()->GetMojoShellConnection() && !use_software && | 1830 if (GetMojoShellConnection() && !use_software && |
1826 command_line.HasSwitch(switches::kUseMusInRenderer)) { | 1831 command_line.HasSwitch(switches::kUseMusInRenderer)) { |
1827 RenderWidgetMusConnection* connection = | 1832 RenderWidgetMusConnection* connection = |
1828 RenderWidgetMusConnection::GetOrCreate(routing_id); | 1833 RenderWidgetMusConnection::GetOrCreate(routing_id); |
1829 return connection->CreateOutputSurface(); | 1834 return connection->CreateOutputSurface(); |
1830 } | 1835 } |
1831 #endif | 1836 #endif |
1832 | 1837 |
1833 uint32_t output_surface_id = g_next_output_surface_id++; | 1838 uint32_t output_surface_id = g_next_output_surface_id++; |
1834 | 1839 |
1835 if (command_line.HasSwitch(switches::kEnableVulkan)) { | 1840 if (command_line.HasSwitch(switches::kEnableVulkan)) { |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2223 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) | 2228 v8_memory_pressure_level == v8::MemoryPressureLevel::kCritical) |
2224 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; | 2229 v8_memory_pressure_level = v8::MemoryPressureLevel::kModerate; |
2225 | 2230 |
2226 blink::mainThreadIsolate()->MemoryPressureNotification( | 2231 blink::mainThreadIsolate()->MemoryPressureNotification( |
2227 v8_memory_pressure_level); | 2232 v8_memory_pressure_level); |
2228 blink::MemoryPressureNotificationToWorkerThreadIsolates( | 2233 blink::MemoryPressureNotificationToWorkerThreadIsolates( |
2229 v8_memory_pressure_level); | 2234 v8_memory_pressure_level); |
2230 } | 2235 } |
2231 | 2236 |
2232 } // namespace content | 2237 } // namespace content |
OLD | NEW |