OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "services/gles2/command_buffer_impl.h" | 5 #include "services/gles2/command_buffer_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "gpu/command_buffer/service/sync_point_manager.h" | 9 #include "gpu/command_buffer/service/sync_point_manager.h" |
10 #include "services/gles2/command_buffer_driver.h" | 10 #include "services/gles2/command_buffer_driver.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 | 21 |
22 class CommandBufferDriverClientImpl : public CommandBufferDriver::Client { | 22 class CommandBufferDriverClientImpl : public CommandBufferDriver::Client { |
23 public: | 23 public: |
24 CommandBufferDriverClientImpl( | 24 CommandBufferDriverClientImpl( |
25 base::WeakPtr<CommandBufferImpl> command_buffer, | 25 base::WeakPtr<CommandBufferImpl> command_buffer, |
26 scoped_refptr<base::SingleThreadTaskRunner> control_task_runner) | 26 scoped_refptr<base::SingleThreadTaskRunner> control_task_runner) |
27 : command_buffer_(command_buffer), | 27 : command_buffer_(command_buffer), |
28 control_task_runner_(control_task_runner) {} | 28 control_task_runner_(control_task_runner) {} |
29 | 29 |
30 private: | 30 private: |
31 void DidDestroy() override { delete this; } | |
32 | |
33 void UpdateVSyncParameters(base::TimeTicks timebase, | 31 void UpdateVSyncParameters(base::TimeTicks timebase, |
34 base::TimeDelta interval) override { | 32 base::TimeDelta interval) override { |
35 control_task_runner_->PostTask( | 33 control_task_runner_->PostTask( |
36 FROM_HERE, base::Bind(&CommandBufferImpl::UpdateVSyncParameters, | 34 FROM_HERE, base::Bind(&CommandBufferImpl::UpdateVSyncParameters, |
37 command_buffer_, timebase, interval)); | 35 command_buffer_, timebase, interval)); |
38 } | 36 } |
39 | 37 |
40 void LostContext(int32_t lost_reason) override { | 38 void DidLoseContext() override { |
41 control_task_runner_->PostTask( | 39 control_task_runner_->PostTask( |
42 FROM_HERE, base::Bind(&CommandBufferImpl::LostContext, command_buffer_, | 40 FROM_HERE, base::Bind(&CommandBufferImpl::DidLoseContext, |
43 lost_reason)); | 41 command_buffer_)); |
44 } | 42 } |
45 | 43 |
46 base::WeakPtr<CommandBufferImpl> command_buffer_; | 44 base::WeakPtr<CommandBufferImpl> command_buffer_; |
47 scoped_refptr<base::SingleThreadTaskRunner> control_task_runner_; | 45 scoped_refptr<base::SingleThreadTaskRunner> control_task_runner_; |
48 }; | 46 }; |
49 } | 47 } |
50 | 48 |
51 CommandBufferImpl::CommandBufferImpl( | 49 CommandBufferImpl::CommandBufferImpl( |
52 mojo::InterfaceRequest<mojo::CommandBuffer> request, | 50 mojo::InterfaceRequest<mojo::CommandBuffer> request, |
53 mojo::ViewportParameterListenerPtr listener, | 51 mojo::ViewportParameterListenerPtr listener, |
54 scoped_refptr<base::SingleThreadTaskRunner> control_task_runner, | 52 scoped_refptr<base::SingleThreadTaskRunner> control_task_runner, |
55 gpu::SyncPointManager* sync_point_manager, | 53 gpu::SyncPointManager* sync_point_manager, |
56 scoped_ptr<CommandBufferDriver> driver) | 54 scoped_ptr<CommandBufferDriver> driver) |
57 : sync_point_manager_(sync_point_manager), | 55 : sync_point_manager_(sync_point_manager), |
58 driver_task_runner_(base::MessageLoop::current()->task_runner()), | 56 driver_task_runner_(base::MessageLoop::current()->task_runner()), |
59 driver_(driver.Pass()), | 57 driver_(driver.Pass()), |
60 viewport_parameter_listener_(listener.Pass()), | 58 viewport_parameter_listener_(listener.Pass()), |
61 binding_(this), | 59 binding_(this), |
62 weak_factory_(this) { | 60 weak_factory_(this) { |
63 driver_->set_client(new CommandBufferDriverClientImpl( | 61 driver_->set_client(make_scoped_ptr(new CommandBufferDriverClientImpl( |
64 weak_factory_.GetWeakPtr(), control_task_runner)); | 62 weak_factory_.GetWeakPtr(), control_task_runner))); |
65 | 63 |
66 control_task_runner->PostTask( | 64 control_task_runner->PostTask( |
67 FROM_HERE, base::Bind(&CommandBufferImpl::BindToRequest, | 65 FROM_HERE, base::Bind(&CommandBufferImpl::BindToRequest, |
68 base::Unretained(this), base::Passed(&request))); | 66 base::Unretained(this), base::Passed(&request))); |
69 } | 67 } |
70 | 68 |
71 CommandBufferImpl::~CommandBufferImpl() { | 69 CommandBufferImpl::~CommandBufferImpl() { |
72 binding_.client()->DidDestroy(); | |
73 driver_task_runner_->PostTask( | 70 driver_task_runner_->PostTask( |
74 FROM_HERE, base::Bind(&DestroyDriver, base::Passed(&driver_))); | 71 FROM_HERE, base::Bind(&DestroyDriver, base::Passed(&driver_))); |
75 } | 72 } |
76 | 73 |
77 void CommandBufferImpl::Initialize( | 74 void CommandBufferImpl::Initialize( |
78 mojo::CommandBufferSyncClientPtr sync_client, | 75 mojo::CommandBufferSyncClientPtr sync_client, |
79 mojo::CommandBufferSyncPointClientPtr sync_point_client, | 76 mojo::CommandBufferSyncPointClientPtr sync_point_client, |
| 77 mojo::CommandBufferLostContextObserverPtr loss_observer, |
80 mojo::ScopedSharedBufferHandle shared_state) { | 78 mojo::ScopedSharedBufferHandle shared_state) { |
81 sync_point_client_ = sync_point_client.Pass(); | 79 sync_point_client_ = sync_point_client.Pass(); |
82 driver_task_runner_->PostTask( | 80 driver_task_runner_->PostTask( |
83 FROM_HERE, | 81 FROM_HERE, |
84 base::Bind(&CommandBufferDriver::Initialize, | 82 base::Bind(&CommandBufferDriver::Initialize, |
85 base::Unretained(driver_.get()), base::Passed(&sync_client), | 83 base::Unretained(driver_.get()), base::Passed(&sync_client), |
| 84 base::Passed(&loss_observer), |
86 base::Passed(&shared_state))); | 85 base::Passed(&shared_state))); |
87 } | 86 } |
88 | 87 |
89 void CommandBufferImpl::SetGetBuffer(int32_t buffer) { | 88 void CommandBufferImpl::SetGetBuffer(int32_t buffer) { |
90 driver_task_runner_->PostTask( | 89 driver_task_runner_->PostTask( |
91 FROM_HERE, base::Bind(&CommandBufferDriver::SetGetBuffer, | 90 FROM_HERE, base::Bind(&CommandBufferDriver::SetGetBuffer, |
92 base::Unretained(driver_.get()), buffer)); | 91 base::Unretained(driver_.get()), buffer)); |
93 } | 92 } |
94 | 93 |
95 void CommandBufferImpl::Flush(int32_t put_offset) { | 94 void CommandBufferImpl::Flush(int32_t put_offset) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 void CommandBufferImpl::Echo(const mojo::Callback<void()>& callback) { | 138 void CommandBufferImpl::Echo(const mojo::Callback<void()>& callback) { |
140 driver_task_runner_->PostTaskAndReply(FROM_HERE, base::Bind(&base::DoNothing), | 139 driver_task_runner_->PostTaskAndReply(FROM_HERE, base::Bind(&base::DoNothing), |
141 base::Bind(&RunCallback, callback)); | 140 base::Bind(&RunCallback, callback)); |
142 } | 141 } |
143 | 142 |
144 void CommandBufferImpl::BindToRequest( | 143 void CommandBufferImpl::BindToRequest( |
145 mojo::InterfaceRequest<mojo::CommandBuffer> request) { | 144 mojo::InterfaceRequest<mojo::CommandBuffer> request) { |
146 binding_.Bind(request.Pass()); | 145 binding_.Bind(request.Pass()); |
147 } | 146 } |
148 | 147 |
149 void CommandBufferImpl::LostContext(int32_t reason) { | 148 void CommandBufferImpl::DidLoseContext() { |
150 binding_.client()->LostContext(reason); | 149 binding_.OnConnectionError(); |
151 } | 150 } |
152 | 151 |
153 void CommandBufferImpl::UpdateVSyncParameters(base::TimeTicks timebase, | 152 void CommandBufferImpl::UpdateVSyncParameters(base::TimeTicks timebase, |
154 base::TimeDelta interval) { | 153 base::TimeDelta interval) { |
155 if (!viewport_parameter_listener_) | 154 if (!viewport_parameter_listener_) |
156 return; | 155 return; |
157 viewport_parameter_listener_->OnVSyncParametersUpdated( | 156 viewport_parameter_listener_->OnVSyncParametersUpdated( |
158 timebase.ToInternalValue(), interval.ToInternalValue()); | 157 timebase.ToInternalValue(), interval.ToInternalValue()); |
159 } | 158 } |
160 | 159 |
161 } // namespace gles2 | 160 } // namespace gles2 |
OLD | NEW |