render_widget_compositor.h revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
1// Copyright (c) 2013 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 CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
6#define CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
7
8#include "base/callback.h"
9#include "base/memory/weak_ptr.h"
10#include "base/time/time.h"
11#include "base/values.h"
12#include "cc/debug/rendering_stats.h"
13#include "cc/input/top_controls_state.h"
14#include "cc/trees/layer_tree_host_client.h"
15#include "cc/trees/layer_tree_settings.h"
16#include "third_party/WebKit/public/platform/WebLayerTreeView.h"
17#include "third_party/skia/include/core/SkBitmap.h"
18#include "ui/gfx/rect.h"
19
20namespace ui {
21struct LatencyInfo;
22}
23
24namespace cc {
25class InputHandler;
26class Layer;
27class LayerTreeHost;
28}
29
30namespace content {
31class RenderWidget;
32
33class RenderWidgetCompositor : public WebKit::WebLayerTreeView,
34                               public cc::LayerTreeHostClient {
35 public:
36  // Attempt to construct and initialize a compositor instance for the widget
37  // with the given settings. Returns NULL if initialization fails.
38  static scoped_ptr<RenderWidgetCompositor> Create(RenderWidget* widget,
39                                                   bool threaded);
40
41  virtual ~RenderWidgetCompositor();
42
43  const base::WeakPtr<cc::InputHandler>& GetInputHandler();
44  void SetSuppressScheduleComposite(bool suppress);
45  void Animate(base::TimeTicks time);
46  void Composite(base::TimeTicks frame_begin_time);
47  void SetNeedsDisplayOnAllLayers();
48  void SetRasterizeOnlyVisibleContent();
49  void GetRenderingStats(cc::RenderingStats* stats);
50  void UpdateTopControlsState(cc::TopControlsState constraints,
51                              cc::TopControlsState current,
52                              bool animate);
53  void SetOverdrawBottomHeight(float overdraw_bottom_height);
54  void SetNeedsRedrawRect(gfx::Rect damage_rect);
55  // Like setNeedsRedraw but forces the frame to be drawn, without early-outs.
56  // Redraw will be forced after the next commit
57  void SetNeedsForcedRedraw();
58  void SetLatencyInfo(const ui::LatencyInfo& latency_info);
59  int GetLayerTreeId() const;
60  void NotifyInputThrottledUntilCommit();
61  const cc::Layer* GetRootLayer() const;
62  bool ScheduleMicroBenchmark(
63      const std::string& name,
64      scoped_ptr<base::Value> value,
65      const base::Callback<void(scoped_ptr<base::Value>)>& callback);
66
67  // WebLayerTreeView implementation.
68  virtual void setSurfaceReady();
69  virtual void setRootLayer(const WebKit::WebLayer& layer);
70  virtual void clearRootLayer();
71  virtual void setViewportSize(
72      const WebKit::WebSize& unused_deprecated,
73      const WebKit::WebSize& device_viewport_size);
74  virtual WebKit::WebSize layoutViewportSize() const;
75  virtual WebKit::WebSize deviceViewportSize() const;
76  virtual WebKit::WebFloatPoint adjustEventPointForPinchZoom(
77      const WebKit::WebFloatPoint& point) const;
78  virtual void setDeviceScaleFactor(float device_scale);
79  virtual float deviceScaleFactor() const;
80  virtual void setBackgroundColor(WebKit::WebColor color);
81  virtual void setHasTransparentBackground(bool transparent);
82  virtual void setOverhangBitmap(const SkBitmap& bitmap);
83  virtual void setVisible(bool visible);
84  virtual void setPageScaleFactorAndLimits(float page_scale_factor,
85                                           float minimum,
86                                           float maximum);
87  virtual void startPageScaleAnimation(const WebKit::WebPoint& destination,
88                                       bool use_anchor,
89                                       float new_page_scale,
90                                       double duration_sec);
91  virtual void setNeedsAnimate();
92  virtual void setNeedsRedraw();
93  virtual bool commitRequested() const;
94  virtual void didStopFlinging();
95  virtual bool compositeAndReadback(void *pixels, const WebKit::WebRect& rect);
96  virtual void finishAllRendering();
97  virtual void setDeferCommits(bool defer_commits);
98  virtual void registerForAnimations(WebKit::WebLayer* layer);
99  virtual void registerViewportLayers(
100      const WebKit::WebLayer* pageScaleLayer,
101      const WebKit::WebLayer* innerViewportScrollLayer,
102      const WebKit::WebLayer* outerViewportScrollLayer) OVERRIDE;
103  virtual void clearViewportLayers() OVERRIDE;
104  virtual void renderingStats(WebKit::WebRenderingStats& stats) const {}
105  virtual void setShowFPSCounter(bool show);
106  virtual void setShowPaintRects(bool show);
107  virtual void setShowDebugBorders(bool show);
108  virtual void setContinuousPaintingEnabled(bool enabled);
109  virtual void setShowScrollBottleneckRects(bool show);
110
111  // cc::LayerTreeHostClient implementation.
112  virtual void WillBeginFrame() OVERRIDE;
113  virtual void DidBeginFrame() OVERRIDE;
114  virtual void Animate(double frame_begin_time) OVERRIDE;
115  virtual void Layout() OVERRIDE;
116  virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta,
117                                   float page_scale) OVERRIDE;
118  virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(bool fallback)
119      OVERRIDE;
120  virtual void DidInitializeOutputSurface(bool success) OVERRIDE;
121  virtual void WillCommit() OVERRIDE;
122  virtual void DidCommit() OVERRIDE;
123  virtual void DidCommitAndDrawFrame() OVERRIDE;
124  virtual void DidCompleteSwapBuffers() OVERRIDE;
125  virtual void ScheduleComposite() OVERRIDE;
126  virtual scoped_refptr<cc::ContextProvider>
127      OffscreenContextProvider() OVERRIDE;
128
129 private:
130  RenderWidgetCompositor(RenderWidget* widget, bool threaded);
131
132  bool initialize(cc::LayerTreeSettings settings);
133
134  bool threaded_;
135  bool suppress_schedule_composite_;
136  RenderWidget* widget_;
137  scoped_ptr<cc::LayerTreeHost> layer_tree_host_;
138};
139
140}  // namespace content
141
142#endif  // CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
143