1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_ 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "android_webview/browser/parent_compositor_draw_constraints.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "android_webview/browser/shared_renderer_state.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/layers/delegated_frame_resource_collection.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/trees/layer_tree_host_client.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/trees/layer_tree_host_single_thread_client.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)struct AwDrawGLInfo; 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace cc { 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DelegatedFrameProvider; 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DelegatedRendererLayer; 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Layer; 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class LayerTreeHost; 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace android_webview { 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class AwGLSurface; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ParentOutputSurface; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class HardwareRenderer : public cc::LayerTreeHostClient, 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public cc::LayerTreeHostSingleThreadClient, 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public cc::DelegatedFrameResourceCollectionClient { 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) explicit HardwareRenderer(SharedRendererState* state); 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~HardwareRenderer(); 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void DrawGL(bool stencil_enabled, 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int framebuffer_binding_ext, 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AwDrawGLInfo* draw_info); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void CommitFrame(); 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // cc::LayerTreeHostClient overrides. 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void WillBeginMainFrame(int frame_id) OVERRIDE {} 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidBeginMainFrame() OVERRIDE; 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void BeginMainFrame(const cc::BeginFrameArgs& args) OVERRIDE {} 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void Layout() OVERRIDE {} 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float page_scale, 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float top_controls_delta) OVERRIDE {} 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void RequestNewOutputSurface(bool fallback) OVERRIDE; 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidInitializeOutputSurface() OVERRIDE {} 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void WillCommit() OVERRIDE {} 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidCommit() OVERRIDE {} 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidCommitAndDrawFrame() OVERRIDE {} 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidCompleteSwapBuffers() OVERRIDE {} 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // cc::LayerTreeHostSingleThreadClient overrides. 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidPostSwapBuffers() OVERRIDE {} 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidAbortSwapBuffers() OVERRIDE {} 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // cc::DelegatedFrameResourceCollectionClient overrides. 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void UnusedResourcesAreAvailable() OVERRIDE; 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetFrameData(); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SharedRendererState* shared_renderer_state_; 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef void* EGLContext; 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EGLContext last_egl_context_; 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) scoped_ptr<cc::CompositorFrame> committed_frame_; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Information about last delegated frame. 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Size frame_size_; 7534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 7634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // Infromation from UI on last commit. 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Vector2d scroll_offset_; 7834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) int width_; 7934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) int height_; 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Information from draw. 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Size viewport_; 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Rect clip_; 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool stencil_enabled_; 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool viewport_clip_valid_for_dcheck_; 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_refptr<AwGLSurface> gl_surface_; 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<cc::LayerTreeHost> layer_tree_host_; 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<cc::Layer> root_layer_; 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<cc::DelegatedFrameResourceCollection> resource_collection_; 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<cc::DelegatedFrameProvider> frame_provider_; 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_refptr<cc::DelegatedRendererLayer> delegated_layer_; 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // This is owned indirectly by |layer_tree_host_|. 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ParentOutputSurface* output_surface_; 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ParentCompositorDrawConstraints draw_constraints_; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HardwareRenderer); 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace android_webview 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_ 107