diff options
author | Zeno Albisser <zeno.albisser@theqtcompany.com> | 2014-12-05 15:04:29 +0100 |
---|---|---|
committer | Andras Becsi <andras.becsi@theqtcompany.com> | 2014-12-09 10:49:28 +0100 |
commit | af6588f8d723931a298c995fa97259bb7f7deb55 (patch) | |
tree | 060ca707847ba1735f01af2372e0d5e494dc0366 /chromium/cc/trees/layer_tree_host_impl.h | |
parent | 2fff84d821cc7b1c785f6404e0f8091333283e74 (diff) | |
download | qtwebengine-chromium-af6588f8d723931a298c995fa97259bb7f7deb55.tar.gz |
BASELINE: Update chromium to 40.0.2214.28 and ninja to 1.5.3.
Change-Id: I759465284fd64d59ad120219cbe257f7402c4181
Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
Diffstat (limited to 'chromium/cc/trees/layer_tree_host_impl.h')
-rw-r--r-- | chromium/cc/trees/layer_tree_host_impl.h | 249 |
1 files changed, 138 insertions, 111 deletions
diff --git a/chromium/cc/trees/layer_tree_host_impl.h b/chromium/cc/trees/layer_tree_host_impl.h index fe9afc219e6..2309ef77d5f 100644 --- a/chromium/cc/trees/layer_tree_host_impl.h +++ b/chromium/cc/trees/layer_tree_host_impl.h @@ -31,16 +31,18 @@ #include "cc/quads/render_pass.h" #include "cc/resources/resource_provider.h" #include "cc/resources/tile_manager.h" +#include "cc/scheduler/begin_frame_source.h" #include "cc/scheduler/draw_result.h" #include "skia/ext/refptr.h" #include "third_party/skia/include/core/SkColor.h" -#include "ui/gfx/rect.h" +#include "ui/gfx/geometry/rect.h" namespace cc { class CompletionEvent; class CompositorFrameMetadata; class DebugRectHistory; +class EvictionTilePriorityQueue; class FrameRateCounter; class LayerImpl; class LayerTreeHostImplTimeSourceAdapter; @@ -49,6 +51,7 @@ class MemoryHistory; class PageScaleAnimation; class PaintTimeCounter; class PictureLayerImpl; +class RasterTilePriorityQueue; class RasterWorkerPool; class RenderPassDrawQuad; class RenderingStatsInstrumentation; @@ -71,7 +74,6 @@ class LayerTreeHostImplClient { virtual void SetMaxSwapsPendingOnImplThread(int max) = 0; virtual void DidSwapBuffersOnImplThread() = 0; virtual void DidSwapBuffersCompleteOnImplThread() = 0; - virtual void BeginFrame(const BeginFrameArgs& args) = 0; virtual void OnCanDrawStateChanged(bool can_draw) = 0; virtual void NotifyReadyToActivate() = 0; // Please call these 3 functions through @@ -94,7 +96,7 @@ class LayerTreeHostImplClient { virtual void PostDelayedScrollbarFadeOnImplThread( const base::Closure& start_fade, base::TimeDelta delay) = 0; - virtual void DidActivatePendingTree() = 0; + virtual void DidActivateSyncTree() = 0; virtual void DidManageTiles() = 0; protected: @@ -110,6 +112,7 @@ class CC_EXPORT LayerTreeHostImpl public OutputSurfaceClient, public TopControlsManagerClient, public ScrollbarAnimationControllerClient, + public BeginFrameSourceMixIn, public base::SupportsWeakPtr<LayerTreeHostImpl> { public: static scoped_ptr<LayerTreeHostImpl> Create( @@ -117,50 +120,54 @@ class CC_EXPORT LayerTreeHostImpl LayerTreeHostImplClient* client, Proxy* proxy, RenderingStatsInstrumentation* rendering_stats_instrumentation, - SharedBitmapManager* manager, + SharedBitmapManager* shared_bitmap_manager, + gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, int id); - virtual ~LayerTreeHostImpl(); + ~LayerTreeHostImpl() override; + + // BeginFrameSourceMixIn implementation + void OnNeedsBeginFramesChange(bool needs_begin_frames) override; // InputHandler implementation - virtual void BindToClient(InputHandlerClient* client) OVERRIDE; - virtual InputHandler::ScrollStatus ScrollBegin( + void BindToClient(InputHandlerClient* client) override; + InputHandler::ScrollStatus ScrollBegin( + const gfx::Point& viewport_point, + InputHandler::ScrollInputType type) override; + InputHandler::ScrollStatus ScrollAnimated( const gfx::Point& viewport_point, - InputHandler::ScrollInputType type) OVERRIDE; - virtual bool ScrollBy(const gfx::Point& viewport_point, - const gfx::Vector2dF& scroll_delta) OVERRIDE; - virtual bool ScrollVerticallyByPage(const gfx::Point& viewport_point, - ScrollDirection direction) OVERRIDE; - virtual void SetRootLayerScrollOffsetDelegate( - LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) OVERRIDE; - virtual void OnRootLayerDelegatedScrollOffsetChanged() OVERRIDE; - virtual void ScrollEnd() OVERRIDE; - virtual InputHandler::ScrollStatus FlingScrollBegin() OVERRIDE; - virtual void MouseMoveAt(const gfx::Point& viewport_point) OVERRIDE; - virtual void PinchGestureBegin() OVERRIDE; - virtual void PinchGestureUpdate(float magnify_delta, - const gfx::Point& anchor) OVERRIDE; - virtual void PinchGestureEnd() OVERRIDE; - virtual void StartPageScaleAnimation(const gfx::Vector2d& target_offset, - bool anchor_point, - float page_scale, - base::TimeDelta duration) OVERRIDE; - virtual void SetNeedsAnimate() OVERRIDE; - virtual bool IsCurrentlyScrollingLayerAt( + const gfx::Vector2dF& scroll_delta) override; + InputHandlerScrollResult ScrollBy( const gfx::Point& viewport_point, - InputHandler::ScrollInputType type) OVERRIDE; - virtual bool HaveTouchEventHandlersAt( - const gfx::Point& viewport_port) OVERRIDE; - virtual scoped_ptr<SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor( - ui::LatencyInfo* latency) OVERRIDE; + const gfx::Vector2dF& scroll_delta) override; + bool ScrollVerticallyByPage(const gfx::Point& viewport_point, + ScrollDirection direction) override; + void SetRootLayerScrollOffsetDelegate( + LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) override; + void OnRootLayerDelegatedScrollOffsetChanged() override; + void ScrollEnd() override; + InputHandler::ScrollStatus FlingScrollBegin() override; + void MouseMoveAt(const gfx::Point& viewport_point) override; + void PinchGestureBegin() override; + void PinchGestureUpdate(float magnify_delta, + const gfx::Point& anchor) override; + void PinchGestureEnd() override; + void SetNeedsAnimate() override; + bool IsCurrentlyScrollingLayerAt(const gfx::Point& viewport_point, + InputHandler::ScrollInputType type) override; + bool HaveTouchEventHandlersAt(const gfx::Point& viewport_port) override; + scoped_ptr<SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor( + ui::LatencyInfo* latency) override; // TopControlsManagerClient implementation. - virtual void DidChangeTopControlsPosition() OVERRIDE; - virtual bool HaveRootScrollLayer() const OVERRIDE; + void SetControlsTopOffset(float offset) override; + float ControlsTopOffset() const override; + void DidChangeTopControlsPosition() override; + bool HaveRootScrollLayer() const override; struct CC_EXPORT FrameData : public RenderPassSink { FrameData(); - virtual ~FrameData(); - scoped_ptr<base::Value> AsValue() const; + ~FrameData() override; + void AsValueInto(base::debug::TracedValue* value) const; std::vector<gfx::Rect> occluding_screen_space_rects; std::vector<gfx::Rect> non_occluding_screen_space_rects; @@ -172,7 +179,7 @@ class CC_EXPORT LayerTreeHostImpl bool has_no_damage; // RenderPassSink implementation. - virtual void AppendRenderPass(scoped_ptr<RenderPass> render_pass) OVERRIDE; + void AppendRenderPass(scoped_ptr<RenderPass> render_pass) override; }; virtual void BeginMainFrameAborted(bool did_handle); @@ -213,53 +220,53 @@ class CC_EXPORT LayerTreeHostImpl // Resets all of the trees to an empty state. void ResetTreesForTesting(); - bool device_viewport_valid_for_tile_management() const { - return device_viewport_valid_for_tile_management_; - } + DrawMode GetDrawMode() const; // Viewport size in draw space: this size is in physical pixels and is used // for draw properties, tilings, quads and render passes. gfx::Size DrawViewportSize() const; - // Viewport size for scrolling and fixed-position compensation. This value - // excludes the URL bar and non-overlay scrollbars and is in DIP (and - // invariant relative to page scale). - gfx::SizeF UnscaledScrollableViewportSize() const; - float VerticalAdjust() const; + // Viewport rect in view space used for tiling prioritization. + const gfx::Rect ViewportRectForTilePriority() const; // RendererClient implementation. - virtual void SetFullRootLayerDamage() OVERRIDE; - virtual void RunOnDemandRasterTask(Task* on_demand_raster_task) OVERRIDE; + void SetFullRootLayerDamage() override; // TileManagerClient implementation. - virtual const std::vector<PictureLayerImpl*>& GetPictureLayers() OVERRIDE; - virtual void NotifyReadyToActivate() OVERRIDE; - virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE; + const std::vector<PictureLayerImpl*>& GetPictureLayers() const override; + void NotifyReadyToActivate() override; + void NotifyTileStateChanged(const Tile* tile) override; + void BuildRasterQueue(RasterTilePriorityQueue* queue, + TreePriority tree_priority) override; + void BuildEvictionQueue(EvictionTilePriorityQueue* queue, + TreePriority tree_priority) override; // ScrollbarAnimationControllerClient implementation. - virtual void PostDelayedScrollbarFade(const base::Closure& start_fade, - base::TimeDelta delay) OVERRIDE; - virtual void SetNeedsScrollbarAnimationFrame() OVERRIDE; + void PostDelayedScrollbarFade(const base::Closure& start_fade, + base::TimeDelta delay) override; + void SetNeedsScrollbarAnimationFrame() override; // OutputSurfaceClient implementation. - virtual void DeferredInitialize() OVERRIDE; - virtual void ReleaseGL() OVERRIDE; - virtual void CommitVSyncParameters(base::TimeTicks timebase, - base::TimeDelta interval) OVERRIDE; - virtual void SetNeedsRedrawRect(const gfx::Rect& rect) OVERRIDE; - virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE; - virtual void SetExternalDrawConstraints( + void DeferredInitialize() override; + void ReleaseGL() override; + void CommitVSyncParameters(base::TimeTicks timebase, + base::TimeDelta interval) override; + void SetNeedsRedrawRect(const gfx::Rect& rect) override; + void BeginFrame(const BeginFrameArgs& args) override; + + void SetExternalDrawConstraints( const gfx::Transform& transform, const gfx::Rect& viewport, const gfx::Rect& clip, - bool valid_for_tile_management) OVERRIDE; - virtual void DidLoseOutputSurface() OVERRIDE; - virtual void DidSwapBuffers() OVERRIDE; - virtual void DidSwapBuffersComplete() OVERRIDE; - virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE; - virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE; - virtual void SetTreeActivationCallback(const base::Closure& callback) - OVERRIDE; + const gfx::Rect& viewport_rect_for_tile_priority, + const gfx::Transform& transform_for_tile_priority, + bool resourceless_software_draw) override; + void DidLoseOutputSurface() override; + void DidSwapBuffers() override; + void DidSwapBuffersComplete() override; + void ReclaimResources(const CompositorFrameAck* ack) override; + void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override; + void SetTreeActivationCallback(const base::Closure& callback) override; // Called from LayerTreeImpl. void OnCanDrawStateChangedForTree(); @@ -275,7 +282,6 @@ class CC_EXPORT LayerTreeHostImpl int SourceAnimationFrameNumber() const; virtual bool InitializeRenderer(scoped_ptr<OutputSurface> output_surface); - bool IsContextLost(); TileManager* tile_manager() { return tile_manager_.get(); } void SetUseGpuRasterization(bool use_gpu); bool use_gpu_rasterization() const { return use_gpu_rasterization_; } @@ -287,7 +293,6 @@ class CC_EXPORT LayerTreeHostImpl const RendererCapabilitiesImpl& GetRendererCapabilities() const; virtual bool SwapBuffers(const FrameData& frame); - void SetNeedsBeginFrame(bool enable); virtual void WillBeginImplFrame(const BeginFrameArgs& args); void DidModifyTilePriorities(); @@ -295,17 +300,15 @@ class CC_EXPORT LayerTreeHostImpl const LayerTreeImpl* active_tree() const { return active_tree_.get(); } LayerTreeImpl* pending_tree() { return pending_tree_.get(); } const LayerTreeImpl* pending_tree() const { return pending_tree_.get(); } + LayerTreeImpl* recycle_tree() { return recycle_tree_.get(); } const LayerTreeImpl* recycle_tree() const { return recycle_tree_.get(); } // Returns the tree LTH synchronizes with. LayerTreeImpl* sync_tree() { - // In impl-side painting, synchronize to the pending tree so that it has - // time to raster before being displayed. - return settings_.impl_side_painting ? pending_tree_.get() - : active_tree_.get(); + return pending_tree_ ? pending_tree_.get() : active_tree_.get(); } virtual void CreatePendingTree(); virtual void UpdateVisibleTiles(); - virtual void ActivatePendingTree(); + virtual void ActivateSyncTree(); // Shortcuts to layers on the active tree. LayerImpl* RootLayer() const; @@ -319,8 +322,10 @@ class CC_EXPORT LayerTreeHostImpl bool scroll_affects_scroll_handler() const { return scroll_affects_scroll_handler_; } + void QueueSwapPromiseForMainThreadScrollUpdate( + scoped_ptr<SwapPromise> swap_promise); - bool IsCurrentlyScrolling() const; + bool IsActivelyScrolling() const; virtual void SetVisible(bool visible); bool visible() const { return visible_; } @@ -336,9 +341,6 @@ class CC_EXPORT LayerTreeHostImpl void SetViewportSize(const gfx::Size& device_viewport_size); gfx::Size device_viewport_size() const { return device_viewport_size_; } - void SetOverdrawBottomHeight(float overdraw_bottom_height); - float overdraw_bottom_height() const { return overdraw_bottom_height_; } - void SetOverhangUIResource(UIResourceId overhang_ui_resource_id, const gfx::Size& overhang_ui_resource_size); @@ -412,19 +414,26 @@ class CC_EXPORT LayerTreeHostImpl bool pinch_gesture_active() const { return pinch_gesture_active_; } void SetTreePriority(TreePriority priority); + TreePriority GetTreePriority() const; - void UpdateCurrentFrameTime(); - void ResetCurrentFrameTimeForNextFrame(); - virtual base::TimeTicks CurrentFrameTimeTicks(); + void UpdateCurrentBeginFrameArgs(const BeginFrameArgs& args); + void ResetCurrentBeginFrameArgsForNextFrame(); + virtual BeginFrameArgs CurrentBeginFrameArgs() const; // Expected time between two begin impl frame calls. base::TimeDelta begin_impl_frame_interval() const { return begin_impl_frame_interval_; } - scoped_ptr<base::Value> AsValue() const { return AsValueWithFrame(NULL); } - scoped_ptr<base::Value> AsValueWithFrame(FrameData* frame) const; - scoped_ptr<base::Value> ActivationStateAsValue() const; + void AsValueInto(base::debug::TracedValue* value) const override; + void AsValueWithFrameInto(FrameData* frame, + base::debug::TracedValue* value) const; + scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const; + scoped_refptr<base::debug::ConvertableToTraceFormat> AsValueWithFrame( + FrameData* frame) const; + scoped_refptr<base::debug::ConvertableToTraceFormat> ActivationStateAsValue() + const; + void ActivationStateAsValueInto(base::debug::TracedValue* value) const; bool page_scale_animation_active() const { return !!page_scale_animation_; } @@ -465,22 +474,39 @@ class CC_EXPORT LayerTreeHostImpl void RegisterPictureLayerImpl(PictureLayerImpl* layer); void UnregisterPictureLayerImpl(PictureLayerImpl* layer); + void GetPictureLayerImplPairs( + std::vector<PictureLayerImpl::Pair>* layers) const; + + void SetTopControlsLayoutHeight(float height); + + void SetRequiresHighResToDraw() { requires_high_res_to_draw_ = true; } + void ResetRequiresHighResToDraw() { requires_high_res_to_draw_ = false; } + bool RequiresHighResToDraw() const { return requires_high_res_to_draw_; } + + // Only valid for synchronous (non-scheduled) single-threaded case. + void SynchronouslyInitializeAllTiles(); + + bool CanUseZeroCopyRasterizer() const; + bool CanUseOneCopyRasterizer() const; + virtual void CreateResourceAndRasterWorkerPool( + scoped_ptr<RasterWorkerPool>* raster_worker_pool, + scoped_ptr<ResourcePool>* resource_pool, + scoped_ptr<ResourcePool>* staging_resource_pool); + protected: LayerTreeHostImpl( const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy, RenderingStatsInstrumentation* rendering_stats_instrumentation, - SharedBitmapManager* manager, + SharedBitmapManager* shared_bitmap_manager, + gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, int id); - gfx::SizeF ComputeInnerViewportContainerSize() const; - void UpdateInnerViewportContainerSize(); + void UpdateViewportContainerSizes(); // Virtual for testing. virtual void AnimateLayers(base::TimeTicks monotonic_time); - - // Virtual for testing. virtual base::TimeDelta LowFrequencyAnimationInterval() const; const AnimationRegistrar::AnimationControllerMap& @@ -500,14 +526,21 @@ class CC_EXPORT LayerTreeHostImpl void ReleaseTreeResources(); void EnforceZeroBudget(bool zero_budget); - bool UseZeroCopyTextureUpload() const; - bool UseOneCopyTextureUpload() const; + bool UsePendingTreeForSync() const; + bool IsSynchronousSingleThreaded() const; + // Scroll by preferring to move the outer viewport first, only moving the + // inner if the outer is at its scroll extents. void ScrollViewportBy(gfx::Vector2dF scroll_delta); + // Scroll by preferring to move the inner viewport first, only moving the + // outer if the inner is at its scroll extents. + void ScrollViewportInnerFirst(gfx::Vector2dF scroll_delta); void AnimatePageScale(base::TimeTicks monotonic_time); void AnimateScrollbars(base::TimeTicks monotonic_time); void AnimateTopControls(base::TimeTicks monotonic_time); + bool ShouldTopControlsConsumeScroll(const gfx::Vector2dF& scroll_delta) const; + gfx::Vector2dF ScrollLayerWithViewportSpaceDelta( LayerImpl* layer_impl, float scale_from_viewport_to_screen_space, @@ -551,6 +584,7 @@ class CC_EXPORT LayerTreeHostImpl void MarkUIResourceNotEvicted(UIResourceId uid); void NotifySwapPromiseMonitorsOfSetNeedsRedraw(); + void NotifySwapPromiseMonitorsOfForwardingToMainThread(); typedef base::hash_map<UIResourceId, UIResourceData> UIResourceMap; @@ -562,7 +596,6 @@ class CC_EXPORT LayerTreeHostImpl std::set<UIResourceId> evicted_ui_resources_; scoped_ptr<OutputSurface> output_surface_; - scoped_refptr<ContextProvider> offscreen_context_provider_; // |resource_provider_| and |tile_manager_| can be NULL, e.g. when using tile- // free rendering - see OutputSurface::ForcedDrawToSoftwareDevice(). @@ -574,10 +607,6 @@ class CC_EXPORT LayerTreeHostImpl scoped_ptr<ResourcePool> staging_resource_pool_; scoped_ptr<Renderer> renderer_; - TaskGraphRunner synchronous_task_graph_runner_; - TaskGraphRunner* on_demand_task_graph_runner_; - NamespaceToken on_demand_task_namespace_; - GlobalStateThatImpactsTilePriority global_tile_state_; // Tree currently being drawn. @@ -597,6 +626,7 @@ class CC_EXPORT LayerTreeHostImpl bool wheel_scrolling_; bool scroll_affects_scroll_handler_; int scroll_layer_id_when_mouse_over_scrollbar_; + ScopedPtrVector<SwapPromise> swap_promises_for_main_thread_scroll_update_; bool tile_priorities_dirty_; @@ -647,25 +677,22 @@ class CC_EXPORT LayerTreeHostImpl UIResourceId overhang_ui_resource_id_; gfx::Size overhang_ui_resource_size_; - // Vertical amount of the viewport size that's known to covered by a - // browser-side UI element, such as an on-screen-keyboard. This affects - // scrollable size since we want to still be able to scroll to the bottom of - // the page when the keyboard is up. - float overdraw_bottom_height_; - // Optional top-level constraints that can be set by the OutputSurface. // - external_transform_ applies a transform above the root layer // - external_viewport_ is used DrawProperties, tile management and // glViewport/window projection matrix. // - external_clip_ specifies a top-level clip rect + // - viewport_rect_for_tile_priority_ is the rect in view space used for + // tiling priority. gfx::Transform external_transform_; gfx::Rect external_viewport_; gfx::Rect external_clip_; - bool device_viewport_valid_for_tile_management_; + gfx::Rect viewport_rect_for_tile_priority_; + bool resourceless_software_draw_; gfx::Rect viewport_damage_rect_; - base::TimeTicks current_frame_timeticks_; + BeginFrameArgs current_begin_frame_args_; // Expected time between two begin impl frame calls. base::TimeDelta begin_impl_frame_interval_; @@ -674,23 +701,23 @@ class CC_EXPORT LayerTreeHostImpl RenderingStatsInstrumentation* rendering_stats_instrumentation_; MicroBenchmarkControllerImpl micro_benchmark_controller_; + scoped_ptr<TaskGraphRunner> single_thread_synchronous_task_graph_runner_; bool need_to_update_visible_tiles_before_draw_; -#if DCHECK_IS_ON - bool did_lose_called_; -#endif // Optional callback to notify of new tree activations. base::Closure tree_activation_callback_; SharedBitmapManager* shared_bitmap_manager_; + gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager_; int id_; std::set<SwapPromiseMonitor*> swap_promise_monitor_; - size_t transfer_buffer_memory_limit_; - std::vector<PictureLayerImpl*> picture_layers_; + std::vector<PictureLayerImpl::Pair> picture_layer_pairs_; + + bool requires_high_res_to_draw_; DISALLOW_COPY_AND_ASSIGN(LayerTreeHostImpl); }; |