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 15namespace gpu { 16class CommandBufferService; 17class GpuScheduler; 18class GpuControlService; 19namespace gles2 { 20class GLES2Decoder; 21} 22} 23 24namespace mojo { 25namespace services { 26 27class 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