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

Unified Diff: content/renderer/render_thread_impl.cc

Issue 2096843002: mus+ash: Enable Chrome HW rendering in mus+ash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_thread_impl.cc
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 147bf012663f386cc72000b6ce63d04b6b830c0c..77dafd6793fbd0492bfc1256f959075a6386ea04 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -46,6 +46,7 @@
#include "cc/raster/task_graph_runner.h"
#include "cc/trees/layer_tree_host_common.h"
#include "cc/trees/layer_tree_settings.h"
+#include "components/mus/common/gpu_service.h"
#include "components/scheduler/child/compositor_worker_scheduler.h"
#include "components/scheduler/child/webthread_base.h"
#include "components/scheduler/child/webthread_impl_for_worker_scheduler.h"
@@ -442,6 +443,11 @@ scoped_refptr<ContextProviderCommandBuffer> CreateOffscreenContext(
attributes, nullptr, type));
}
+bool IsRunningInMash() {
+ const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
+ return cmdline->HasSwitch(switches::kIsRunningInMash);
+}
+
} // namespace
// For measuring memory usage after each task. Behind a command line flag.
@@ -629,6 +635,13 @@ void RenderThreadImpl::Init(
// Register this object as the main thread.
ChildProcess::current()->set_main_thread(this);
+#if defined(MOJO_SHELL_CLIENT)
+ if (IsRunningInMash()) {
+ auto shell_connection = MojoShellConnection::GetForProcess();
danakj 2016/06/27 21:28:48 auto*
Peng 2016/06/30 19:30:52 Done.
+ mus::GpuService::Initialize(shell_connection->GetConnector());
+ }
+#endif
+
InitializeWebKit(resource_task_queue);
// In single process the single process is all there is.
@@ -1599,7 +1612,11 @@ RenderThreadImpl::GetCompositorImplThreadTaskRunner() {
}
gpu::GpuMemoryBufferManager* RenderThreadImpl::GetGpuMemoryBufferManager() {
- return gpu_memory_buffer_manager();
+ if (!IsRunningInMash()) {
+ return gpu_memory_buffer_manager();
+ } else {
+ return mus::GpuService::GetInstance()->gpu_memory_buffer_manager();
danakj 2016/06/27 21:28:48 Why isn't gpu_memory_buffer_manager() the mus one?
Peng 2016/06/30 19:30:52 Done.
Peng 2016/06/30 19:50:54 Yeah. Unfortunately, mus::GpuService has his own b
+ }
}
scheduler::RendererScheduler* RenderThreadImpl::GetRendererScheduler() {
@@ -1762,32 +1779,36 @@ scoped_refptr<gpu::GpuChannelHost> RenderThreadImpl::EstablishGpuChannelSync(
// Recreate the channel if it has been lost.
gpu_channel_->DestroyChannel();
- gpu_channel_ = NULL;
+ gpu_channel_ = nullptr;
}
- // Ask the browser for the channel name.
- int client_id = 0;
- IPC::ChannelHandle channel_handle;
- gpu::GPUInfo gpu_info;
- if (!Send(new ChildProcessHostMsg_EstablishGpuChannel(
- cause_for_gpu_launch, &client_id, &channel_handle, &gpu_info)) ||
+ if (!IsRunningInMash()) {
+ int client_id = 0;
+ IPC::ChannelHandle channel_handle;
+ gpu::GPUInfo gpu_info;
+ // Ask the browser for the channel name.
+ if (!Send(new ChildProcessHostMsg_EstablishGpuChannel(
+ cause_for_gpu_launch, &client_id, &channel_handle, &gpu_info)) ||
#if defined(OS_POSIX)
- channel_handle.socket.fd == -1 ||
+ channel_handle.socket.fd == -1 ||
#endif
- channel_handle.name.empty()) {
- // Otherwise cancel the connection.
- return NULL;
- }
-
- GetContentClient()->SetGpuInfo(gpu_info);
+ channel_handle.name.empty()) {
+ // Otherwise cancel the connection.
+ return NULL;
danakj 2016/06/27 21:28:47 nullptr
Peng 2016/06/30 19:30:52 Done.
+ }
+ GetContentClient()->SetGpuInfo(gpu_info);
- // Cache some variables that are needed on the compositor thread for our
- // implementation of GpuChannelHostFactory.
- io_thread_task_runner_ = ChildProcess::current()->io_task_runner();
+ // Cache some variables that are needed on the compositor thread for our
+ // implementation of GpuChannelHostFactory.
+ io_thread_task_runner_ = ChildProcess::current()->io_task_runner();
- gpu_channel_ = gpu::GpuChannelHost::Create(
- this, client_id, gpu_info, channel_handle,
- ChildProcess::current()->GetShutDownEvent(), gpu_memory_buffer_manager());
+ gpu_channel_ =
+ gpu::GpuChannelHost::Create(this, client_id, gpu_info, channel_handle,
+ ChildProcess::current()->GetShutDownEvent(),
+ gpu_memory_buffer_manager());
+ } else {
+ gpu_channel_ = mus::GpuService::GetInstance()->EstablishGpuChannelSync();
danakj 2016/06/27 21:28:48 Would it be possible to have a non-mash in-process
Peng 2016/06/30 19:30:52 It is possible. But currently some features are no
+ }
return gpu_channel_;
}
@@ -1806,7 +1827,6 @@ RenderThreadImpl::CreateCompositorOutputSurface(
auto shell_connection = MojoShellConnection::GetForProcess();
if (shell_connection && !use_software &&
command_line.HasSwitch(switches::kUseMusInRenderer)) {
- mus::GpuService::Initialize(shell_connection->GetConnector());
RenderWidgetMusConnection* connection =
RenderWidgetMusConnection::GetOrCreate(routing_id);
return connection->CreateOutputSurface();

Powered by Google App Engine
This is Rietveld 408576698