| Index: components/mus/common/gpu_service.h
|
| diff --git a/components/mus/common/gpu_service.h b/components/mus/common/gpu_service.h
|
| index 1ecb979161bc12963fa4d5902c1a0e115259d9a5..a3d5cd106f6dba04aab40856024b7f1693a54765 100644
|
| --- a/components/mus/common/gpu_service.h
|
| +++ b/components/mus/common/gpu_service.h
|
| @@ -14,7 +14,9 @@
|
| #include "base/synchronization/lock.h"
|
| #include "base/synchronization/waitable_event.h"
|
| #include "base/threading/thread.h"
|
| +#include "components/mus/common/mojo_gpu_memory_buffer_manager.h"
|
| #include "components/mus/common/mus_common_export.h"
|
| +#include "components/mus/public/interfaces/gpu_service.mojom.h"
|
| #include "gpu/ipc/client/gpu_channel_host.h"
|
|
|
| namespace shell {
|
| @@ -23,22 +25,39 @@ class Connector;
|
|
|
| namespace mus {
|
|
|
| -class MojoGpuMemoryBufferManager;
|
| -
|
| class MUS_COMMON_EXPORT GpuService : public gpu::GpuChannelHostFactory {
|
| public:
|
| - scoped_refptr<gpu::GpuChannelHost> EstablishGpuChannel(
|
| - shell::Connector* connector);
|
| + void EstablishGpuChannel(const base::Closure& callback);
|
| + scoped_refptr<gpu::GpuChannelHost> EstablishGpuChannelSync();
|
| + scoped_refptr<gpu::GpuChannelHost> GetGpuChannel();
|
| + gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager() const {
|
| + return gpu_memory_buffer_manager_.get();
|
| + }
|
|
|
| static bool UseChromeGpuCommandBuffer();
|
| +
|
| + // The GpuService has to be initialized in the main thread before establishing
|
| + // the gpu channel.
|
| + static void Initialize(shell::Connector* connector);
|
| + // The GpuService has to be terminated in the main thread.
|
| + static void Terminate();
|
| static GpuService* GetInstance();
|
|
|
| private:
|
| friend struct base::DefaultSingletonTraits<GpuService>;
|
|
|
| - GpuService();
|
| + explicit GpuService(shell::Connector* connector);
|
| ~GpuService() override;
|
|
|
| + scoped_refptr<gpu::GpuChannelHost> GetGpuChannelLocked();
|
| + void EstablishGpuChannelOnMainThread();
|
| + void EstablishGpuChannelOnMainThreadSyncLocked();
|
| + void EstablishGpuChannelOnMainThreadDone(
|
| + bool locked,
|
| + int client_id,
|
| + mojom::ChannelHandlePtr channel_handle,
|
| + mojom::GpuInfoPtr gpu_info);
|
| +
|
| // gpu::GpuChannelHostFactory overrides:
|
| bool IsMainThread() override;
|
| scoped_refptr<base::SingleThreadTaskRunner> GetIOThreadTaskRunner() override;
|
| @@ -46,13 +65,18 @@ class MUS_COMMON_EXPORT GpuService : public gpu::GpuChannelHostFactory {
|
| size_t size) override;
|
|
|
| scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
|
| + shell::Connector* connector_;
|
| base::WaitableEvent shutdown_event_;
|
| base::Thread io_thread_;
|
| std::unique_ptr<MojoGpuMemoryBufferManager> gpu_memory_buffer_manager_;
|
|
|
| - // Lock for |gpu_channel_|.
|
| + // Lock for |gpu_channel_|, |establish_callbacks_| & |is_establishing_|.
|
| base::Lock lock_;
|
| + bool is_establishing_;
|
| + mus::mojom::GpuServicePtr gpu_service_;
|
| scoped_refptr<gpu::GpuChannelHost> gpu_channel_;
|
| + std::vector<base::Closure> establish_callbacks_;
|
| + base::ConditionVariable establishing_condition_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(GpuService);
|
| };
|
|
|