15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/timer/timer.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "mojo/public/cpp/system/core.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "mojo/services/gles2/command_buffer.mojom.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/size.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gpu {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CommandBufferService;
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GpuScheduler;
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GpuControlService;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gles2 {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GLES2Decoder;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace mojo {
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace services {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
270de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)class CommandBufferImpl : public InterfaceImpl<CommandBuffer> {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
290de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  CommandBufferImpl(gfx::AcceleratedWidget widget,
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const gfx::Size& size);
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~CommandBufferImpl();
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
330de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  virtual void OnConnectionError() OVERRIDE;
340de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  virtual void Initialize(CommandBufferSyncClientPtr sync_client,
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                          mojo::ScopedSharedBufferHandle shared_state) OVERRIDE;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetGetBuffer(int32_t buffer) OVERRIDE;
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void Flush(int32_t put_offset) OVERRIDE;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void MakeProgress(int32_t last_get_offset) OVERRIDE;
39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void RegisterTransferBuffer(
40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      int32_t id,
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      mojo::ScopedSharedBufferHandle transfer_buffer,
42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      uint32_t size) OVERRIDE;
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DestroyTransferBuffer(int32_t id) OVERRIDE;
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void Echo(const Callback<void()>& callback) OVERRIDE;
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void RequestAnimationFrames() OVERRIDE;
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void CancelAnimationFrames() OVERRIDE;
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bool DoInitialize(mojo::ScopedSharedBufferHandle shared_state);
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnParseError();
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void DrawAnimationFrame();
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
560de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)  CommandBufferSyncClientPtr sync_client_;
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::AcceleratedWidget widget_;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Size size_;
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<gpu::CommandBufferService> command_buffer_;
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<gpu::gles2::GLES2Decoder> decoder_;
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<gpu::GpuScheduler> scheduler_;
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<gpu::GpuControlService> gpu_control_;
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::RepeatingTimer<CommandBufferImpl> timer_;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CommandBufferImpl);
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace services
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace mojo
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_
73