Index: content/common/gpu/gpu_channel.cc |
diff --git a/content/common/gpu/gpu_channel.cc b/content/common/gpu/gpu_channel.cc |
index 7b0593ebbc72ea7943657e20653f66aab8be3875..4a43a7522d538046d3bbfa9377d5d761300fe185 100644 |
--- a/content/common/gpu/gpu_channel.cc |
+++ b/content/common/gpu/gpu_channel.cc |
@@ -222,6 +222,7 @@ GpuChannelMessageFilter::GpuChannelMessageFilter( |
GpuChannelMessageQueue* message_queue, |
gpu::SyncPointManager* sync_point_manager, |
base::SingleThreadTaskRunner* task_runner, |
+ gpu::PreemptionFlag* preempting_flag, |
bool future_sync_points) |
: preemption_state_(IDLE), |
gpu_channel_(gpu_channel), |
@@ -230,6 +231,7 @@ GpuChannelMessageFilter::GpuChannelMessageFilter( |
peer_pid_(base::kNullProcessId), |
sync_point_manager_(sync_point_manager), |
task_runner_(task_runner), |
+ preempting_flag_(preempting_flag), |
a_stub_is_descheduled_(false), |
future_sync_points_(future_sync_points) {} |
@@ -368,13 +370,6 @@ void GpuChannelMessageFilter::OnMessageProcessed() { |
UpdatePreemptionState(); |
} |
-void GpuChannelMessageFilter::SetPreemptingFlagAndSchedulingState( |
- gpu::PreemptionFlag* preempting_flag, |
- bool a_stub_is_descheduled) { |
- preempting_flag_ = preempting_flag; |
- a_stub_is_descheduled_ = a_stub_is_descheduled; |
-} |
- |
void GpuChannelMessageFilter::UpdateStubSchedulingState( |
bool a_stub_is_descheduled) { |
a_stub_is_descheduled_ = a_stub_is_descheduled; |
@@ -549,27 +544,25 @@ GpuChannel::GpuChannel(GpuChannelManager* gpu_channel_manager, |
GpuWatchdog* watchdog, |
gfx::GLShareGroup* share_group, |
gpu::gles2::MailboxManager* mailbox, |
+ gpu::PreemptionFlag* preempting_flag, |
base::SingleThreadTaskRunner* task_runner, |
base::SingleThreadTaskRunner* io_task_runner, |
int client_id, |
uint64_t client_tracing_id, |
- bool software, |
bool allow_future_sync_points, |
bool allow_real_time_streams) |
: gpu_channel_manager_(gpu_channel_manager), |
channel_id_(IPC::Channel::GenerateVerifiedChannelID("gpu")), |
+ preempting_flag_(preempting_flag), |
client_id_(client_id), |
client_tracing_id_(client_tracing_id), |
task_runner_(task_runner), |
io_task_runner_(io_task_runner), |
- share_group_(share_group ? share_group : new gfx::GLShareGroup), |
- mailbox_manager_(mailbox |
- ? scoped_refptr<gpu::gles2::MailboxManager>(mailbox) |
- : gpu::gles2::MailboxManager::Create()), |
+ share_group_(share_group), |
+ mailbox_manager_(mailbox), |
subscription_ref_set_(new gpu::gles2::SubscriptionRefSet), |
pending_valuebuffer_state_(new gpu::ValueStateMap), |
watchdog_(watchdog), |
- software_(software), |
num_stubs_descheduled_(0), |
allow_future_sync_points_(allow_future_sync_points), |
allow_real_time_streams_(allow_real_time_streams), |
@@ -583,7 +576,7 @@ GpuChannel::GpuChannel(GpuChannelManager* gpu_channel_manager, |
filter_ = new GpuChannelMessageFilter( |
weak_factory_.GetWeakPtr(), message_queue_.get(), |
gpu_channel_manager_->sync_point_manager(), task_runner_.get(), |
- allow_future_sync_points_); |
+ preempting_flag, allow_future_sync_points_); |
subscription_ref_set_->AddObserver(this); |
} |
@@ -694,13 +687,10 @@ void GpuChannel::OnStubSchedulingChanged(GpuCommandBufferStub* stub, |
CreateCommandBufferResult GpuChannel::CreateViewCommandBuffer( |
const gfx::GLSurfaceHandle& window, |
- int32 surface_id, |
const GPUCreateCommandBufferConfig& init_params, |
int32 route_id) { |
- TRACE_EVENT1("gpu", |
- "GpuChannel::CreateViewCommandBuffer", |
- "surface_id", |
- surface_id); |
+ TRACE_EVENT1("gpu", "GpuChannel::CreateViewCommandBuffer", "route_id", |
+ route_id); |
int32 share_group_id = init_params.share_group_id; |
GpuCommandBufferStub* share_group = stubs_.get(share_group_id); |
@@ -725,15 +715,13 @@ CreateCommandBufferResult GpuChannel::CreateViewCommandBuffer( |
return CREATE_COMMAND_BUFFER_FAILED; |
} |
+ bool offscreen = false; |
scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( |
this, task_runner_.get(), share_group, window, mailbox_manager_.get(), |
- subscription_ref_set_.get(), pending_valuebuffer_state_.get(), |
- gfx::Size(), disallowed_features_, init_params.attribs, |
- init_params.gpu_preference, stream_id, route_id, surface_id, watchdog_, |
- software_, init_params.active_url)); |
- |
- if (preempted_flag_.get()) |
- stub->SetPreemptByFlag(preempted_flag_); |
+ preempted_flag_.get(), subscription_ref_set_.get(), |
+ pending_valuebuffer_state_.get(), gfx::Size(), disallowed_features_, |
+ init_params.attribs, init_params.gpu_preference, stream_id, route_id, |
+ offscreen, watchdog_, init_params.active_url)); |
if (!router_.AddRoute(route_id, stub.get())) { |
DLOG(ERROR) << "GpuChannel::CreateViewCommandBuffer(): " |
@@ -774,24 +762,10 @@ void GpuChannel::RemoveRoute(int32 route_id) { |
router_.RemoveRoute(route_id); |
} |
-gpu::PreemptionFlag* GpuChannel::GetPreemptionFlag() { |
- if (!preempting_flag_.get()) { |
- preempting_flag_ = new gpu::PreemptionFlag; |
- io_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &GpuChannelMessageFilter::SetPreemptingFlagAndSchedulingState, |
- filter_, preempting_flag_, num_stubs_descheduled_ > 0)); |
- } |
- return preempting_flag_.get(); |
-} |
- |
void GpuChannel::SetPreemptByFlag( |
scoped_refptr<gpu::PreemptionFlag> preempted_flag) { |
+ DCHECK(stubs_.empty()); |
preempted_flag_ = preempted_flag; |
- |
- for (auto& kv : stubs_) |
- kv.second->SetPreemptByFlag(preempted_flag_); |
} |
void GpuChannel::OnDestroy() { |
@@ -959,15 +933,14 @@ void GpuChannel::OnCreateOffscreenCommandBuffer( |
return; |
} |
+ bool offscreen = true; |
scoped_ptr<GpuCommandBufferStub> stub(new GpuCommandBufferStub( |
this, task_runner_.get(), share_group, gfx::GLSurfaceHandle(), |
- mailbox_manager_.get(), subscription_ref_set_.get(), |
- pending_valuebuffer_state_.get(), size, disallowed_features_, |
- init_params.attribs, init_params.gpu_preference, init_params.stream_id, |
- route_id, 0, watchdog_, software_, init_params.active_url)); |
- |
- if (preempted_flag_.get()) |
- stub->SetPreemptByFlag(preempted_flag_); |
+ mailbox_manager_.get(), preempted_flag_.get(), |
+ subscription_ref_set_.get(), pending_valuebuffer_state_.get(), size, |
+ disallowed_features_, init_params.attribs, init_params.gpu_preference, |
+ init_params.stream_id, route_id, offscreen, watchdog_, |
+ init_params.active_url)); |
if (!router_.AddRoute(route_id, stub.get())) { |
DLOG(ERROR) << "GpuChannel::OnCreateOffscreenCommandBuffer(): " |