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

Unified Diff: content/common/gpu/gpu_channel_manager.cc

Issue 1711533002: Decouple browser-specific GPU IPC messages from GPU service IPCs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed sievers@'s comments Created 4 years, 10 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/common/gpu/gpu_channel_manager.cc
diff --git a/content/common/gpu/gpu_channel_manager.cc b/content/common/gpu/gpu_channel_manager.cc
index 381292b7d0c847832eb3272554b9d3c3bf413f36..ab6e1eb3d3adedd86c8aa6f0b2bfb6f2163bbfca 100644
--- a/content/common/gpu/gpu_channel_manager.cc
+++ b/content/common/gpu/gpu_channel_manager.cc
@@ -13,11 +13,15 @@
#include "base/single_thread_task_runner.h"
#include "base/thread_task_runner_handle.h"
#include "build/build_config.h"
+#include "content/common/gpu/establish_channel_params.h"
#include "content/common/gpu/gpu_channel.h"
+#include "content/common/gpu/gpu_channel_manager_delegate.h"
#include "content/common/gpu/gpu_memory_buffer_factory.h"
#include "content/common/gpu/gpu_memory_manager.h"
#include "content/common/gpu/gpu_messages.h"
+#include "content/common/gpu/image_transport_surface.h"
#include "content/public/common/content_switches.h"
+#include "gpu/command_buffer/common/sync_token.h"
#include "gpu/command_buffer/common/value_state.h"
#include "gpu/command_buffer/service/feature_info.h"
#include "gpu/command_buffer/service/gpu_switches.h"
@@ -30,6 +34,10 @@
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_share_group.h"
+#if defined(OS_MACOSX)
+#include "content/common/gpu/buffer_presented_params_mac.h"
+#endif
+
namespace content {
namespace {
@@ -44,7 +52,7 @@ const int kMaxKeepAliveTimeMs = 200;
}
GpuChannelManager::GpuChannelManager(
- IPC::SyncChannel* channel,
+ GpuChannelManagerDelegate* delegate,
GpuWatchdog* watchdog,
base::SingleThreadTaskRunner* task_runner,
base::SingleThreadTaskRunner* io_task_runner,
@@ -53,7 +61,7 @@ GpuChannelManager::GpuChannelManager(
GpuMemoryBufferFactory* gpu_memory_buffer_factory)
: task_runner_(task_runner),
io_task_runner_(io_task_runner),
- channel_(channel),
+ delegate_(delegate),
watchdog_(watchdog),
shutdown_event_(shutdown_event),
share_group_(new gfx::GLShareGroup),
@@ -108,55 +116,33 @@ GpuChannelManager::framebuffer_completeness_cache() {
}
void GpuChannelManager::RemoveChannel(int client_id) {
- Send(new GpuHostMsg_DestroyChannel(client_id));
+ delegate_->DidDestroyChannel(client_id);
gpu_channels_.erase(client_id);
}
-int GpuChannelManager::GenerateRouteID() {
- static int last_id = 0;
- return ++last_id;
+void GpuChannelManager::AddImageTransportSurface(
no sievers 2016/02/23 21:50:12 nit: ifdef mac
Fady Samuel 2016/02/23 22:43:43 Done.
+ int32_t surface_id,
+ ImageTransportHelper* image_transport_helper) {
+ image_transport_map_.AddWithID(image_transport_helper, surface_id);
}
-void GpuChannelManager::AddRoute(int32_t routing_id, IPC::Listener* listener) {
- router_.AddRoute(routing_id, listener);
+void GpuChannelManager::RemoveImageTransportSurface(int32_t surface_id) {
+ image_transport_map_.Remove(surface_id);
}
-void GpuChannelManager::RemoveRoute(int32_t routing_id) {
- router_.RemoveRoute(routing_id);
+#if defined(OS_MACOSX)
+void GpuChannelManager::BufferPresented(const BufferPresentedParams& params) {
+ ImageTransportHelper* helper = image_transport_map_.Lookup(params.surface_id);
+ if (helper)
+ helper->BufferPresented(params);
}
+#endif
GpuChannel* GpuChannelManager::LookupChannel(int32_t client_id) const {
const auto& it = gpu_channels_.find(client_id);
return it != gpu_channels_.end() ? it->second : nullptr;
}
-bool GpuChannelManager::OnControlMessageReceived(const IPC::Message& msg) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(GpuChannelManager, msg)
- IPC_MESSAGE_HANDLER(GpuMsg_EstablishChannel, OnEstablishChannel)
- IPC_MESSAGE_HANDLER(GpuMsg_CloseChannel, OnCloseChannel)
- IPC_MESSAGE_HANDLER(GpuMsg_DestroyGpuMemoryBuffer, OnDestroyGpuMemoryBuffer)
- IPC_MESSAGE_HANDLER(GpuMsg_LoadedShader, OnLoadedShader)
- IPC_MESSAGE_HANDLER(GpuMsg_UpdateValueState, OnUpdateValueState)
-#if defined(OS_ANDROID)
- IPC_MESSAGE_HANDLER(GpuMsg_WakeUpGpu, OnWakeUpGpu);
-#endif
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-bool GpuChannelManager::OnMessageReceived(const IPC::Message& msg) {
- if (msg.routing_id() == MSG_ROUTING_CONTROL)
- return OnControlMessageReceived(msg);
-
- return router_.RouteMessage(msg);
-}
-
-bool GpuChannelManager::Send(IPC::Message* msg) {
- return channel_->Send(msg);
-}
-
scoped_ptr<GpuChannel> GpuChannelManager::CreateGpuChannel(
int client_id,
uint64_t client_tracing_id,
@@ -171,8 +157,7 @@ scoped_ptr<GpuChannel> GpuChannelManager::CreateGpuChannel(
allow_view_command_buffers, allow_real_time_streams));
}
-void GpuChannelManager::OnEstablishChannel(
- const GpuMsg_EstablishChannel_Params& params) {
+void GpuChannelManager::EstablishChannel(const EstablishChannelParams& params) {
scoped_ptr<GpuChannel> channel(CreateGpuChannel(
params.client_id, params.client_tracing_id, params.preempts,
params.allow_view_command_buffers, params.allow_real_time_streams));
@@ -180,11 +165,10 @@ void GpuChannelManager::OnEstablishChannel(
gpu_channels_.set(params.client_id, std::move(channel));
- Send(new GpuHostMsg_ChannelEstablished(channel_handle));
+ delegate_->ChannelEstablished(channel_handle);
}
-void GpuChannelManager::OnCloseChannel(
- const IPC::ChannelHandle& channel_handle) {
+void GpuChannelManager::CloseChannel(const IPC::ChannelHandle& channel_handle) {
for (auto it = gpu_channels_.begin(); it != gpu_channels_.end(); ++it) {
if (it->second->channel_id() == channel_handle.name) {
gpu_channels_.erase(it);
@@ -193,21 +177,22 @@ void GpuChannelManager::OnCloseChannel(
}
}
-void GpuChannelManager::DestroyGpuMemoryBuffer(
+void GpuChannelManager::InternalDestroyGpuMemoryBuffer(
gfx::GpuMemoryBufferId id,
int client_id) {
io_task_runner_->PostTask(
- FROM_HERE, base::Bind(&GpuChannelManager::DestroyGpuMemoryBufferOnIO,
- base::Unretained(this), id, client_id));
+ FROM_HERE,
+ base::Bind(&GpuChannelManager::InternalDestroyGpuMemoryBufferOnIO,
+ base::Unretained(this), id, client_id));
}
-void GpuChannelManager::DestroyGpuMemoryBufferOnIO(
+void GpuChannelManager::InternalDestroyGpuMemoryBufferOnIO(
gfx::GpuMemoryBufferId id,
int client_id) {
gpu_memory_buffer_factory_->DestroyGpuMemoryBuffer(id, client_id);
}
-void GpuChannelManager::OnDestroyGpuMemoryBuffer(
+void GpuChannelManager::DestroyGpuMemoryBuffer(
gfx::GpuMemoryBufferId id,
int client_id,
const gpu::SyncToken& sync_token) {
@@ -218,18 +203,19 @@ void GpuChannelManager::OnDestroyGpuMemoryBuffer(
if (release_state) {
sync_point_client_waiter_->WaitOutOfOrder(
release_state.get(), sync_token.release_count(),
- base::Bind(&GpuChannelManager::DestroyGpuMemoryBuffer,
+ base::Bind(&GpuChannelManager::InternalDestroyGpuMemoryBuffer,
base::Unretained(this), id, client_id));
return;
}
}
// No sync token or invalid sync token, destroy immediately.
- DestroyGpuMemoryBuffer(id, client_id);
+ InternalDestroyGpuMemoryBuffer(id, client_id);
}
-void GpuChannelManager::OnUpdateValueState(
- int client_id, unsigned int target, const gpu::ValueState& state) {
+void GpuChannelManager::UpdateValueState(int client_id,
+ unsigned int target,
+ const gpu::ValueState& state) {
// Only pass updated state to the channel corresponding to the
// render_widget_host where the event originated.
auto it = gpu_channels_.find(client_id);
@@ -237,7 +223,7 @@ void GpuChannelManager::OnUpdateValueState(
it->second->HandleUpdateValueState(target, state);
}
-void GpuChannelManager::OnLoadedShader(const std::string& program_proto) {
+void GpuChannelManager::PopulateShaderCache(const std::string& program_proto) {
if (program_cache())
program_cache()->LoadProgram(program_proto);
}
@@ -265,11 +251,11 @@ void GpuChannelManager::LoseAllContexts() {
kv.second->MarkAllContextsLost();
}
task_runner_->PostTask(FROM_HERE,
- base::Bind(&GpuChannelManager::OnLoseAllContexts,
+ base::Bind(&GpuChannelManager::DestroyAllChannels,
weak_factory_.GetWeakPtr()));
}
-void GpuChannelManager::OnLoseAllContexts() {
+void GpuChannelManager::DestroyAllChannels() {
gpu_channels_.clear();
}
@@ -286,7 +272,7 @@ void GpuChannelManager::DidAccessGpu() {
last_gpu_access_time_ = base::TimeTicks::Now();
}
-void GpuChannelManager::OnWakeUpGpu() {
+void GpuChannelManager::WakeUpGpu() {
begin_wake_up_time_ = base::TimeTicks::Now();
ScheduleWakeUpGpu();
}

Powered by Google App Engine
This is Rietveld 408576698