#ifndef ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_
#define ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_
-#include <queue>
-
+#include "android_webview/browser/parent_compositor_draw_constraints.h"
#include "android_webview/browser/shared_renderer_state.h"
-#include "base/lazy_instance.h"
-#include "base/memory/ref_counted.h"
-#include "base/threading/thread_local.h"
+#include "base/memory/scoped_ptr.h"
+#include "cc/layers/delegated_frame_resource_collection.h"
+#include "cc/trees/layer_tree_host_client.h"
+#include "cc/trees/layer_tree_host_single_thread_client.h"
struct AwDrawGLInfo;
+namespace cc {
+class DelegatedFrameProvider;
+class DelegatedRendererLayer;
+class Layer;
+class LayerTreeHost;
+}
+
namespace android_webview {
class AwGLSurface;
-class BrowserViewRendererClient;
-
-namespace internal {
-class DeferredGpuCommandService;
-} // namespace internal
+class ParentOutputSurface;
-class HardwareRenderer {
+class HardwareRenderer : public cc::LayerTreeHostClient,
+ public cc::LayerTreeHostSingleThreadClient,
+ public cc::DelegatedFrameResourceCollectionClient {
public:
explicit HardwareRenderer(SharedRendererState* state);
- ~HardwareRenderer();
+ virtual ~HardwareRenderer();
- bool DrawGL(bool stencil_enabled,
+ void DrawGL(bool stencil_enabled,
int framebuffer_binding_ext,
- AwDrawGLInfo* draw_info,
- DrawGLResult* result);
+ AwDrawGLInfo* draw_info);
+ void CommitFrame();
+
+ // cc::LayerTreeHostClient overrides.
+ virtual void WillBeginMainFrame(int frame_id) override {}
+ virtual void DidBeginMainFrame() override;
+ virtual void BeginMainFrame(const cc::BeginFrameArgs& args) override {}
+ virtual void Layout() override {}
+ virtual void ApplyViewportDeltas(const gfx::Vector2d& inner_delta,
+ const gfx::Vector2d& outer_delta,
+ float page_scale,
+ float top_controls_delta) override {}
+ virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
+ float page_scale,
+ float top_controls_delta) override {}
+ virtual void RequestNewOutputSurface(bool fallback) override;
+ virtual void DidInitializeOutputSurface() override {}
+ virtual void WillCommit() override {}
+ virtual void DidCommit() override {}
+ virtual void DidCommitAndDrawFrame() override {}
+ virtual void DidCompleteSwapBuffers() override {}
+
+ // cc::LayerTreeHostSingleThreadClient overrides.
+ virtual void DidPostSwapBuffers() override {}
+ virtual void DidAbortSwapBuffers() override {}
+
+ // cc::DelegatedFrameResourceCollectionClient overrides.
+ virtual void UnusedResourcesAreAvailable() override;
private:
- friend class internal::DeferredGpuCommandService;
-
- void SetCompositorMemoryPolicy();
+ void SetFrameData();
SharedRendererState* shared_renderer_state_;
typedef void* EGLContext;
EGLContext last_egl_context_;
+ scoped_ptr<cc::CompositorFrame> committed_frame_;
+
+ // Information about last delegated frame.
+ gfx::Size frame_size_;
+
+ // Infromation from UI on last commit.
+ gfx::Vector2d scroll_offset_;
+
+ // Information from draw.
+ gfx::Size viewport_;
+ gfx::Rect clip_;
+ bool stencil_enabled_;
+ bool viewport_clip_valid_for_dcheck_;
+
scoped_refptr<AwGLSurface> gl_surface_;
+ scoped_ptr<cc::LayerTreeHost> layer_tree_host_;
+ scoped_refptr<cc::Layer> root_layer_;
+
+ scoped_refptr<cc::DelegatedFrameResourceCollection> resource_collection_;
+ scoped_refptr<cc::DelegatedFrameProvider> frame_provider_;
+ scoped_refptr<cc::DelegatedRendererLayer> delegated_layer_;
+
+ // This is owned indirectly by |layer_tree_host_|.
+ ParentOutputSurface* output_surface_;
+
+ ParentCompositorDrawConstraints draw_constraints_;
+
DISALLOW_COPY_AND_ASSIGN(HardwareRenderer);
};