Home | History | Annotate | Download | only in browser
      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 ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_
      6 #define ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_
      7 
      8 #include "android_webview/browser/parent_compositor_draw_constraints.h"
      9 #include "android_webview/browser/shared_renderer_state.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "cc/layers/delegated_frame_resource_collection.h"
     12 #include "cc/trees/layer_tree_host_client.h"
     13 #include "cc/trees/layer_tree_host_single_thread_client.h"
     14 
     15 struct AwDrawGLInfo;
     16 
     17 namespace cc {
     18 class DelegatedFrameProvider;
     19 class DelegatedRendererLayer;
     20 class Layer;
     21 class LayerTreeHost;
     22 }
     23 
     24 namespace android_webview {
     25 
     26 class AwGLSurface;
     27 class ParentOutputSurface;
     28 
     29 class HardwareRenderer : public cc::LayerTreeHostClient,
     30                          public cc::LayerTreeHostSingleThreadClient,
     31                          public cc::DelegatedFrameResourceCollectionClient {
     32  public:
     33   explicit HardwareRenderer(SharedRendererState* state);
     34   virtual ~HardwareRenderer();
     35 
     36   void DrawGL(bool stencil_enabled,
     37               int framebuffer_binding_ext,
     38               AwDrawGLInfo* draw_info);
     39   void CommitFrame();
     40 
     41   // cc::LayerTreeHostClient overrides.
     42   virtual void WillBeginMainFrame(int frame_id) OVERRIDE {}
     43   virtual void DidBeginMainFrame() OVERRIDE;
     44   virtual void BeginMainFrame(const cc::BeginFrameArgs& args) OVERRIDE {}
     45   virtual void Layout() OVERRIDE {}
     46   virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta,
     47                                    float page_scale,
     48                                    float top_controls_delta) OVERRIDE {}
     49   virtual void RequestNewOutputSurface(bool fallback) OVERRIDE;
     50   virtual void DidInitializeOutputSurface() OVERRIDE {}
     51   virtual void WillCommit() OVERRIDE {}
     52   virtual void DidCommit() OVERRIDE {}
     53   virtual void DidCommitAndDrawFrame() OVERRIDE {}
     54   virtual void DidCompleteSwapBuffers() OVERRIDE {}
     55 
     56   // cc::LayerTreeHostSingleThreadClient overrides.
     57   virtual void DidPostSwapBuffers() OVERRIDE {}
     58   virtual void DidAbortSwapBuffers() OVERRIDE {}
     59 
     60   // cc::DelegatedFrameResourceCollectionClient overrides.
     61   virtual void UnusedResourcesAreAvailable() OVERRIDE;
     62 
     63  private:
     64   void SetFrameData();
     65 
     66   SharedRendererState* shared_renderer_state_;
     67 
     68   typedef void* EGLContext;
     69   EGLContext last_egl_context_;
     70 
     71   scoped_ptr<cc::CompositorFrame> committed_frame_;
     72 
     73   // Information about last delegated frame.
     74   gfx::Size frame_size_;
     75 
     76   // Infromation from UI on last commit.
     77   gfx::Vector2d scroll_offset_;
     78   int width_;
     79   int height_;
     80 
     81   // Information from draw.
     82   gfx::Size viewport_;
     83   gfx::Rect clip_;
     84   bool stencil_enabled_;
     85   bool viewport_clip_valid_for_dcheck_;
     86 
     87   scoped_refptr<AwGLSurface> gl_surface_;
     88 
     89   scoped_ptr<cc::LayerTreeHost> layer_tree_host_;
     90   scoped_refptr<cc::Layer> root_layer_;
     91 
     92   scoped_refptr<cc::DelegatedFrameResourceCollection> resource_collection_;
     93   scoped_refptr<cc::DelegatedFrameProvider> frame_provider_;
     94   scoped_refptr<cc::DelegatedRendererLayer> delegated_layer_;
     95 
     96   // This is owned indirectly by |layer_tree_host_|.
     97   ParentOutputSurface* output_surface_;
     98 
     99   ParentCompositorDrawConstraints draw_constraints_;
    100 
    101   DISALLOW_COPY_AND_ASSIGN(HardwareRenderer);
    102 };
    103 
    104 }  // namespace android_webview
    105 
    106 #endif  // ANDROID_WEBVIEW_BROWSER_HARDWARE_RENDERER_H_
    107