| Index: content/common/gpu/gpu_command_buffer_stub.cc
|
| diff --git a/content/common/gpu/gpu_command_buffer_stub.cc b/content/common/gpu/gpu_command_buffer_stub.cc
|
| index cb1cbf7f33dd564b40eab915d95779075280e25d..62412d7965541c13602f07742599305616140ff4 100644
|
| --- a/content/common/gpu/gpu_command_buffer_stub.cc
|
| +++ b/content/common/gpu/gpu_command_buffer_stub.cc
|
| @@ -46,6 +46,8 @@ GpuCommandBufferStub::GpuCommandBufferStub(
|
| last_flush_count_(0),
|
| renderer_id_(renderer_id),
|
| render_view_id_(render_view_id),
|
| + parent_stub_for_initialization_(),
|
| + parent_texture_for_initialization_(0),
|
| watchdog_(watchdog),
|
| task_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
|
| }
|
| @@ -171,6 +173,13 @@ void GpuCommandBufferStub::OnInitialize(
|
| scheduler_->SetResizeCallback(
|
| NewCallback(this, &GpuCommandBufferStub::ResizeCallback));
|
|
|
| + if (parent_stub_for_initialization_) {
|
| + scheduler_->SetParent(parent_stub_for_initialization_->scheduler_.get(),
|
| + parent_texture_for_initialization_);
|
| + parent_stub_for_initialization_.reset();
|
| + parent_texture_for_initialization_ = 0;
|
| + }
|
| +
|
| result = true;
|
| } else {
|
| scheduler_.reset();
|
| @@ -185,19 +194,25 @@ void GpuCommandBufferStub::OnInitialize(
|
| void GpuCommandBufferStub::OnSetParent(int32 parent_route_id,
|
| uint32 parent_texture_id,
|
| IPC::Message* reply_message) {
|
| - bool result = false;
|
|
|
| - if (parent_route_id == MSG_ROUTING_NONE) {
|
| - result = scheduler_->SetParent(NULL, 0);
|
| - } else {
|
| - GpuCommandBufferStub* parent_stub = channel_->LookupCommandBuffer(
|
| - parent_route_id);
|
| - if (parent_stub) {
|
| - result = scheduler_->SetParent(parent_stub->scheduler_.get(),
|
| - parent_texture_id);
|
| - }
|
| + GpuCommandBufferStub* parent_stub = NULL;
|
| + if (parent_route_id != MSG_ROUTING_NONE) {
|
| + parent_stub = channel_->LookupCommandBuffer(parent_route_id);
|
| }
|
|
|
| + bool result = true;
|
| + if (scheduler_.get()) {
|
| + gpu::GpuScheduler* parent_scheduler =
|
| + parent_stub ? parent_stub->scheduler_.get() : NULL;
|
| + result = scheduler_->SetParent(parent_scheduler, parent_texture_id);
|
| + } else {
|
| + // If we don't have a scheduler, it means that Initialize hasn't been called
|
| + // yet. Keep around the requested parent stub and texture so that we can set
|
| + // it in Initialize().
|
| + parent_stub_for_initialization_ = parent_stub ?
|
| + parent_stub->AsWeakPtr() : base::WeakPtr<GpuCommandBufferStub>();
|
| + parent_texture_for_initialization_ = parent_texture_id;
|
| + }
|
| GpuCommandBufferMsg_SetParent::WriteReplyParams(reply_message, result);
|
| Send(reply_message);
|
| }
|
|
|