diff options
Diffstat (limited to 'mojo/services/gles2/command_buffer_driver.h')
-rw-r--r-- | mojo/services/gles2/command_buffer_driver.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/mojo/services/gles2/command_buffer_driver.h b/mojo/services/gles2/command_buffer_driver.h new file mode 100644 index 0000000..5006567 --- /dev/null +++ b/mojo/services/gles2/command_buffer_driver.h @@ -0,0 +1,103 @@ +// Copyright 2013 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 SERVICES_GLES2_COMMAND_BUFFER_DRIVER_H_ +#define SERVICES_GLES2_COMMAND_BUFFER_DRIVER_H_ + +#include "base/callback.h" +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "base/single_thread_task_runner.h" +#include "base/timer/timer.h" +#include "third_party/mojo_services/src/gpu/public/interfaces/command_buffer.mojom.h" +#include "ui/gfx/geometry/size.h" +#include "ui/gfx/native_widget_types.h" + +namespace gpu { +class CommandBufferService; +class GpuScheduler; +class GpuControlService; +class SyncPointManager; +namespace gles2 { +class GLES2Decoder; +class MailboxManager; +} +} + +namespace gfx { +class GLContext; +class GLShareGroup; +class GLSurface; +} + +namespace gles2 { + +class CommandBufferDriver { + public: + class Client { + public: + virtual ~Client(); + virtual void UpdateVSyncParameters(base::TimeTicks timebase, + base::TimeDelta interval) = 0; + virtual void DidLoseContext() = 0; + }; + // Offscreen. + CommandBufferDriver(gfx::GLShareGroup* share_group, + gpu::gles2::MailboxManager* mailbox_manager, + gpu::SyncPointManager* sync_point_manager); + // Onscreen. + CommandBufferDriver(gfx::AcceleratedWidget widget, + gfx::GLShareGroup* share_group, + gpu::gles2::MailboxManager* mailbox_manager, + gpu::SyncPointManager* sync_point_manager); + ~CommandBufferDriver(); + + void set_client(scoped_ptr<Client> client) { client_ = client.Pass(); } + + void Initialize(mojo::CommandBufferSyncClientPtr sync_client, + mojo::CommandBufferLostContextObserverPtr loss_observer, + mojo::ScopedSharedBufferHandle shared_state); + void SetGetBuffer(int32_t buffer); + void Flush(int32_t put_offset); + void MakeProgress(int32_t last_get_offset); + void RegisterTransferBuffer(int32_t id, + mojo::ScopedSharedBufferHandle transfer_buffer, + uint32_t size); + void DestroyTransferBuffer(int32_t id); + void Echo(const mojo::Callback<void()>& callback); + + private: + bool DoInitialize(mojo::ScopedSharedBufferHandle shared_state); + void OnResize(gfx::Size size, float scale_factor); + bool OnWaitSyncPoint(uint32_t sync_point); + void OnSyncPointRetired(); + void OnParseError(); + void OnContextLost(uint32_t reason); + void OnUpdateVSyncParameters(const base::TimeTicks timebase, + const base::TimeDelta interval); + + scoped_ptr<Client> client_; + mojo::CommandBufferSyncClientPtr sync_client_; + mojo::CommandBufferLostContextObserverPtr loss_observer_; + gfx::AcceleratedWidget widget_; + scoped_ptr<gpu::CommandBufferService> command_buffer_; + scoped_ptr<gpu::gles2::GLES2Decoder> decoder_; + scoped_ptr<gpu::GpuScheduler> scheduler_; + scoped_refptr<gfx::GLContext> context_; + scoped_refptr<gfx::GLSurface> surface_; + scoped_refptr<gfx::GLShareGroup> share_group_; + scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager_; + scoped_refptr<gpu::SyncPointManager> sync_point_manager_; + + scoped_refptr<base::SingleThreadTaskRunner> context_lost_task_runner_; + base::Callback<void(int32_t)> context_lost_callback_; + + base::WeakPtrFactory<CommandBufferDriver> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(CommandBufferDriver); +}; + +} // namespace gles2 + +#endif // SERVICES_GLES2_COMMAND_BUFFER_DRIVER_H_ |