1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_ 6 #define MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/timer/timer.h" 10 #include "mojo/public/cpp/system/core.h" 11 #include "mojo/services/gles2/command_buffer.mojom.h" 12 #include "ui/gfx/native_widget_types.h" 13 #include "ui/gfx/size.h" 14 15 namespace gpu { 16 class CommandBufferService; 17 class GpuScheduler; 18 class GpuControlService; 19 namespace gles2 { 20 class GLES2Decoder; 21 } 22 } 23 24 namespace mojo { 25 namespace services { 26 27 class CommandBufferImpl : public InterfaceImpl<CommandBuffer> { 28 public: 29 CommandBufferImpl(gfx::AcceleratedWidget widget, 30 const gfx::Size& size); 31 virtual ~CommandBufferImpl(); 32 33 virtual void OnConnectionError() OVERRIDE; 34 virtual void Initialize(CommandBufferSyncClientPtr sync_client, 35 mojo::ScopedSharedBufferHandle shared_state) OVERRIDE; 36 virtual void SetGetBuffer(int32_t buffer) OVERRIDE; 37 virtual void Flush(int32_t put_offset) OVERRIDE; 38 virtual void MakeProgress(int32_t last_get_offset) OVERRIDE; 39 virtual void RegisterTransferBuffer( 40 int32_t id, 41 mojo::ScopedSharedBufferHandle transfer_buffer, 42 uint32_t size) OVERRIDE; 43 virtual void DestroyTransferBuffer(int32_t id) OVERRIDE; 44 virtual void Echo(const Callback<void()>& callback) OVERRIDE; 45 46 virtual void RequestAnimationFrames() OVERRIDE; 47 virtual void CancelAnimationFrames() OVERRIDE; 48 49 private: 50 bool DoInitialize(mojo::ScopedSharedBufferHandle shared_state); 51 52 void OnParseError(); 53 54 void DrawAnimationFrame(); 55 56 CommandBufferSyncClientPtr sync_client_; 57 58 gfx::AcceleratedWidget widget_; 59 gfx::Size size_; 60 scoped_ptr<gpu::CommandBufferService> command_buffer_; 61 scoped_ptr<gpu::gles2::GLES2Decoder> decoder_; 62 scoped_ptr<gpu::GpuScheduler> scheduler_; 63 scoped_ptr<gpu::GpuControlService> gpu_control_; 64 base::RepeatingTimer<CommandBufferImpl> timer_; 65 66 DISALLOW_COPY_AND_ASSIGN(CommandBufferImpl); 67 }; 68 69 } // namespace services 70 } // namespace mojo 71 72 #endif // MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_ 73