1// Copyright 2014 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_CC_CONTEXT_PROVIDER_MOJO_H_
6#define MOJO_CC_CONTEXT_PROVIDER_MOJO_H_
7
8#include "cc/output/context_provider.h"
9#include "mojo/public/c/gles2/gles2.h"
10#include "mojo/public/cpp/system/core.h"
11
12namespace mojo {
13
14class ContextProviderMojo : public cc::ContextProvider {
15 public:
16  explicit ContextProviderMojo(ScopedMessagePipeHandle command_buffer_handle);
17
18  // cc::ContextProvider implementation.
19  virtual bool BindToCurrentThread() OVERRIDE;
20  virtual gpu::gles2::GLES2Interface* ContextGL() OVERRIDE;
21  virtual gpu::ContextSupport* ContextSupport() OVERRIDE;
22  virtual class GrContext* GrContext() OVERRIDE;
23  virtual Capabilities ContextCapabilities() OVERRIDE;
24  virtual bool IsContextLost() OVERRIDE;
25  virtual void VerifyContexts() OVERRIDE {}
26  virtual void DeleteCachedResources() OVERRIDE {}
27  virtual bool DestroyedOnMainThread() OVERRIDE;
28  virtual void SetLostContextCallback(
29      const LostContextCallback& lost_context_callback) OVERRIDE {}
30  virtual void SetMemoryPolicyChangedCallback(
31      const MemoryPolicyChangedCallback& memory_policy_changed_callback)
32      OVERRIDE {}
33
34 protected:
35  friend class base::RefCountedThreadSafe<ContextProviderMojo>;
36  virtual ~ContextProviderMojo();
37
38 private:
39  static void ContextLostThunk(void* closure) {
40    static_cast<ContextProviderMojo*>(closure)->ContextLost();
41  }
42  void ContextLost();
43
44  cc::ContextProvider::Capabilities capabilities_;
45  ScopedMessagePipeHandle command_buffer_handle_;
46  MojoGLES2Context context_;
47  bool context_lost_;
48
49  DISALLOW_COPY_AND_ASSIGN(ContextProviderMojo);
50};
51
52}  // namespace mojo
53
54#endif  // MOJO_CC_CONTEXT_PROVIDER_MOJO_H_
55