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