Index: components/view_manager/surfaces/surfaces_context_provider.h |
diff --git a/components/view_manager/surfaces/surfaces_context_provider.h b/components/view_manager/surfaces/surfaces_context_provider.h |
index b891c7b8b0785153403c56ffbb2b9a8e71006482..95b739f954c986b5f44453fa45b471bdfbfa110a 100644 |
--- a/components/view_manager/surfaces/surfaces_context_provider.h |
+++ b/components/view_manager/surfaces/surfaces_context_provider.h |
@@ -7,16 +7,34 @@ |
#include "base/macros.h" |
#include "base/synchronization/lock.h" |
+#include "base/threading/non_thread_safe.h" |
#include "cc/output/context_provider.h" |
+#include "components/view_manager/gles2/command_buffer_local.h" |
+#include "components/view_manager/gles2/command_buffer_local_client.h" |
+#include "components/view_manager/gles2/gpu_state.h" |
+#include "gpu/command_buffer/client/gles2_cmd_helper.h" |
+#include "gpu/command_buffer/client/gles2_implementation.h" |
+#include "gpu/command_buffer/client/transfer_buffer.h" |
#include "third_party/mojo/src/mojo/public/c/gles2/gles2.h" |
#include "third_party/mojo/src/mojo/public/cpp/system/core.h" |
+#include "ui/gfx/native_widget_types.h" |
+ |
+namespace gles2 { |
+class CommandBufferDriver; |
+class CommandBufferImpl; |
+} |
namespace surfaces { |
-class SurfacesContextProvider : public cc::ContextProvider { |
+class SurfacesContextProviderDelegate; |
+ |
+class SurfacesContextProvider : public cc::ContextProvider, |
+ public gles2::CommandBufferLocalClient, |
+ public base::NonThreadSafe { |
public: |
- explicit SurfacesContextProvider( |
- mojo::ScopedMessagePipeHandle command_buffer_handle); |
+ SurfacesContextProvider(SurfacesContextProviderDelegate* delegate, |
+ gfx::AcceleratedWidget widget, |
+ const scoped_refptr<gles2::GpuState>& state); |
// cc::ContextProvider implementation. |
bool BindToCurrentThread() override; |
@@ -41,16 +59,24 @@ class SurfacesContextProvider : public cc::ContextProvider { |
~SurfacesContextProvider() override; |
private: |
- static void ContextLostThunk(void* closure) { |
- static_cast<SurfacesContextProvider*>(closure)->ContextLost(); |
- } |
- void ContextLost(); |
+ // CommandBufferLocalClient: |
+ void UpdateVSyncParameters(int64_t timebase, int64_t interval) override; |
+ void DidLoseContext() override; |
+ |
+ // From GLES2Context: |
+ // Initialized in BindToCurrentThread. |
+ scoped_ptr<gpu::gles2::GLES2CmdHelper> gles2_helper_; |
+ scoped_ptr<gpu::TransferBuffer> transfer_buffer_; |
+ scoped_ptr<gpu::gles2::GLES2Implementation> implementation_; |
cc::ContextProvider::Capabilities capabilities_; |
- mojo::ScopedMessagePipeHandle command_buffer_handle_; |
- MojoGLES2Context context_; |
LostContextCallback lost_context_callback_; |
+ SurfacesContextProviderDelegate* delegate_; |
+ scoped_refptr<gles2::GpuState> state_; |
+ gfx::AcceleratedWidget widget_; |
+ scoped_ptr<gles2::CommandBufferLocal> command_buffer_local_; |
+ |
base::Lock context_lock_; |
DISALLOW_COPY_AND_ASSIGN(SurfacesContextProvider); |