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