render_widget_compositor.h revision 868fa2fe829687343ffae624259930155e16dbd8
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Copyright (c) 2013 The Chromium Authors. All rights reserved.
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Use of this source code is governed by a BSD-style license that can be
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// found in the LICENSE file.
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt#ifndef CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt#define CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "base/memory/weak_ptr.h"
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "base/time.h"
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "cc/debug/rendering_stats.h"
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "cc/input/top_controls_state.h"
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "cc/trees/layer_tree_host_client.h"
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "cc/trees/layer_tree_settings.h"
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "skia/ext/refptr.h"
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "third_party/WebKit/public/platform/WebLayerTreeView.h"
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "ui/gfx/rect.h"
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass SkPicture;
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace ui {
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct LatencyInfo;
221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace cc {
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass InputHandler;
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass LayerTreeHost;
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace content {
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass RenderWidget;
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass RenderWidgetCompositor : public WebKit::WebLayerTreeView,
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                               public cc::LayerTreeHostClient {
341f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt public:
351f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  // Attempt to construct and initialize a compositor instance for the widget
361f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  // with the given settings. Returns NULL if initialization fails.
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  static scoped_ptr<RenderWidgetCompositor> Create(RenderWidget* widget);
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ~RenderWidgetCompositor();
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  const base::WeakPtr<cc::InputHandler>& GetInputHandler();
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void SetSuppressScheduleComposite(bool suppress);
43886c3ff164ee2c0e281f4b1f31ce2b00f045f9deDmitry Shmidt  void Animate(base::TimeTicks time);
44886c3ff164ee2c0e281f4b1f31ce2b00f045f9deDmitry Shmidt  void Composite(base::TimeTicks frame_begin_time);
45886c3ff164ee2c0e281f4b1f31ce2b00f045f9deDmitry Shmidt  void SetNeedsDisplayOnAllLayers();
46886c3ff164ee2c0e281f4b1f31ce2b00f045f9deDmitry Shmidt  void SetRasterizeOnlyVisibleContent();
47886c3ff164ee2c0e281f4b1f31ce2b00f045f9deDmitry Shmidt  void GetRenderingStats(cc::RenderingStats* stats);
482b7fea278e437f1fe13970a1e65ca51149223d96Dmitry Shmidt  skia::RefPtr<SkPicture> CapturePicture();
49886c3ff164ee2c0e281f4b1f31ce2b00f045f9deDmitry Shmidt  void UpdateTopControlsState(cc::TopControlsState constraints,
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                              cc::TopControlsState current,
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                              bool animate);
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void SetOverdrawBottomHeight(float overdraw_bottom_height);
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void SetNeedsRedrawRect(gfx::Rect damage_rect);
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void SetLatencyInfo(const ui::LatencyInfo& latency_info);
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // WebLayerTreeView implementation.
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setSurfaceReady();
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setRootLayer(const WebKit::WebLayer& layer);
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void clearRootLayer();
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setViewportSize(
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const WebKit::WebSize& unused_deprecated,
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const WebKit::WebSize& device_viewport_size);
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual WebKit::WebSize layoutViewportSize() const;
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual WebKit::WebSize deviceViewportSize() const;
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual WebKit::WebFloatPoint adjustEventPointForPinchZoom(
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const WebKit::WebFloatPoint& point) const;
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setDeviceScaleFactor(float device_scale);
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual float deviceScaleFactor() const;
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setBackgroundColor(WebKit::WebColor color);
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setHasTransparentBackground(bool transparent);
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setVisible(bool visible);
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setPageScaleFactorAndLimits(float page_scale_factor,
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                                           float minimum,
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                                           float maximum);
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void startPageScaleAnimation(const WebKit::WebPoint& destination,
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                                       bool use_anchor,
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                                       float new_page_scale,
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                                       double duration_sec);
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setNeedsAnimate();
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setNeedsRedraw();
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual bool commitRequested() const;
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void didStopFlinging();
838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual bool compositeAndReadback(void *pixels, const WebKit::WebRect& rect);
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void finishAllRendering();
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setDeferCommits(bool defer_commits);
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void registerForAnimations(WebKit::WebLayer* layer);
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void renderingStats(WebKit::WebRenderingStats& stats) const {}
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setShowFPSCounter(bool show);
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setShowPaintRects(bool show);
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setShowDebugBorders(bool show);
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void setContinuousPaintingEnabled(bool enabled);
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // cc::LayerTreeHostClient implementation.
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void WillBeginFrame() OVERRIDE;
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void DidBeginFrame() OVERRIDE;
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void Animate(double frame_begin_time) OVERRIDE;
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void Layout() OVERRIDE;
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void ApplyScrollAndScale(gfx::Vector2d scroll_delta,
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                                   float page_scale) OVERRIDE;
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE;
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void DidInitializeOutputSurface(bool success) OVERRIDE;
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void WillCommit() OVERRIDE;
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void DidCommit() OVERRIDE;
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void DidCommitAndDrawFrame() OVERRIDE;
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void DidCompleteSwapBuffers() OVERRIDE;
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void ScheduleComposite() OVERRIDE;
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual scoped_refptr<cc::ContextProvider>
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      OffscreenContextProviderForMainThread() OVERRIDE;
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual scoped_refptr<cc::ContextProvider>
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      OffscreenContextProviderForCompositorThread() OVERRIDE;
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt private:
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  explicit RenderWidgetCompositor(RenderWidget* widget);
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  bool initialize(cc::LayerTreeSettings settings);
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  bool threaded_;
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  bool suppress_schedule_composite_;
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  RenderWidget* widget_;
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  scoped_ptr<cc::LayerTreeHost> layer_tree_host_;
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}  // namespace content
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif  // CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt