12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_TREES_LAYER_TREE_HOST_IMPL_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_TREES_LAYER_TREE_HOST_IMPL_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include <list>
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <set>
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string>
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector>
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/containers/hash_tables.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation_events.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation_registrar.h"
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "cc/animation/scrollbar_animation_controller.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h"
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "cc/debug/micro_benchmark_controller_impl.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/input/input_handler.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/input/layer_scroll_offset_delegate.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/input/top_controls_manager_client.h"
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_lists.h"
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/render_pass_sink.h"
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "cc/output/begin_frame_args.h"
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/output/managed_memory_policy.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/output/output_surface_client.h"
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/output/renderer.h"
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass.h"
32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "cc/resources/resource_provider.h"
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/tile_manager.h"
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/scheduler/draw_result.h"
35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "skia/ext/refptr.h"
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CompletionEvent;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CompositorFrameMetadata;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DebugRectHistory;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class EvictionTilePriorityQueue;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FrameRateCounter;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerImpl;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHostImplTimeSourceAdapter;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeImpl;
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass MemoryHistory;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PageScaleAnimation;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PaintTimeCounter;
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class PictureLayerImpl;
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class RasterTilePriorityQueue;
54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass RasterWorkerPool;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RenderPassDrawQuad;
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass RenderingStatsInstrumentation;
57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass ResourcePool;
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class ScrollbarLayerImplBase;
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class TextureMailboxDeleter;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TopControlsManager;
61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class UIResourceBitmap;
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class UIResourceRequest;
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct RendererCapabilitiesImpl;
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// LayerTreeHost->Proxy callback interface.
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHostImplClient {
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void UpdateRendererCapabilitiesOnImplThread() = 0;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidLoseOutputSurfaceOnImplThread() = 0;
705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void CommitVSyncParameters(base::TimeTicks timebase,
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                     base::TimeDelta interval) = 0;
725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void SetEstimatedParentDrawTime(base::TimeDelta draw_time) = 0;
730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void SetMaxSwapsPendingOnImplThread(int max) = 0;
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void DidSwapBuffersOnImplThread() = 0;
750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void DidSwapBuffersCompleteOnImplThread() = 0;
76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual void BeginFrame(const BeginFrameArgs& args) = 0;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnCanDrawStateChanged(bool can_draw) = 0;
78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void NotifyReadyToActivate() = 0;
795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Please call these 3 functions through
805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // LayerTreeHostImpl's SetNeedsRedraw(), SetNeedsRedrawRect() and
815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // SetNeedsAnimate().
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetNeedsRedrawOnImplThread() = 0;
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) = 0;
845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void SetNeedsAnimateOnImplThread() = 0;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidInitializeVisibleTileOnImplThread() = 0;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetNeedsCommitOnImplThread() = 0;
87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void SetNeedsManageTilesOnImplThread() = 0;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PostAnimationEventsToMainThreadOnImplThread(
89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<AnimationEventsVector> events) = 0;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if resources were deleted by this call.
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ReduceContentsTextureMemoryOnImplThread(
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      size_t limit_bytes,
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int priority_cutoff) = 0;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsInsideDraw() = 0;
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void RenewTreePriority() = 0;
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void PostDelayedScrollbarFadeOnImplThread(
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const base::Closure& start_fade,
98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      base::TimeDelta delay) = 0;
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void DidActivateSyncTree() = 0;
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void DidManageTiles() = 0;
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~LayerTreeHostImplClient() {}
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// LayerTreeHostImpl owns the LayerImpl trees as well as associated rendering
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// state.
10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class CC_EXPORT LayerTreeHostImpl
10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : public InputHandler,
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      public RendererClient,
11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      public TileManagerClient,
11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      public OutputSurfaceClient,
11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      public TopControlsManagerClient,
114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      public ScrollbarAnimationControllerClient,
11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      public base::SupportsWeakPtr<LayerTreeHostImpl> {
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  static scoped_ptr<LayerTreeHostImpl> Create(
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const LayerTreeSettings& settings,
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      LayerTreeHostImplClient* client,
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Proxy* proxy,
1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      RenderingStatsInstrumentation* rendering_stats_instrumentation,
122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SharedBitmapManager* manager,
123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      int id);
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~LayerTreeHostImpl();
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // InputHandler implementation
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void BindToClient(InputHandlerClient* client) OVERRIDE;
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual InputHandler::ScrollStatus ScrollBegin(
129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const gfx::Point& viewport_point,
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      InputHandler::ScrollInputType type) OVERRIDE;
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual InputHandler::ScrollStatus ScrollAnimated(
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const gfx::Point& viewport_point,
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const gfx::Vector2dF& scroll_delta) OVERRIDE;
134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool ScrollBy(const gfx::Point& viewport_point,
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        const gfx::Vector2dF& scroll_delta) OVERRIDE;
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool ScrollVerticallyByPage(const gfx::Point& viewport_point,
13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                                      ScrollDirection direction) OVERRIDE;
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetRootLayerScrollOffsetDelegate(
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate) OVERRIDE;
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnRootLayerDelegatedScrollOffsetChanged() OVERRIDE;
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ScrollEnd() OVERRIDE;
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual InputHandler::ScrollStatus FlingScrollBegin() OVERRIDE;
143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void MouseMoveAt(const gfx::Point& viewport_point) OVERRIDE;
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PinchGestureBegin() OVERRIDE;
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PinchGestureUpdate(float magnify_delta,
146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                  const gfx::Point& anchor) OVERRIDE;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PinchGestureEnd() OVERRIDE;
1485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void SetNeedsAnimate() OVERRIDE;
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool IsCurrentlyScrollingLayerAt(
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const gfx::Point& viewport_point,
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      InputHandler::ScrollInputType type) OVERRIDE;
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual bool HaveTouchEventHandlersAt(
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const gfx::Point& viewport_port) OVERRIDE;
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual scoped_ptr<SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor(
155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      ui::LatencyInfo* latency) OVERRIDE;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TopControlsManagerClient implementation.
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetControlsTopOffset(float offset) OVERRIDE;
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual float ControlsTopOffset() const OVERRIDE;
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void DidChangeTopControlsPosition() OVERRIDE;
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool HaveRootScrollLayer() const OVERRIDE;
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  struct CC_EXPORT FrameData : public RenderPassSink {
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FrameData();
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    virtual ~FrameData();
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    void AsValueInto(base::debug::TracedValue* value) const;
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::vector<gfx::Rect> occluding_screen_space_rects;
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::vector<gfx::Rect> non_occluding_screen_space_rects;
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RenderPassList render_passes;
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RenderPassIdHashMap render_passes_by_id;
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const LayerImplList* render_surface_layer_list;
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LayerImplList will_draw_layers;
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool contains_incomplete_tile;
175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    bool has_no_damage;
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // RenderPassSink implementation.
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void AppendRenderPass(scoped_ptr<RenderPass> render_pass) OVERRIDE;
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void BeginMainFrameAborted(bool did_handle);
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void BeginCommit();
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void CommitComplete();
184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void Animate(base::TimeTicks monotonic_time);
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void UpdateAnimationState(bool start_ready_animations);
1865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void ActivateAnimations();
18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void MainThreadHasStoppedFlinging();
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void UpdateBackgroundAnimateTicking(bool should_background_tick);
189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void DidAnimateScrollOffset();
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetViewportDamage(const gfx::Rect& damage_rect);
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void ManageTiles();
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Returns DRAW_SUCCESS unless problems occured preparing the frame, and we
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // should try to avoid displaying the frame. If PrepareToDraw is called,
196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // DidDrawAllLayers must also be called, regardless of whether DrawLayers is
197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // called between the two.
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual DrawResult PrepareToDraw(FrameData* frame);
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void DrawLayers(FrameData* frame, base::TimeTicks frame_begin_time);
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Must be called if and only if PrepareToDraw was called.
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidDrawAllLayers(const FrameData& frame);
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerTreeSettings& settings() const { return settings_; }
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Evict all textures by enforcing a memory policy with an allocation of 0.
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void EvictTexturesForTesting();
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // When blocking, this prevents client_->NotifyReadyToActivate() from being
209424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // called. When disabled, it calls client_->NotifyReadyToActivate()
210424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // immediately if any notifications had been blocked while blocking.
211424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void BlockNotifyReadyToActivateForTesting(bool block);
212424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
21368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // This allows us to inject DidInitializeVisibleTile events for testing.
21468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void DidInitializeVisibleTileForTesting();
21568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Resets all of the trees to an empty state.
217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void ResetTreesForTesting();
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void ResetRecycleTreeForTesting();
219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DrawMode GetDrawMode() const;
22158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
22258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Viewport size in draw space: this size is in physical pixels and is used
22358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // for draw properties, tilings, quads and render passes.
22458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  gfx::Size DrawViewportSize() const;
22558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Viewport rect in view space used for tiling prioritization.
2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const gfx::Rect ViewportRectForTilePriority() const;
2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // RendererClient implementation.
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetFullRootLayerDamage() OVERRIDE;
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TileManagerClient implementation.
2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual const std::vector<PictureLayerImpl*>& GetPictureLayers()
2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const OVERRIDE;
2357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void NotifyReadyToActivate() OVERRIDE;
236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE;
2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void BuildRasterQueue(RasterTilePriorityQueue* queue,
2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                TreePriority tree_priority) OVERRIDE;
2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void BuildEvictionQueue(EvictionTilePriorityQueue* queue,
2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                  TreePriority tree_priority) OVERRIDE;
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // ScrollbarAnimationControllerClient implementation.
243010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void PostDelayedScrollbarFade(const base::Closure& start_fade,
244010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                        base::TimeDelta delay) OVERRIDE;
245010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetNeedsScrollbarAnimationFrame() OVERRIDE;
246010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // OutputSurfaceClient implementation.
2485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void DeferredInitialize() OVERRIDE;
2497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void ReleaseGL() OVERRIDE;
2505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void CommitVSyncParameters(base::TimeTicks timebase,
2515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                     base::TimeDelta interval) OVERRIDE;
2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetNeedsRedrawRect(const gfx::Rect& rect) OVERRIDE;
253a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE;
2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void SetExternalDrawConstraints(
25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const gfx::Transform& transform,
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::Rect& viewport,
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::Rect& clip,
2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const gfx::Rect& viewport_rect_for_tile_priority,
2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const gfx::Transform& transform_for_tile_priority,
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      bool resourceless_software_draw) OVERRIDE;
2627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void DidLoseOutputSurface() OVERRIDE;
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void DidSwapBuffers() OVERRIDE;
2640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void DidSwapBuffersComplete() OVERRIDE;
265d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE;
266a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE;
267ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void SetTreeActivationCallback(const base::Closure& callback)
268ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      OVERRIDE;
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called from LayerTreeImpl.
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnCanDrawStateChangedForTree();
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Implementation.
274f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  int id() const { return id_; }
275fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch  bool CanDraw() const;
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OutputSurface* output_surface() const { return output_surface_.get(); }
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string LayerTreeAsJson() const;
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void FinishAllRendering();
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int SourceAnimationFrameNumber() const;
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool InitializeRenderer(scoped_ptr<OutputSurface> output_surface);
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TileManager* tile_manager() { return tile_manager_.get(); }
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void SetUseGpuRasterization(bool use_gpu);
286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool use_gpu_rasterization() const { return use_gpu_rasterization_; }
287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool create_low_res_tiling() const {
288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return settings_.create_low_res_tiling && !use_gpu_rasterization_;
289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
2905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ResourcePool* resource_pool() { return resource_pool_.get(); }
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Renderer* renderer() { return renderer_.get(); }
2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const RendererCapabilitiesImpl& GetRendererCapabilities() const;
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool SwapBuffers(const FrameData& frame);
295a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  void SetNeedsBeginFrame(bool enable);
296a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual void WillBeginImplFrame(const BeginFrameArgs& args);
297d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  void DidModifyTilePriorities();
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeImpl* active_tree() { return active_tree_.get(); }
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerTreeImpl* active_tree() const { return active_tree_.get(); }
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeImpl* pending_tree() { return pending_tree_.get(); }
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerTreeImpl* pending_tree() const { return pending_tree_.get(); }
3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  LayerTreeImpl* recycle_tree() { return recycle_tree_.get(); }
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerTreeImpl* recycle_tree() const { return recycle_tree_.get(); }
305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Returns the tree LTH synchronizes with.
306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  LayerTreeImpl* sync_tree() {
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return pending_tree_ ? pending_tree_.get() : active_tree_.get();
308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
309868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void CreatePendingTree();
31058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void UpdateVisibleTiles();
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void ActivateSyncTree();
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Shortcuts to layers on the active tree.
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* RootLayer() const;
3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  LayerImpl* InnerViewportScrollLayer() const;
3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  LayerImpl* OuterViewportScrollLayer() const;
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* CurrentlyScrollingLayer() const;
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
319e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int scroll_layer_id_when_mouse_over_scrollbar() const {
3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return scroll_layer_id_when_mouse_over_scrollbar_;
3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
322e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  bool scroll_affects_scroll_handler() const {
323e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    return scroll_affects_scroll_handler_;
324e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  }
3256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void QueueSwapPromiseForMainThreadScrollUpdate(
3266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      scoped_ptr<SwapPromise> swap_promise);
3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
328ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch  bool IsActivelyScrolling() const;
3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetVisible(bool visible);
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool visible() const { return visible_; }
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetNeedsCommit() { client_->SetNeedsCommitOnImplThread(); }
334a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void SetNeedsRedraw();
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ManagedMemoryPolicy ActualManagedMemoryPolicy() const;
33790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
338a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  size_t memory_allocation_limit_bytes() const;
33968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  int memory_allocation_priority_cutoff() const;
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void SetViewportSize(const gfx::Size& device_viewport_size);
3425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  gfx::Size device_viewport_size() const { return device_viewport_size_; }
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
34458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void SetOverhangUIResource(UIResourceId overhang_ui_resource_id,
3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             const gfx::Size& overhang_ui_resource_size);
34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDeviceScaleFactor(float device_scale_factor);
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float device_scale_factor() const { return device_scale_factor_; }
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
35058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  const gfx::Transform& DrawTransform() const;
351868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ScrollAndScaleSet> ProcessScrollDeltas();
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool needs_animate_layers() const {
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return !animation_registrar_->active_animation_controllers().empty();
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void set_max_memory_needed_bytes(size_t bytes) {
359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    max_memory_needed_bytes_ = bytes;
360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FrameRateCounter* fps_counter() {
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fps_counter_.get();
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PaintTimeCounter* paint_time_counter() {
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return paint_time_counter_.get();
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MemoryHistory* memory_history() {
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return memory_history_.get();
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DebugRectHistory* debug_rect_history() {
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return debug_rect_history_.get();
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResourceProvider* resource_provider() {
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return resource_provider_.get();
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* top_controls_manager() {
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return top_controls_manager_.get();
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const GlobalStateThatImpactsTilePriority& global_tile_state() {
381a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return global_tile_state_;
382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Proxy* proxy() const { return proxy_; }
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AnimationRegistrar* animation_registrar() const {
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return animation_registrar_.get();
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SetDebugState(const LayerTreeDebugState& new_debug_state);
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const LayerTreeDebugState& debug_state() const { return debug_state_; }
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  class CC_EXPORT CullRenderPassesWithNoQuads {
394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)   public:
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool ShouldRemoveRenderPass(const RenderPassDrawQuad& quad,
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                const FrameData& frame) const;
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Iterates in draw order, so that when a surface is removed, and its
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // target becomes empty, then its target can be removed also.
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    size_t RenderPassListBegin(const RenderPassList& list) const { return 0; }
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    size_t RenderPassListEnd(const RenderPassList& list) const {
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return list.size();
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    size_t RenderPassListNext(size_t it) const { return it + 1; }
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  template <typename RenderPassCuller>
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static void RemoveRenderPasses(RenderPassCuller culler, FrameData* frame);
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
41090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  gfx::Vector2dF accumulated_root_overscroll() const {
41190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return accumulated_root_overscroll_;
41290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
41390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool pinch_gesture_active() const { return pinch_gesture_active_; }
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetTreePriority(TreePriority priority);
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
41803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void UpdateCurrentBeginFrameArgs(const BeginFrameArgs& args);
41903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void ResetCurrentBeginFrameArgsForNextFrame();
42003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual BeginFrameArgs CurrentBeginFrameArgs() const;
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Expected time between two begin impl frame calls.
423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::TimeDelta begin_impl_frame_interval() const {
424010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return begin_impl_frame_interval_;
425010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
426010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void AsValueInto(base::debug::TracedValue* value) const {
4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return AsValueWithFrameInto(NULL, value);
4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void AsValueWithFrameInto(FrameData* frame,
4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                            base::debug::TracedValue* value) const;
4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_refptr<base::debug::ConvertableToTraceFormat> AsValueWithFrame(
4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      FrameData* frame) const;
4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_refptr<base::debug::ConvertableToTraceFormat> ActivationStateAsValue()
4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const;
4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void ActivationStateAsValueInto(base::debug::TracedValue* value) const;
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool page_scale_animation_active() const { return !!page_scale_animation_; }
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
44168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void CreateUIResource(UIResourceId uid,
44268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                const UIResourceBitmap& bitmap);
443a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Deletes a UI resource.  May safely be called more than once.
44468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void DeleteUIResource(UIResourceId uid);
44558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void EvictAllUIResources();
44658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool EvictedUIResourcesExist() const;
44758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
44868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual ResourceProvider::ResourceId ResourceIdForUIResource(
44968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      UIResourceId uid) const;
450a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
4511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual bool IsUIResourceOpaque(UIResourceId uid) const;
4521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
4534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  struct UIResourceData {
4544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ResourceProvider::ResourceId resource_id;
4554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    gfx::Size size;
4561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    bool opaque;
4574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  };
4584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ScheduleMicroBenchmark(scoped_ptr<MicroBenchmarkImpl> benchmark);
460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CompositorFrameMetadata MakeCompositorFrameMetadata() const;
462a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Viewport rectangle and clip in nonflipped window space.  These rects
463a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // should only be used by Renderer subclasses to populate glViewport/glClip
464a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // and their software-mode equivalents.
465a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  gfx::Rect DeviceViewport() const;
466a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  gfx::Rect DeviceClip() const;
467a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
468a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // When a SwapPromiseMonitor is created on the impl thread, it calls
469a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // InsertSwapPromiseMonitor() to register itself with LayerTreeHostImpl.
470a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // When the monitor is destroyed, it calls RemoveSwapPromiseMonitor()
471a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // to unregister itself.
472a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void InsertSwapPromiseMonitor(SwapPromiseMonitor* monitor);
473a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void RemoveSwapPromiseMonitor(SwapPromiseMonitor* monitor);
474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void RegisterPictureLayerImpl(PictureLayerImpl* layer);
476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void UnregisterPictureLayerImpl(PictureLayerImpl* layer);
477f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void GetPictureLayerImplPairs(
4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      std::vector<PictureLayerImpl::Pair>* layers) const;
4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SetTopControlsLayoutHeight(float height);
4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeHostImpl(
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const LayerTreeSettings& settings,
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      LayerTreeHostImplClient* client,
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Proxy* proxy,
4881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      RenderingStatsInstrumentation* rendering_stats_instrumentation,
489a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SharedBitmapManager* manager,
490a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      int id);
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void UpdateInnerViewportContainerSize();
493a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Virtual for testing.
495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void AnimateLayers(base::TimeTicks monotonic_time);
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Virtual for testing.
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::TimeDelta LowFrequencyAnimationInterval() const;
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const AnimationRegistrar::AnimationControllerMap&
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      active_animation_controllers() const {
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return animation_registrar_->active_animation_controllers();
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
505d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  bool manage_tiles_needed() const { return tile_priorities_dirty_; }
50658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeHostImplClient* client_;
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Proxy* proxy_;
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
511cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void CreateAndSetRenderer();
512cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void CreateAndSetTileManager();
513cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void DestroyTileManager();
514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void ReleaseTreeResources();
515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void EnforceZeroBudget(bool zero_budget);
516868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool UsePendingTreeForSync() const;
5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool UseZeroCopyRasterizer() const;
5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool UseOneCopyRasterizer() const;
520cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void ScrollViewportBy(gfx::Vector2dF scroll_delta);
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AnimatePageScale(base::TimeTicks monotonic_time);
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AnimateScrollbars(base::TimeTicks monotonic_time);
5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AnimateTopControls(base::TimeTicks monotonic_time);
5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Vector2dF ScrollLayerWithViewportSpaceDelta(
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      LayerImpl* layer_impl,
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      float scale_from_viewport_to_screen_space,
5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::PointF& viewport_point,
5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::Vector2dF& viewport_delta);
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void TrackDamageForAllSurfaces(
533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      LayerImpl* root_draw_layer,
534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const LayerImplList& render_surface_layer_list);
535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void UpdateTileManagerMemoryPolicy(const ManagedMemoryPolicy& policy);
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // This function should only be called from PrepareToDraw, as DidDrawAllLayers
5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // must be called if this helper function is called.  Returns DRAW_SUCCESS if
5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // the frame should be drawn.
541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DrawResult CalculateRenderPasses(FrameData* frame);
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ClearCurrentlyScrollingLayer();
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool HandleMouseOverScrollbar(LayerImpl* layer_impl,
5465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const gfx::PointF& device_viewport_point);
5474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AnimateScrollbarsRecursive(LayerImpl* layer,
5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  base::TimeTicks time);
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  LayerImpl* FindScrollLayerForDeviceViewportPoint(
5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::PointF& device_viewport_point,
55368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      InputHandler::ScrollInputType type,
5544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      LayerImpl* layer_hit_by_point,
555e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      bool* scroll_on_main_thread,
556010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      bool* optional_has_ancestor_scroll_handler) const;
5575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  float DeviceSpaceDistanceToLayer(const gfx::PointF& device_viewport_point,
55868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                   LayerImpl* layer_impl);
559010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void StartScrollbarFadeRecursive(LayerImpl* layer);
560a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void SetManagedMemoryPolicy(const ManagedMemoryPolicy& policy,
561a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                              bool zero_budget);
562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void EnforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy);
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
564ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void DidInitializeVisibleTile();
565ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
56658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  void MarkUIResourceNotEvicted(UIResourceId uid);
56758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
568a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void NotifySwapPromiseMonitorsOfSetNeedsRedraw();
5696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void NotifySwapPromiseMonitorsOfForwardingToMainThread();
570a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  typedef base::hash_map<UIResourceId, UIResourceData>
572a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      UIResourceMap;
573a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  UIResourceMap ui_resource_map_;
574a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
57558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Resources that were evicted by EvictAllUIResources. Resources are removed
57658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // from this when they are touched by a create or destroy from the UI resource
57758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // request queue.
57858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::set<UIResourceId> evicted_ui_resources_;
57958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<OutputSurface> output_surface_;
58190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
58290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // |resource_provider_| and |tile_manager_| can be NULL, e.g. when using tile-
58390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // free rendering - see OutputSurface::ForcedDrawToSoftwareDevice().
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ResourceProvider> resource_provider_;
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TileManager> tile_manager_;
586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool use_gpu_rasterization_;
587a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  scoped_ptr<RasterWorkerPool> raster_worker_pool_;
588a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  scoped_ptr<ResourcePool> resource_pool_;
5895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  scoped_ptr<ResourcePool> staging_resource_pool_;
59090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_ptr<Renderer> renderer_;
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  GlobalStateThatImpactsTilePriority global_tile_state_;
59368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tree currently being drawn.
5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerTreeImpl> active_tree_;
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // In impl-side painting mode, tree with possibly incomplete rasterized
598424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // content. May be promoted to active by ActivatePendingTree().
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerTreeImpl> pending_tree_;
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // In impl-side painting mode, inert tree with layers that can be recycled
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // by the next sync from the main thread.
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerTreeImpl> recycle_tree_;
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
60590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  InputHandlerClient* input_handler_client_;
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool did_lock_scrolling_layer_;
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_bubble_scrolls_;
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool wheel_scrolling_;
609e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  bool scroll_affects_scroll_handler_;
6104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  int scroll_layer_id_when_mouse_over_scrollbar_;
6116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ScopedPtrVector<SwapPromise> swap_promises_for_main_thread_scroll_update_;
612868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
613d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  bool tile_priorities_dirty_;
614868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The optional delegate for the root layer scroll offset.
616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  LayerScrollOffsetDelegate* root_layer_scroll_offset_delegate_;
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeSettings settings_;
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreeDebugState debug_state_;
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool visible_;
620a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ManagedMemoryPolicy cached_managed_memory_policy_;
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
62290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  gfx::Vector2dF accumulated_root_overscroll_;
623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool pinch_gesture_active_;
62568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  bool pinch_gesture_end_should_clear_scrolling_layer_;
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Point previous_pinch_anchor_;
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TopControlsManager> top_controls_manager_;
6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<PageScaleAnimation> page_scale_animation_;
6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This is used for ticking animations slowly when hidden.
6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerTreeHostImplTimeSourceAdapter> time_source_client_adapter_;
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<FrameRateCounter> fps_counter_;
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<PaintTimeCounter> paint_time_counter_;
6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<MemoryHistory> memory_history_;
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<DebugRectHistory> debug_rect_history_;
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
64058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  scoped_ptr<TextureMailboxDeleter> texture_mailbox_deleter_;
64158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The maximum memory that would be used by the prioritized resource
643c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // manager, if there were no limit on memory usage.
644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  size_t max_memory_needed_bytes_;
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
646eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool zero_budget_;
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
64858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Viewport size passed in from the main thread, in physical pixels.  This
64958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // value is the default size for all concepts of physical viewport (draw
65058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // viewport, scrolling viewport and device viewport), but it can be
65158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // overridden.
652868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  gfx::Size device_viewport_size_;
653868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
654868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Conversion factor from CSS pixels to physical pixels when
655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // pageScaleFactor=1.
656868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  float device_scale_factor_;
657868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
65858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // UI resource to use for drawing overhang gutters.
65958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  UIResourceId overhang_ui_resource_id_;
66058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  gfx::Size overhang_ui_resource_size_;
66158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
66258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Optional top-level constraints that can be set by the OutputSurface.
66358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // - external_transform_ applies a transform above the root layer
66458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // - external_viewport_ is used DrawProperties, tile management and
66558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // glViewport/window projection matrix.
66658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // - external_clip_ specifies a top-level clip rect
6675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // - viewport_rect_for_tile_priority_ is the rect in view space used for
6685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // tiling priority.
669868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  gfx::Transform external_transform_;
670868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  gfx::Rect external_viewport_;
67158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  gfx::Rect external_clip_;
6725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  gfx::Rect viewport_rect_for_tile_priority_;
673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool resourceless_software_draw_;
674868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect viewport_damage_rect_;
676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
67703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  BeginFrameArgs current_begin_frame_args_;
6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
679010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Expected time between two begin impl frame calls.
680010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::TimeDelta begin_impl_frame_interval_;
681010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<AnimationRegistrar> animation_registrar_;
6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderingStatsInstrumentation* rendering_stats_instrumentation_;
685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MicroBenchmarkControllerImpl micro_benchmark_controller_;
6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
687ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  bool need_to_update_visible_tiles_before_draw_;
688ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
689ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Optional callback to notify of new tree activations.
690a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  base::Closure tree_activation_callback_;
6917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
6921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  SharedBitmapManager* shared_bitmap_manager_;
693a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  int id_;
694a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
695a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::set<SwapPromiseMonitor*> swap_promise_monitor_;
6961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
697f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::vector<PictureLayerImpl*> picture_layers_;
6985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<PictureLayerImpl::Pair> picture_layer_pairs_;
699f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LayerTreeHostImpl);
7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_TREES_LAYER_TREE_HOST_IMPL_H_
706