blob: 89d0d9cdf6ccd1b9ac21bb538aeac91206ade823 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_GPU_GPU_CLIENT_H_
#define CONTENT_BROWSER_GPU_GPU_CLIENT_H_
#include "base/memory/weak_ptr.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/ui/public/interfaces/gpu.mojom.h"
namespace content {
class GpuClient : public ui::mojom::Gpu {
public:
explicit GpuClient(int render_process_id);
~GpuClient() override;
void Add(ui::mojom::GpuRequest request);
void PreEstablishGpuChannel();
private:
void OnError();
void OnEstablishGpuChannel(mojo::ScopedMessagePipeHandle channel_handle,
const gpu::GPUInfo& gpu_info,
const gpu::GpuFeatureInfo& gpu_feature_info,
GpuProcessHost::EstablishChannelStatus status);
void OnCreateGpuMemoryBuffer(CreateGpuMemoryBufferCallback callback,
const gfx::GpuMemoryBufferHandle& handle);
void ClearCallback();
// ui::mojom::Gpu overrides:
void EstablishGpuChannel(EstablishGpuChannelCallback callback) override;
void CreateJpegDecodeAccelerator(
media::mojom::JpegDecodeAcceleratorRequest jda_request) override;
void CreateVideoEncodeAcceleratorProvider(
media::mojom::VideoEncodeAcceleratorProviderRequest vea_provider_request)
override;
void CreateGpuMemoryBuffer(
gfx::GpuMemoryBufferId id,
const gfx::Size& size,
gfx::BufferFormat format,
gfx::BufferUsage usage,
ui::mojom::Gpu::CreateGpuMemoryBufferCallback callback) override;
void DestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id,
const gpu::SyncToken& sync_token) override;
const int render_process_id_;
mojo::BindingSet<ui::mojom::Gpu> bindings_;
bool gpu_channel_requested_ = false;
EstablishGpuChannelCallback callback_;
mojo::ScopedMessagePipeHandle channel_handle_;
gpu::GPUInfo gpu_info_;
gpu::GpuFeatureInfo gpu_feature_info_;
base::WeakPtrFactory<GpuClient> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(GpuClient);
};
} // namespace content
#endif // CONTENT_BROWSER_GPU_GPU_CLIENT_H_