| Index: services/ui/common/gpu_service.cc
|
| diff --git a/services/ui/common/gpu_service.cc b/services/ui/common/gpu_service.cc
|
| index f8bf9e79e0939d11ced35b5e1313616fe85c0011..f8535d77976bc54b4de0f9e4fbc9650fea8c3a6e 100644
|
| --- a/services/ui/common/gpu_service.cc
|
| +++ b/services/ui/common/gpu_service.cc
|
| @@ -22,8 +22,10 @@ namespace {
|
|
|
| void PostTask(scoped_refptr<base::SingleThreadTaskRunner> runner,
|
| const tracked_objects::Location& from_here,
|
| - const base::Closure& callback) {
|
| - runner->PostTask(from_here, callback);
|
| + const gpu::GpuChannelEstablishedCallback& callback,
|
| + scoped_refptr<gpu::GpuChannelHost> established_channel_host) {
|
| + runner->PostTask(from_here,
|
| + base::Bind(callback, std::move(established_channel_host)));
|
| }
|
|
|
| GpuService* g_gpu_service = nullptr;
|
| @@ -55,11 +57,13 @@ GpuService::~GpuService() {
|
| void GpuService::Initialize(shell::Connector* connector) {
|
| DCHECK(!g_gpu_service);
|
| g_gpu_service = new GpuService(connector);
|
| + gpu::GpuChannelEstablishFactory::SetInstance(g_gpu_service);
|
| }
|
|
|
| // static
|
| void GpuService::Terminate() {
|
| DCHECK(g_gpu_service);
|
| + gpu::GpuChannelEstablishFactory::SetInstance(nullptr);
|
| delete g_gpu_service;
|
| g_gpu_service = nullptr;
|
| }
|
| @@ -70,11 +74,13 @@ GpuService* GpuService::GetInstance() {
|
| return g_gpu_service;
|
| }
|
|
|
| -void GpuService::EstablishGpuChannel(const base::Closure& callback) {
|
| +void GpuService::EstablishGpuChannel(
|
| + const gpu::GpuChannelEstablishedCallback& callback) {
|
| base::AutoLock auto_lock(lock_);
|
| auto runner = base::ThreadTaskRunnerHandle::Get();
|
| - if (GetGpuChannelLocked()) {
|
| - runner->PostTask(FROM_HERE, callback);
|
| + scoped_refptr<gpu::GpuChannelHost> channel = GetGpuChannelLocked();
|
| + if (channel) {
|
| + PostTask(runner, FROM_HERE, callback, std::move(channel));
|
| return;
|
| }
|
| establish_callbacks_.push_back(
|
| @@ -112,11 +118,6 @@ scoped_refptr<gpu::GpuChannelHost> GpuService::EstablishGpuChannelSync() {
|
| return gpu_channel_;
|
| }
|
|
|
| -scoped_refptr<gpu::GpuChannelHost> GpuService::GetGpuChannel() {
|
| - base::AutoLock auto_lock(lock_);
|
| - return GetGpuChannelLocked();
|
| -}
|
| -
|
| scoped_refptr<gpu::GpuChannelHost> GpuService::GetGpuChannelLocked() {
|
| if (gpu_channel_ && gpu_channel_->IsLost()) {
|
| main_task_runner_->PostTask(
|
| @@ -206,7 +207,7 @@ void GpuService::EstablishGpuChannelOnMainThreadDone(
|
| gpu_service_.reset();
|
|
|
| for (const auto& i : establish_callbacks_)
|
| - i.Run();
|
| + i.Run(gpu_channel_);
|
| establish_callbacks_.clear();
|
| }
|
|
|
|
|