summaryrefslogtreecommitdiff
path: root/chromium/content/renderer/render_thread_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/render_thread_impl.cc')
-rw-r--r--chromium/content/renderer/render_thread_impl.cc274
1 files changed, 132 insertions, 142 deletions
diff --git a/chromium/content/renderer/render_thread_impl.cc b/chromium/content/renderer/render_thread_impl.cc
index 81d3f80db8e..089bc9a3188 100644
--- a/chromium/content/renderer/render_thread_impl.cc
+++ b/chromium/content/renderer/render_thread_impl.cc
@@ -18,7 +18,6 @@
#include "base/macros.h"
#include "base/memory/discardable_memory_allocator.h"
#include "base/memory/memory_coordinator_client_registry.h"
-#include "base/memory/ptr_util.h"
#include "base/memory/shared_memory.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/field_trial.h"
@@ -54,15 +53,16 @@
#include "components/viz/client/client_shared_bitmap_manager.h"
#include "components/viz/client/hit_test_data_provider.h"
#include "components/viz/client/hit_test_data_provider_draw_quad.h"
+#include "components/viz/client/hit_test_data_provider_surface_layer.h"
#include "components/viz/client/local_surface_id_provider.h"
#include "components/viz/common/features.h"
#include "components/viz/common/frame_sinks/copy_output_request.h"
#include "content/child/memory/child_memory_coordinator_impl.h"
#include "content/child/runtime_features.h"
#include "content/child/thread_safe_sender.h"
+#include "content/common/buildflags.h"
#include "content/common/content_constants_internal.h"
#include "content/common/dom_storage/dom_storage_messages.h"
-#include "content/common/features.h"
#include "content/common/frame_messages.h"
#include "content/common/frame_owner_properties.h"
#include "content/common/gpu_stream_constants.h"
@@ -84,8 +84,6 @@
#include "content/renderer/appcache/appcache_dispatcher.h"
#include "content/renderer/appcache/appcache_frontend_impl.h"
#include "content/renderer/browser_plugin/browser_plugin_manager.h"
-#include "content/renderer/cache_storage/cache_storage_dispatcher.h"
-#include "content/renderer/cache_storage/cache_storage_message_filter.h"
#include "content/renderer/categorized_worker_pool.h"
#include "content/renderer/dom_storage/dom_storage_dispatcher.h"
#include "content/renderer/dom_storage/webstoragearea_impl.h"
@@ -137,7 +135,7 @@
#include "ipc/ipc_platform_file.h"
#include "media/base/media.h"
#include "media/base/media_switches.h"
-#include "media/media_features.h"
+#include "media/media_buildflags.h"
#include "media/video/gpu_video_accelerator_factories.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "mojo/public/cpp/system/message_pipe.h"
@@ -145,7 +143,7 @@
#include "net/base/port_util.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "net/base/url_util.h"
-#include "ppapi/features/features.h"
+#include "ppapi/buildflags/buildflags.h"
#include "services/metrics/public/cpp/mojo_ukm_recorder.h"
#include "services/service_manager/public/cpp/connector.h"
#include "services/service_manager/public/cpp/interface_provider.h"
@@ -154,21 +152,21 @@
#include "services/ui/public/interfaces/constants.mojom.h"
#include "skia/ext/event_tracer_impl.h"
#include "skia/ext/skia_memory_dump_provider.h"
-#include "third_party/WebKit/public/platform/WebCache.h"
-#include "third_party/WebKit/public/platform/WebImageGenerator.h"
-#include "third_party/WebKit/public/platform/WebMemoryCoordinator.h"
-#include "third_party/WebKit/public/platform/WebNetworkStateNotifier.h"
-#include "third_party/WebKit/public/platform/WebRuntimeFeatures.h"
-#include "third_party/WebKit/public/platform/WebString.h"
-#include "third_party/WebKit/public/platform/WebThread.h"
-#include "third_party/WebKit/public/platform/scheduler/child/webthread_base.h"
-#include "third_party/WebKit/public/platform/scheduler/renderer/renderer_scheduler.h"
-#include "third_party/WebKit/public/web/WebDocument.h"
-#include "third_party/WebKit/public/web/WebFrame.h"
-#include "third_party/WebKit/public/web/WebKit.h"
-#include "third_party/WebKit/public/web/WebScriptController.h"
-#include "third_party/WebKit/public/web/WebSecurityPolicy.h"
-#include "third_party/WebKit/public/web/WebView.h"
+#include "third_party/blink/public/platform/scheduler/child/webthread_base.h"
+#include "third_party/blink/public/platform/scheduler/web_main_thread_scheduler.h"
+#include "third_party/blink/public/platform/web_cache.h"
+#include "third_party/blink/public/platform/web_image_generator.h"
+#include "third_party/blink/public/platform/web_memory_coordinator.h"
+#include "third_party/blink/public/platform/web_network_state_notifier.h"
+#include "third_party/blink/public/platform/web_runtime_features.h"
+#include "third_party/blink/public/platform/web_string.h"
+#include "third_party/blink/public/platform/web_thread.h"
+#include "third_party/blink/public/web/blink.h"
+#include "third_party/blink/public/web/web_document.h"
+#include "third_party/blink/public/web/web_frame.h"
+#include "third_party/blink/public/web/web_script_controller.h"
+#include "third_party/blink/public/web/web_security_policy.h"
+#include "third_party/blink/public/web/web_view.h"
#include "third_party/boringssl/src/include/openssl/evp.h"
#include "third_party/skia/include/core/SkGraphics.h"
#include "ui/base/layout.h"
@@ -363,6 +361,7 @@ scoped_refptr<ui::ContextProviderCommandBuffer> CreateOffscreenContext(
bool support_gles2_interface,
bool support_raster_interface,
bool support_oop_rasterization,
+ bool support_grcontext,
ui::command_buffer_metrics::ContextType type,
int32_t stream_id,
gpu::SchedulingPriority stream_priority) {
@@ -385,13 +384,22 @@ scoped_refptr<ui::ContextProviderCommandBuffer> CreateOffscreenContext(
attributes.enable_raster_interface = support_raster_interface;
attributes.enable_oop_rasterization = support_oop_rasterization;
+ bool enable_raster_decoder =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableRasterDecoder);
+ // --enable-raster-decoder supports raster interface, but not
+ // gles2 interface
+ attributes.enable_raster_decoder = enable_raster_decoder &&
+ support_raster_interface &&
+ !support_gles2_interface;
+
const bool automatic_flushes = false;
return base::MakeRefCounted<ui::ContextProviderCommandBuffer>(
std::move(gpu_channel_host), gpu_memory_buffer_manager, stream_id,
stream_priority, gpu::kNullSurfaceHandle,
GURL("chrome://gpu/RenderThreadImpl::CreateOffscreenContext/" +
ui::command_buffer_metrics::ContextTypeToString(type)),
- automatic_flushes, support_locking, limits, attributes,
+ automatic_flushes, support_locking, support_grcontext, limits, attributes,
nullptr /* share_context */, type);
}
@@ -522,7 +530,8 @@ class ResourceUsageReporterImpl : public content::mojom::ResourceUsageReporter {
base::RepeatingClosure collect = base::BindRepeating(
&ResourceUsageReporterImpl::CollectOnWorkerThread,
base::ThreadTaskRunnerHandle::Get(), weak_factory_.GetWeakPtr());
- workers_to_go_ = RenderThread::Get()->PostTaskToAllWebWorkers(collect);
+ workers_to_go_ =
+ RenderThread::Get()->PostTaskToAllWebWorkers(std::move(collect));
if (workers_to_go_) {
// The guard task to send out partial stats
// in case some workers are not responsive.
@@ -660,22 +669,25 @@ bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite(
// static
RenderThreadImpl* RenderThreadImpl::Create(
- const InProcessChildThreadParams& params) {
+ const InProcessChildThreadParams& params,
+ base::MessageLoop* unowned_message_loop) {
TRACE_EVENT0("startup", "RenderThreadImpl::Create");
- std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler =
- blink::scheduler::RendererScheduler::Create();
+ std::unique_ptr<blink::scheduler::WebMainThreadScheduler>
+ main_thread_scheduler =
+ blink::scheduler::WebMainThreadScheduler::Create();
scoped_refptr<base::SingleThreadTaskRunner> test_task_counter;
- return new RenderThreadImpl(
- params, std::move(renderer_scheduler), test_task_counter);
+ return new RenderThreadImpl(params, std::move(main_thread_scheduler),
+ test_task_counter, unowned_message_loop);
}
// static
RenderThreadImpl* RenderThreadImpl::Create(
std::unique_ptr<base::MessageLoop> main_message_loop,
- std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler) {
+ std::unique_ptr<blink::scheduler::WebMainThreadScheduler>
+ main_thread_scheduler) {
TRACE_EVENT0("startup", "RenderThreadImpl::Create");
return new RenderThreadImpl(std::move(main_message_loop),
- std::move(renderer_scheduler));
+ std::move(main_thread_scheduler));
}
// static
@@ -722,8 +734,9 @@ RenderThreadImpl::DeprecatedGetMainTaskRunner() {
// the browser
RenderThreadImpl::RenderThreadImpl(
const InProcessChildThreadParams& params,
- std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
- const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue)
+ std::unique_ptr<blink::scheduler::WebMainThreadScheduler> scheduler,
+ const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue,
+ base::MessageLoop* unowned_message_loop)
: ChildThreadImpl(
Options::Builder()
.InBrowserProcess(params)
@@ -731,7 +744,8 @@ RenderThreadImpl::RenderThreadImpl(
.ConnectToBrowser(true)
.IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr)
.Build()),
- renderer_scheduler_(std::move(scheduler)),
+ main_thread_scheduler_(std::move(scheduler)),
+ main_message_loop_(unowned_message_loop),
categorized_worker_pool_(new CategorizedWorkerPool()),
renderer_binding_(this),
client_id_(1),
@@ -743,16 +757,17 @@ RenderThreadImpl::RenderThreadImpl(
// When we run plugins in process, we actually run them on the render thread,
// which means that we need to make the render thread pump UI events.
RenderThreadImpl::RenderThreadImpl(
- std::unique_ptr<base::MessageLoop> main_message_loop,
- std::unique_ptr<blink::scheduler::RendererScheduler> scheduler)
+ std::unique_ptr<base::MessageLoop> owned_message_loop,
+ std::unique_ptr<blink::scheduler::WebMainThreadScheduler> scheduler)
: ChildThreadImpl(
Options::Builder()
.AutoStartServiceManagerConnection(false)
.ConnectToBrowser(true)
.IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr)
.Build()),
- renderer_scheduler_(std::move(scheduler)),
- main_message_loop_(std::move(main_message_loop)),
+ main_thread_scheduler_(std::move(scheduler)),
+ owned_message_loop_(std::move(owned_message_loop)),
+ main_message_loop_(owned_message_loop_.get()),
categorized_worker_pool_(new CategorizedWorkerPool()),
is_scroll_animator_enabled_(false),
renderer_binding_(this),
@@ -771,6 +786,12 @@ void RenderThreadImpl::Init(
const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
TRACE_EVENT0("startup", "RenderThreadImpl::Init");
+ // Whether owned or unowned, |main_message_loop_| needs to be initialized in
+ // all constructors.
+ DCHECK(main_message_loop_);
+
+ GetContentClient()->renderer()->PostIOThreadCreated(GetIOTaskRunner().get());
+
base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex(
base::PlatformThread::CurrentId(),
kTraceEventRendererMainThreadSortIndex);
@@ -781,7 +802,7 @@ void RenderThreadImpl::Init(
#endif
lazy_tls.Pointer()->Set(this);
- g_main_task_runner.Get() = base::MessageLoop::current()->task_runner();
+ g_main_task_runner.Get() = main_message_loop_->task_runner();
// Register this object as the main thread.
ChildProcess::current()->set_main_thread(this);
@@ -806,8 +827,8 @@ void RenderThreadImpl::Init(
shared_bitmap_allocation_notifier_ptr.PassInterface(),
GetChannel()->ipc_task_runner_refptr()));
- notification_dispatcher_ =
- new NotificationDispatcher(thread_safe_sender());
+ notification_dispatcher_ = new NotificationDispatcher(
+ thread_safe_sender(), GetWebMainThreadScheduler()->IPCTaskRunner());
AddFilter(notification_dispatcher_->GetFilter());
resource_dispatcher_.reset(new ResourceDispatcher());
@@ -831,11 +852,9 @@ void RenderThreadImpl::Init(
registry->AddInterface(
base::BindRepeating(&AppCacheDispatcher::Bind,
base::Unretained(appcache_dispatcher())),
- GetRendererScheduler()->IPCTaskRunner());
+ GetWebMainThreadScheduler()->IPCTaskRunner());
dom_storage_dispatcher_.reset(new DomStorageDispatcher());
main_thread_indexed_db_dispatcher_.reset(new IndexedDBDispatcher());
- main_thread_cache_storage_dispatcher_.reset(
- new CacheStorageDispatcher(thread_safe_sender()));
file_system_dispatcher_.reset(new FileSystemDispatcher());
vc_manager_.reset(new VideoCaptureImplManager());
@@ -894,8 +913,6 @@ void RenderThreadImpl::Init(
midi_message_filter_ = new MidiMessageFilter(GetIOTaskRunner());
AddFilter(midi_message_filter_.get());
- AddFilter((new CacheStorageMessageFilter(thread_safe_sender()))->GetFilter());
-
#if defined(USE_AURA)
if (features::IsMusEnabled())
CreateRenderWidgetWindowTreeClientFactory(GetServiceManagerConnection());
@@ -994,17 +1011,6 @@ void RenderThreadImpl::Init(
gpu_rasterization_msaa_sample_count_ = -1;
}
- if (command_line.HasSwitch(switches::kDisableDistanceFieldText)) {
- is_distance_field_text_enabled_ = false;
- } else if (command_line.HasSwitch(switches::kEnableDistanceFieldText)) {
- is_distance_field_text_enabled_ = true;
- } else {
- is_distance_field_text_enabled_ = false;
- }
-
- WebRuntimeFeatures::EnableCompositorImageAnimations(
- command_line.HasSwitch(switches::kEnableCompositorImageAnimations));
-
// Note that under Linux, the media library will normally already have
// been initialized by the Zygote before this instance became a Renderer.
media::InitializeMediaLibrary();
@@ -1177,11 +1183,11 @@ bool RenderThreadImpl::Send(IPC::Message* msg) {
}
}
- std::unique_ptr<blink::scheduler::RendererScheduler::RendererPauseHandle>
+ std::unique_ptr<blink::scheduler::WebMainThreadScheduler::RendererPauseHandle>
renderer_paused_handle;
if (pumping_events) {
- renderer_paused_handle = renderer_scheduler_->PauseRenderer();
+ renderer_paused_handle = main_thread_scheduler_->PauseRenderer();
WebView::WillEnterModalLoop();
}
@@ -1283,12 +1289,13 @@ void RenderThreadImpl::SetResourceDispatcherDelegate(
}
void RenderThreadImpl::InitializeCompositorThread() {
- base::Thread::Options options;
+ blink::WebThreadCreationParams params(
+ blink::WebThreadType::kCompositorThread);
#if defined(OS_ANDROID)
- options.priority = base::ThreadPriority::DISPLAY;
+ params.thread_options.priority = base::ThreadPriority::DISPLAY;
#endif
compositor_thread_ =
- blink::scheduler::WebThreadBase::CreateCompositorThread(options);
+ blink::scheduler::WebThreadBase::CreateCompositorThread(params);
blink_platform_impl_->SetCompositorThread(compositor_thread_.get());
compositor_task_runner_ = compositor_thread_->GetTaskRunner();
compositor_task_runner_->PostTask(
@@ -1323,7 +1330,7 @@ void RenderThreadImpl::InitializeCompositorThread() {
input_event_filter_ = compositor_input_event_filter;
input_handler_manager_.reset(new InputHandlerManager(
compositor_task_runner_, input_handler_manager_client,
- synchronous_input_handler_proxy_client, renderer_scheduler_.get()));
+ synchronous_input_handler_proxy_client, main_thread_scheduler_.get()));
}
}
@@ -1341,7 +1348,7 @@ void RenderThreadImpl::InitializeWebKit(
#endif
blink_platform_impl_.reset(
- new RendererBlinkPlatformImpl(renderer_scheduler_.get()));
+ new RendererBlinkPlatformImpl(main_thread_scheduler_.get()));
SetRuntimeFeaturesDefaultsAndUpdateFromArgs(command_line);
GetContentClient()
->renderer()
@@ -1351,10 +1358,10 @@ void RenderThreadImpl::InitializeWebKit(
v8::Isolate* isolate = blink::MainThreadIsolate();
isolate->SetCreateHistogramFunction(CreateHistogram);
isolate->SetAddHistogramSampleFunction(AddHistogramSample);
- renderer_scheduler_->SetRAILModeObserver(this);
+ main_thread_scheduler_->SetRAILModeObserver(this);
main_thread_compositor_task_runner_ =
- renderer_scheduler_->CompositorTaskRunner();
+ main_thread_scheduler_->CompositorTaskRunner();
main_input_callback_.Reset(
base::Bind(base::IgnoreResult(&RenderThreadImpl::OnMessageReceived),
@@ -1383,6 +1390,8 @@ void RenderThreadImpl::InitializeWebKit(
RenderMediaClient::Initialize();
+ idle_timer_.SetTaskRunner(GetWebMainThreadScheduler()->DefaultTaskRunner());
+
if (GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) {
ScheduleIdleHandler(kLongIdleHandlerDelayMs);
} else {
@@ -1391,11 +1400,11 @@ void RenderThreadImpl::InitializeWebKit(
isolate->IsolateInBackgroundNotification();
}
- service_worker_message_filter_ =
- new ServiceWorkerMessageFilter(thread_safe_sender());
+ service_worker_message_filter_ = new ServiceWorkerMessageFilter(
+ thread_safe_sender(), GetWebMainThreadScheduler()->IPCTaskRunner());
AddFilter(service_worker_message_filter_->GetFilter());
- renderer_scheduler_->SetStoppingWhenBackgroundedEnabled(
+ main_thread_scheduler_->SetStoppingWhenBackgroundedEnabled(
GetContentClient()->renderer()->AllowStoppingWhenProcessBackgrounded());
SkGraphics::SetResourceCacheSingleAllocationByteLimit(
@@ -1536,23 +1545,14 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl::GetGpuFactories() {
DCHECK(IsMainThread());
if (!gpu_factories_.empty()) {
- scoped_refptr<ui::ContextProviderCommandBuffer> shared_context_provider =
- gpu_factories_.back()->ContextProviderMainThread();
- if (shared_context_provider) {
- viz::ContextProvider::ScopedContextLock lock(
- shared_context_provider.get());
- if (lock.ContextGL()->GetGraphicsResetStatusKHR() == GL_NO_ERROR)
- return gpu_factories_.back().get();
-
- scoped_refptr<base::SingleThreadTaskRunner> media_task_runner =
- GetMediaThreadTaskRunner();
- media_task_runner->PostTask(
- FROM_HERE,
- base::BindOnce(
- base::IgnoreResult(
- &GpuVideoAcceleratorFactoriesImpl::CheckContextLost),
- base::Unretained(gpu_factories_.back().get())));
- }
+ if (!gpu_factories_.back()->CheckContextProviderLost())
+ return gpu_factories_.back().get();
+
+ GetMediaThreadTaskRunner()->PostTask(
+ FROM_HERE,
+ base::BindOnce(base::IgnoreResult(
+ &GpuVideoAcceleratorFactoriesImpl::CheckContextLost),
+ base::Unretained(gpu_factories_.back().get())));
}
const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
@@ -1564,22 +1564,19 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl::GetGpuFactories() {
// This context is only used to create textures and mailbox them, so
// use lower limits than the default.
gpu::SharedMemoryLimits limits = gpu::SharedMemoryLimits::ForMailboxContext();
- bool support_locking = true;
+ bool support_locking = false;
bool support_gles2_interface = true;
bool support_raster_interface = false;
bool support_oop_rasterization = false;
+ bool support_grcontext = false;
scoped_refptr<ui::ContextProviderCommandBuffer> media_context_provider =
- CreateOffscreenContext(
- gpu_channel_host, GetGpuMemoryBufferManager(), limits,
- support_locking, support_gles2_interface, support_raster_interface,
- support_oop_rasterization, ui::command_buffer_metrics::MEDIA_CONTEXT,
- kGpuStreamIdMedia, kGpuStreamPriorityMedia);
- auto result = media_context_provider->BindToCurrentThread();
- if (result != gpu::ContextResult::kSuccess)
- return nullptr;
+ CreateOffscreenContext(gpu_channel_host, GetGpuMemoryBufferManager(),
+ limits, support_locking, support_gles2_interface,
+ support_raster_interface,
+ support_oop_rasterization, support_grcontext,
+ ui::command_buffer_metrics::MEDIA_CONTEXT,
+ kGpuStreamIdMedia, kGpuStreamPriorityMedia);
- scoped_refptr<base::SingleThreadTaskRunner> media_task_runner =
- GetMediaThreadTaskRunner();
const bool enable_video_accelerator =
!cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode) &&
(gpu_channel_host->gpu_feature_info()
@@ -1602,7 +1599,7 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl::GetGpuFactories() {
gpu_factories_.push_back(GpuVideoAcceleratorFactoriesImpl::Create(
std::move(gpu_channel_host), base::ThreadTaskRunnerHandle::Get(),
- media_task_runner, std::move(media_context_provider),
+ GetMediaThreadTaskRunner(), std::move(media_context_provider),
enable_gpu_memory_buffer_video_frames, enable_video_accelerator,
vea_provider.PassInterface()));
gpu_factories_.back()->SetRenderingColorSpace(rendering_color_space_);
@@ -1626,12 +1623,13 @@ RenderThreadImpl::SharedMainThreadContextProvider() {
bool support_locking = false;
bool support_gles2_interface = true;
- bool support_raster_interface = true;
+ bool support_raster_interface = false;
bool support_oop_rasterization = false;
+ bool support_grcontext = true;
shared_main_thread_contexts_ = CreateOffscreenContext(
std::move(gpu_channel_host), GetGpuMemoryBufferManager(),
gpu::SharedMemoryLimits(), support_locking, support_gles2_interface,
- support_raster_interface, support_oop_rasterization,
+ support_raster_interface, support_oop_rasterization, support_grcontext,
ui::command_buffer_metrics::RENDERER_MAINTHREAD_CONTEXT,
kGpuStreamIdDefault, kGpuStreamPriorityDefault);
auto result = shared_main_thread_contexts_->BindToCurrentThread();
@@ -1685,7 +1683,7 @@ int32_t RenderThreadImpl::GetClientId() {
void RenderThreadImpl::SetRendererProcessType(
blink::scheduler::RendererProcessType type) {
- renderer_scheduler_->SetRendererProcessType(type);
+ main_thread_scheduler_->SetRendererProcessType(type);
}
bool RenderThreadImpl::OnMessageReceived(const IPC::Message& msg) {
@@ -1720,10 +1718,6 @@ bool RenderThreadImpl::IsLcdTextEnabled() {
return is_lcd_text_enabled_;
}
-bool RenderThreadImpl::IsDistanceFieldTextEnabled() {
- return is_distance_field_text_enabled_;
-}
-
bool RenderThreadImpl::IsZeroCopyEnabled() {
return is_zero_copy_enabled_;
}
@@ -1754,8 +1748,9 @@ gpu::GpuMemoryBufferManager* RenderThreadImpl::GetGpuMemoryBufferManager() {
return gpu_->gpu_memory_buffer_manager();
}
-blink::scheduler::RendererScheduler* RenderThreadImpl::GetRendererScheduler() {
- return renderer_scheduler_.get();
+blink::scheduler::WebMainThreadScheduler*
+RenderThreadImpl::GetWebMainThreadScheduler() {
+ return main_thread_scheduler_.get();
}
std::unique_ptr<viz::SyntheticBeginFrameSource>
@@ -1835,7 +1830,7 @@ bool RenderThreadImpl::OnControlMessageReceived(const IPC::Message& msg) {
}
void RenderThreadImpl::SetSchedulerKeepActive(bool keep_active) {
- renderer_scheduler_->SetSchedulerKeepActive(keep_active);
+ main_thread_scheduler_->SetSchedulerKeepActive(keep_active);
}
void RenderThreadImpl::SetProcessBackgrounded(bool backgrounded) {
@@ -1843,24 +1838,24 @@ void RenderThreadImpl::SetProcessBackgrounded(bool backgrounded) {
base::TimerSlack timer_slack = base::TIMER_SLACK_NONE;
if (backgrounded)
timer_slack = base::TIMER_SLACK_MAXIMUM;
- base::MessageLoop::current()->SetTimerSlack(timer_slack);
+ main_message_loop_->SetTimerSlack(timer_slack);
- renderer_scheduler_->SetRendererBackgrounded(backgrounded);
+ main_thread_scheduler_->SetRendererBackgrounded(backgrounded);
if (backgrounded) {
needs_to_record_first_active_paint_ = false;
- GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
+ GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask(
FROM_HERE,
base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded,
base::Unretained(this), "5min",
process_foregrounded_count_),
base::TimeDelta::FromMinutes(5));
- GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
+ GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask(
FROM_HERE,
base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded,
base::Unretained(this), "10min",
process_foregrounded_count_),
base::TimeDelta::FromMinutes(10));
- GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
+ GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask(
FROM_HERE,
base::BindOnce(&RenderThreadImpl::RecordMemoryUsageAfterBackgrounded,
base::Unretained(this), "15min",
@@ -1887,19 +1882,19 @@ void RenderThreadImpl::ProcessPurgeAndSuspend() {
return;
purge_and_suspend_memory_metrics_ = memory_metrics;
- GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
+ GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask(
FROM_HERE,
base::BindOnce(
&RenderThreadImpl::RecordPurgeAndSuspendMemoryGrowthMetrics,
base::Unretained(this), "30min", process_foregrounded_count_),
base::TimeDelta::FromMinutes(30));
- GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
+ GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask(
FROM_HERE,
base::BindOnce(
&RenderThreadImpl::RecordPurgeAndSuspendMemoryGrowthMetrics,
base::Unretained(this), "60min", process_foregrounded_count_),
base::TimeDelta::FromMinutes(60));
- GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
+ GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask(
FROM_HERE,
base::BindOnce(
&RenderThreadImpl::RecordPurgeAndSuspendMemoryGrowthMetrics,
@@ -2095,6 +2090,9 @@ void RenderThreadImpl::RequestNewLayerTreeFrameSink(
params.hit_test_data_provider =
std::make_unique<viz::HitTestDataProviderDrawQuad>(
true /* should_ask_for_child_region */);
+ } else if (features::IsVizHitTestingSurfaceLayerEnabled()) {
+ params.hit_test_data_provider =
+ std::make_unique<viz::HitTestDataProviderSurfaceLayer>();
}
// The renderer runs animations and layout for animate_only BeginFrames.
@@ -2188,13 +2186,14 @@ void RenderThreadImpl::RequestNewLayerTreeFrameSink(
constexpr bool automatic_flushes = false;
constexpr bool support_locking = false;
+ constexpr bool support_grcontext = false;
scoped_refptr<ui::ContextProviderCommandBuffer> context_provider(
new ui::ContextProviderCommandBuffer(
gpu_channel_host, GetGpuMemoryBufferManager(), kGpuStreamIdDefault,
kGpuStreamPriorityDefault, gpu::kNullSurfaceHandle, url,
- automatic_flushes, support_locking, limits, attributes,
- nullptr /* share_context */,
+ automatic_flushes, support_locking, support_grcontext, limits,
+ attributes, nullptr /* share_context */,
ui::command_buffer_metrics::RENDER_COMPOSITOR_CONTEXT));
if (layout_test_deps_) {
@@ -2308,7 +2307,7 @@ void RenderThreadImpl::CreateView(mojom::CreateViewParamsPtr params) {
// When bringing in render_view, also bring in webkit's glue and jsbindings.
RenderViewImpl::Create(compositor_deps, std::move(params),
RenderWidget::ShowCallback(),
- GetRendererScheduler()->DefaultTaskRunner());
+ GetWebMainThreadScheduler()->DefaultTaskRunner());
}
void RenderThreadImpl::CreateFrame(mojom::CreateFrameParamsPtr params) {
@@ -2368,9 +2367,9 @@ void RenderThreadImpl::OnNetworkQualityChanged(
void RenderThreadImpl::SetWebKitSharedTimersSuspended(bool suspend) {
#if defined(OS_ANDROID)
if (suspend) {
- renderer_scheduler_->PauseTimersForAndroidWebView();
+ main_thread_scheduler_->PauseTimersForAndroidWebView();
} else {
- renderer_scheduler_->ResumeTimersForAndroidWebView();
+ main_thread_scheduler_->ResumeTimersForAndroidWebView();
}
webkit_shared_timer_suspended_ = suspend;
#else
@@ -2433,10 +2432,8 @@ void RenderThreadImpl::OnMemoryPressure(
static_cast<blink::WebMemoryPressureLevel>(memory_pressure_level));
}
if (memory_pressure_level ==
- base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL) {
+ base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL)
ReleaseFreeMemory();
- ClearMemory();
- }
}
void RenderThreadImpl::OnMemoryStateChange(base::MemoryState state) {
@@ -2453,7 +2450,7 @@ void RenderThreadImpl::OnPurgeMemory() {
if (!GetRendererMemoryMetrics(&metrics))
return;
- GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
+ GetWebMainThreadScheduler()->DefaultTaskRunner()->PostDelayedTask(
FROM_HERE,
base::BindOnce(&RenderThreadImpl::RecordPurgeMemory,
base::Unretained(this), std::move(metrics)),
@@ -2461,7 +2458,6 @@ void RenderThreadImpl::OnPurgeMemory() {
OnTrimMemoryImmediately();
ReleaseFreeMemory();
- ClearMemory();
if (blink_platform_impl_)
blink::WebMemoryCoordinator::OnPurgeMemory();
}
@@ -2478,18 +2474,6 @@ void RenderThreadImpl::RecordPurgeMemory(RendererMemoryMetrics before) {
mbytes);
}
-void RenderThreadImpl::ClearMemory() {
- // Do not call into blink if it is not initialized.
- if (blink_platform_impl_) {
- // Purge Skia font cache, resource cache, and image filter.
- SkGraphics::PurgeAllCaches();
- }
-}
-
-scoped_refptr<base::TaskRunner> RenderThreadImpl::GetFileThreadTaskRunner() {
- return blink_platform_impl_->BaseFileTaskRunner();
-}
-
scoped_refptr<base::SingleThreadTaskRunner>
RenderThreadImpl::GetMediaThreadTaskRunner() {
DCHECK(message_loop()->task_runner()->BelongsToCurrentThread());
@@ -2529,10 +2513,11 @@ RenderThreadImpl::SharedCompositorWorkerContextProvider() {
switches::kEnableOOPRasterization);
bool support_gles2_interface = !support_oop_rasterization;
bool support_raster_interface = true;
+ bool support_grcontext = !support_oop_rasterization;
shared_worker_context_provider_ = CreateOffscreenContext(
std::move(gpu_channel_host), GetGpuMemoryBufferManager(),
gpu::SharedMemoryLimits(), support_locking, support_gles2_interface,
- support_raster_interface, support_oop_rasterization,
+ support_raster_interface, support_oop_rasterization, support_grcontext,
ui::command_buffer_metrics::RENDER_WORKER_CONTEXT, kGpuStreamIdWorker,
kGpuStreamPriorityWorker);
auto result = shared_worker_context_provider_->BindToCurrentThread();
@@ -2587,7 +2572,7 @@ void RenderThreadImpl::OnRendererHidden() {
// scheduled by the RendererScheduler - http://crbug.com/469210.
if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden())
return;
- renderer_scheduler_->SetRendererHidden(true);
+ main_thread_scheduler_->SetRendererHidden(true);
ScheduleIdleHandler(kInitialIdleHandlerDelayMs);
}
@@ -2595,7 +2580,7 @@ void RenderThreadImpl::OnRendererVisible() {
blink::MainThreadIsolate()->IsolateInForegroundNotification();
if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden())
return;
- renderer_scheduler_->SetRendererHidden(false);
+ main_thread_scheduler_->SetRendererHidden(false);
ScheduleIdleHandler(kLongIdleHandlerDelayMs);
}
@@ -2603,8 +2588,12 @@ void RenderThreadImpl::ReleaseFreeMemory() {
base::allocator::ReleaseFreeMemory();
discardable_shared_memory_manager_->ReleaseFreeMemory();
- if (blink_platform_impl_)
+ // Do not call into blink if it is not initialized.
+ if (blink_platform_impl_) {
+ // Purge Skia font cache, resource cache, and image filter.
+ SkGraphics::PurgeAllCaches();
blink::DecommitFreeableMemory();
+ }
}
RenderThreadImpl::PendingFrameCreate::PendingFrameCreate(
@@ -2660,7 +2649,8 @@ void RenderThreadImpl::OnTrimMemoryImmediately() {
void RenderThreadImpl::OnRendererInterfaceRequest(
mojom::RendererAssociatedRequest request) {
DCHECK(!renderer_binding_.is_bound());
- renderer_binding_.Bind(std::move(request));
+ renderer_binding_.Bind(std::move(request),
+ GetWebMainThreadScheduler()->IPCTaskRunner());
}
bool RenderThreadImpl::NeedsToRecordFirstActivePaint(