// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_RENDERER_ANDROID_SYNCHRONOUS_COMPOSITOR_FACTORY_H_ #define CONTENT_RENDERER_ANDROID_SYNCHRONOUS_COMPOSITOR_FACTORY_H_ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "gpu/config/gpu_info.h" #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" namespace base { class SingleThreadTaskRunner; } namespace cc { class BeginFrameSource; class ContextProvider; class OutputSurface; } namespace cc_blink { class ContextProviderWebContext; } namespace gpu_blink { class WebGraphicsContext3DInProcessCommandBufferImpl; } namespace content { class InputHandlerManagerClient; class SynchronousInputHandlerProxyClient; class StreamTextureFactory; class FrameSwapMessageQueue; // Decouples creation from usage of the parts needed for the synchonous // compositor rendering path. In practice this is only used in single // process mode (namely, for Android WebView) hence the implementation of // this will be injected from the logical 'browser' side code. class SynchronousCompositorFactory { public: // Must only be called once, e.g. on startup. Ownership of |instance| remains // with the caller. static void SetInstance(SynchronousCompositorFactory* instance); static SynchronousCompositorFactory* GetInstance(); virtual scoped_refptr<base::SingleThreadTaskRunner> GetCompositorTaskRunner() = 0; virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface( int routing_id, uint32_t output_surface_id, const scoped_refptr<FrameSwapMessageQueue>& frame_swap_message_queue, const scoped_refptr<cc::ContextProvider>& onscreen_context, const scoped_refptr<cc::ContextProvider>& worker_context) = 0; // The factory maintains ownership of the returned interface. virtual InputHandlerManagerClient* GetInputHandlerManagerClient() = 0; virtual SynchronousInputHandlerProxyClient* GetSynchronousInputHandlerProxyClient() = 0; virtual scoped_ptr<cc::BeginFrameSource> CreateExternalBeginFrameSource( int routing_id) = 0; protected: SynchronousCompositorFactory() {} virtual ~SynchronousCompositorFactory() {} }; } // namespace content #endif // CONTENT_RENDERER_ANDROID_SYNCHRONOUS_COMPOSITOR_FACTORY_H_