| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CC_LAYER_TREE_HOST_IMPL_H_ | 5 #ifndef CC_LAYER_TREE_HOST_IMPL_H_ |
| 6 #define CC_LAYER_TREE_HOST_IMPL_H_ | 6 #define CC_LAYER_TREE_HOST_IMPL_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/time.h" | 10 #include "base/time.h" |
| 11 #include "cc/animation_events.h" | 11 #include "cc/animation_events.h" |
| 12 #include "cc/animation_registrar.h" |
| 12 #include "cc/cc_export.h" | 13 #include "cc/cc_export.h" |
| 13 #include "cc/input_handler.h" | 14 #include "cc/input_handler.h" |
| 14 #include "cc/output_surface_client.h" | 15 #include "cc/output_surface_client.h" |
| 15 #include "cc/render_pass.h" | 16 #include "cc/render_pass.h" |
| 16 #include "cc/render_pass_sink.h" | 17 #include "cc/render_pass_sink.h" |
| 17 #include "cc/renderer.h" | 18 #include "cc/renderer.h" |
| 18 #include "cc/tile_manager.h" | 19 #include "cc/tile_manager.h" |
| 19 #include "third_party/skia/include/core/SkColor.h" | 20 #include "third_party/skia/include/core/SkColor.h" |
| 20 #include "ui/gfx/rect.h" | 21 #include "ui/gfx/rect.h" |
| 21 | 22 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 float m_deviceScaleFactor; | 106 float m_deviceScaleFactor; |
| 106 | 107 |
| 107 gfx::Vector2dF m_zoomedViewportOffset; | 108 gfx::Vector2dF m_zoomedViewportOffset; |
| 108 gfx::SizeF m_layoutViewportSize; | 109 gfx::SizeF m_layoutViewportSize; |
| 109 }; | 110 }; |
| 110 | 111 |
| 111 // LayerTreeHostImpl owns the LayerImpl tree as well as associated rendering sta
te | 112 // LayerTreeHostImpl owns the LayerImpl tree as well as associated rendering sta
te |
| 112 class CC_EXPORT LayerTreeHostImpl : public InputHandlerClient, | 113 class CC_EXPORT LayerTreeHostImpl : public InputHandlerClient, |
| 113 public RendererClient, | 114 public RendererClient, |
| 114 public TileManagerClient, | 115 public TileManagerClient, |
| 116 public AnimationRegistrar, |
| 115 public OutputSurfaceClient { | 117 public OutputSurfaceClient { |
| 116 typedef std::vector<LayerImpl*> LayerList; | 118 typedef std::vector<LayerImpl*> LayerList; |
| 117 | 119 |
| 118 public: | 120 public: |
| 119 static scoped_ptr<LayerTreeHostImpl> create(const LayerTreeSettings&, LayerT
reeHostImplClient*, Proxy*); | 121 static scoped_ptr<LayerTreeHostImpl> create(const LayerTreeSettings&, LayerT
reeHostImplClient*, Proxy*); |
| 120 virtual ~LayerTreeHostImpl(); | 122 virtual ~LayerTreeHostImpl(); |
| 121 | 123 |
| 122 // InputHandlerClient implementation | 124 // InputHandlerClient implementation |
| 123 virtual InputHandlerClient::ScrollStatus scrollBegin(gfx::Point, InputHandle
rClient::ScrollInputType) OVERRIDE; | 125 virtual InputHandlerClient::ScrollStatus scrollBegin(gfx::Point, InputHandle
rClient::ScrollInputType) OVERRIDE; |
| 124 virtual bool scrollBy(const gfx::Point&, const gfx::Vector2d&) OVERRIDE; | 126 virtual bool scrollBy(const gfx::Point&, const gfx::Vector2d&) OVERRIDE; |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 scoped_ptr<ScrollAndScaleSet> processScrollDeltas(); | 241 scoped_ptr<ScrollAndScaleSet> processScrollDeltas(); |
| 240 gfx::Transform implTransform() const; | 242 gfx::Transform implTransform() const; |
| 241 | 243 |
| 242 void startPageScaleAnimation(gfx::Vector2d targetOffset, bool useAnchor, flo
at scale, base::TimeDelta duration); | 244 void startPageScaleAnimation(gfx::Vector2d targetOffset, bool useAnchor, flo
at scale, base::TimeDelta duration); |
| 243 | 245 |
| 244 SkColor backgroundColor() const { return m_backgroundColor; } | 246 SkColor backgroundColor() const { return m_backgroundColor; } |
| 245 void setBackgroundColor(SkColor color) { m_backgroundColor = color; } | 247 void setBackgroundColor(SkColor color) { m_backgroundColor = color; } |
| 246 | 248 |
| 247 bool hasTransparentBackground() const { return m_hasTransparentBackground; } | 249 bool hasTransparentBackground() const { return m_hasTransparentBackground; } |
| 248 void setHasTransparentBackground(bool transparent) { m_hasTransparentBackgro
und = transparent; } | 250 void setHasTransparentBackground(bool transparent) { m_hasTransparentBackgro
und = transparent; } |
| 249 | 251 bool needsAnimateLayers() const { return !m_activeAnimationControllers.empty
(); } |
| 250 bool needsAnimateLayers() const { return m_needsAnimateLayers; } | |
| 251 void setNeedsAnimateLayers() { m_needsAnimateLayers = true; } | |
| 252 | 252 |
| 253 bool needsUpdateDrawProperties() const { return m_needsUpdateDrawProperties;
} | 253 bool needsUpdateDrawProperties() const { return m_needsUpdateDrawProperties;
} |
| 254 void setNeedsUpdateDrawProperties() { m_needsUpdateDrawProperties = true; } | 254 void setNeedsUpdateDrawProperties() { m_needsUpdateDrawProperties = true; } |
| 255 | 255 |
| 256 void setNeedsRedraw(); | 256 void setNeedsRedraw(); |
| 257 | 257 |
| 258 void renderingStats(RenderingStats*) const; | 258 void renderingStats(RenderingStats*) const; |
| 259 | 259 |
| 260 void updateRootScrollLayerImplTransform(); | 260 void updateRootScrollLayerImplTransform(); |
| 261 | 261 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 // target becomes empty, then its target can be removed also. | 297 // target becomes empty, then its target can be removed also. |
| 298 size_t renderPassListBegin(const RenderPassList&) const { return 0; } | 298 size_t renderPassListBegin(const RenderPassList&) const { return 0; } |
| 299 size_t renderPassListEnd(const RenderPassList& list) const { return list
.size(); } | 299 size_t renderPassListEnd(const RenderPassList& list) const { return list
.size(); } |
| 300 size_t renderPassListNext(size_t it) const { return it + 1; } | 300 size_t renderPassListNext(size_t it) const { return it + 1; } |
| 301 }; | 301 }; |
| 302 | 302 |
| 303 template<typename RenderPassCuller> | 303 template<typename RenderPassCuller> |
| 304 static void removeRenderPasses(RenderPassCuller, FrameData&); | 304 static void removeRenderPasses(RenderPassCuller, FrameData&); |
| 305 | 305 |
| 306 protected: | 306 protected: |
| 307 typedef base::hash_map<int, LayerAnimationController*> AnimationControllerMa
p; |
| 308 |
| 307 LayerTreeHostImpl(const LayerTreeSettings&, LayerTreeHostImplClient*, Proxy*
); | 309 LayerTreeHostImpl(const LayerTreeSettings&, LayerTreeHostImplClient*, Proxy*
); |
| 308 | 310 |
| 309 void animatePageScale(base::TimeTicks monotonicTime); | 311 void animatePageScale(base::TimeTicks monotonicTime); |
| 310 void animateScrollbars(base::TimeTicks monotonicTime); | 312 void animateScrollbars(base::TimeTicks monotonicTime); |
| 311 | 313 |
| 312 void updateDrawProperties(); | 314 void updateDrawProperties(); |
| 313 | 315 |
| 314 // Exposed for testing. | 316 // Exposed for testing. |
| 315 void calculateRenderSurfaceLayerList(LayerList&); | 317 void calculateRenderSurfaceLayerList(LayerList&); |
| 316 void resetNeedsUpdateDrawPropertiesForTesting() { m_needsUpdateDrawPropertie
s = false; } | 318 void resetNeedsUpdateDrawPropertiesForTesting() { m_needsUpdateDrawPropertie
s = false; } |
| 317 | 319 |
| 318 // Virtual for testing. | 320 // Virtual for testing. |
| 319 virtual void animateLayers(base::TimeTicks monotonicTime, base::Time wallClo
ckTime); | 321 virtual void animateLayers(base::TimeTicks monotonicTime, base::Time wallClo
ckTime); |
| 320 | 322 |
| 321 // Virtual for testing. | 323 // Virtual for testing. |
| 322 virtual base::TimeDelta lowFrequencyAnimationInterval() const; | 324 virtual base::TimeDelta lowFrequencyAnimationInterval() const; |
| 323 | 325 |
| 326 const AnimationControllerMap& activeAnimationControllers() const { return m_
activeAnimationControllers; } |
| 327 |
| 324 LayerTreeHostImplClient* m_client; | 328 LayerTreeHostImplClient* m_client; |
| 325 Proxy* m_proxy; | 329 Proxy* m_proxy; |
| 326 | 330 |
| 327 private: | 331 private: |
| 328 void computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo); | 332 void computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo); |
| 329 void computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo); | 333 void computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo); |
| 330 void makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx::Vector2d scro
llOffset, float pageScale); | 334 void makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx::Vector2d scro
llOffset, float pageScale); |
| 331 | 335 |
| 332 void setPageScaleDelta(float); | 336 void setPageScaleDelta(float); |
| 333 void updateMaxScrollOffset(); | 337 void updateMaxScrollOffset(); |
| 334 void trackDamageForAllSurfaces(LayerImpl* rootDrawLayer, const LayerList& re
nderSurfaceLayerList); | 338 void trackDamageForAllSurfaces(LayerImpl* rootDrawLayer, const LayerList& re
nderSurfaceLayerList); |
| 335 | 339 |
| 336 // Returns false if the frame should not be displayed. This function should | 340 // Returns false if the frame should not be displayed. This function should |
| 337 // only be called from prepareToDraw, as didDrawAllLayers must be called | 341 // only be called from prepareToDraw, as didDrawAllLayers must be called |
| 338 // if this helper function is called. | 342 // if this helper function is called. |
| 339 bool calculateRenderPasses(FrameData&); | 343 bool calculateRenderPasses(FrameData&); |
| 340 void animateLayersRecursive(LayerImpl*, base::TimeTicks monotonicTime, base:
:Time wallClockTime, AnimationEventsVector*, bool& didAnimate, bool& needsAnimat
eLayers); | 344 void animateLayersRecursive(LayerImpl*, base::TimeTicks monotonicTime, base:
:Time wallClockTime, AnimationEventsVector*, bool& didAnimate, bool& needsAnimat
eLayers); |
| 341 void setBackgroundTickingEnabled(bool); | 345 void setBackgroundTickingEnabled(bool); |
| 342 gfx::Size contentSize() const; | 346 gfx::Size contentSize() const; |
| 343 | 347 |
| 344 void sendDidLoseOutputSurfaceRecursive(LayerImpl*); | 348 void sendDidLoseOutputSurfaceRecursive(LayerImpl*); |
| 345 void clearRenderSurfaces(); | 349 void clearRenderSurfaces(); |
| 346 bool ensureRenderSurfaceLayerList(); | 350 bool ensureRenderSurfaceLayerList(); |
| 347 void clearCurrentlyScrollingLayer(); | 351 void clearCurrentlyScrollingLayer(); |
| 348 | 352 |
| 349 void animateScrollbarsRecursive(LayerImpl*, base::TimeTicks monotonicTime); | 353 void animateScrollbarsRecursive(LayerImpl*, base::TimeTicks monotonicTime); |
| 350 | 354 |
| 351 void dumpRenderSurfaces(std::string*, int indent, const LayerImpl*) const; | 355 void dumpRenderSurfaces(std::string*, int indent, const LayerImpl*) const; |
| 352 | 356 |
| 357 // AnimationRegistar implementation. |
| 358 virtual scoped_refptr<LayerAnimationController> GetAnimationControllerForId(
int id) OVERRIDE; |
| 359 virtual void DidActivateAnimationController(LayerAnimationController*) OVERR
IDE; |
| 360 virtual void DidDeactivateAnimationController(LayerAnimationController*) OVE
RRIDE; |
| 361 virtual void RegisterAnimationController(LayerAnimationController*) OVERRIDE
; |
| 362 virtual void UnregisterAnimationController(LayerAnimationController*) OVERRI
DE; |
| 363 |
| 353 scoped_ptr<OutputSurface> m_outputSurface; | 364 scoped_ptr<OutputSurface> m_outputSurface; |
| 354 scoped_ptr<ResourceProvider> m_resourceProvider; | 365 scoped_ptr<ResourceProvider> m_resourceProvider; |
| 355 scoped_ptr<Renderer> m_renderer; | 366 scoped_ptr<Renderer> m_renderer; |
| 356 scoped_ptr<TileManager> m_tileManager; | 367 scoped_ptr<TileManager> m_tileManager; |
| 357 | 368 |
| 358 scoped_ptr<LayerTreeImpl> m_pendingTree; | 369 scoped_ptr<LayerTreeImpl> m_pendingTree; |
| 359 scoped_ptr<LayerTreeImpl> m_activeTree; | 370 scoped_ptr<LayerTreeImpl> m_activeTree; |
| 360 | 371 |
| 361 bool m_scrollDeltaIsInViewportSpace; | 372 bool m_scrollDeltaIsInViewportSpace; |
| 362 LayerTreeSettings m_settings; | 373 LayerTreeSettings m_settings; |
| 363 LayerTreeDebugState m_debugState; | 374 LayerTreeDebugState m_debugState; |
| 364 gfx::Size m_layoutViewportSize; | 375 gfx::Size m_layoutViewportSize; |
| 365 gfx::Size m_deviceViewportSize; | 376 gfx::Size m_deviceViewportSize; |
| 366 float m_deviceScaleFactor; | 377 float m_deviceScaleFactor; |
| 367 bool m_visible; | 378 bool m_visible; |
| 368 bool m_contentsTexturesPurged; | 379 bool m_contentsTexturesPurged; |
| 369 ManagedMemoryPolicy m_managedMemoryPolicy; | 380 ManagedMemoryPolicy m_managedMemoryPolicy; |
| 370 | 381 |
| 371 SkColor m_backgroundColor; | 382 SkColor m_backgroundColor; |
| 372 bool m_hasTransparentBackground; | 383 bool m_hasTransparentBackground; |
| 373 | 384 |
| 374 // If this is true, it is necessary to traverse the layer tree ticking the a
nimators. | |
| 375 bool m_needsAnimateLayers; | |
| 376 bool m_needsUpdateDrawProperties; | 385 bool m_needsUpdateDrawProperties; |
| 377 bool m_pinchGestureActive; | 386 bool m_pinchGestureActive; |
| 378 gfx::Point m_previousPinchAnchor; | 387 gfx::Point m_previousPinchAnchor; |
| 379 | 388 |
| 380 scoped_ptr<PageScaleAnimation> m_pageScaleAnimation; | 389 scoped_ptr<PageScaleAnimation> m_pageScaleAnimation; |
| 381 | 390 |
| 382 // This is used for ticking animations slowly when hidden. | 391 // This is used for ticking animations slowly when hidden. |
| 383 scoped_ptr<LayerTreeHostImplTimeSourceAdapter> m_timeSourceClientAdapter; | 392 scoped_ptr<LayerTreeHostImplTimeSourceAdapter> m_timeSourceClientAdapter; |
| 384 | 393 |
| 385 // List of visible layers for the most recently prepared frame. Used for | 394 // List of visible layers for the most recently prepared frame. Used for |
| 386 // rendering and input event hit testing. | 395 // rendering and input event hit testing. |
| 387 LayerList m_renderSurfaceLayerList; | 396 LayerList m_renderSurfaceLayerList; |
| 388 | 397 |
| 389 PinchZoomViewport m_pinchZoomViewport; | 398 PinchZoomViewport m_pinchZoomViewport; |
| 390 | 399 |
| 391 scoped_ptr<FrameRateCounter> m_fpsCounter; | 400 scoped_ptr<FrameRateCounter> m_fpsCounter; |
| 392 scoped_ptr<DebugRectHistory> m_debugRectHistory; | 401 scoped_ptr<DebugRectHistory> m_debugRectHistory; |
| 393 | 402 |
| 394 int64 m_numImplThreadScrolls; | 403 int64 m_numImplThreadScrolls; |
| 395 int64 m_numMainThreadScrolls; | 404 int64 m_numMainThreadScrolls; |
| 396 | 405 |
| 397 int64 m_cumulativeNumLayersDrawn; | 406 int64 m_cumulativeNumLayersDrawn; |
| 398 | 407 |
| 399 int64 m_cumulativeNumMissingTiles; | 408 int64 m_cumulativeNumMissingTiles; |
| 400 | 409 |
| 401 size_t m_lastSentMemoryVisibleBytes; | 410 size_t m_lastSentMemoryVisibleBytes; |
| 402 size_t m_lastSentMemoryVisibleAndNearbyBytes; | 411 size_t m_lastSentMemoryVisibleAndNearbyBytes; |
| 403 size_t m_lastSentMemoryUseBytes; | 412 size_t m_lastSentMemoryUseBytes; |
| 404 | 413 |
| 414 AnimationControllerMap m_activeAnimationControllers; |
| 415 AnimationControllerMap m_allAnimationControllers; |
| 416 |
| 405 DISALLOW_COPY_AND_ASSIGN(LayerTreeHostImpl); | 417 DISALLOW_COPY_AND_ASSIGN(LayerTreeHostImpl); |
| 406 }; | 418 }; |
| 407 | 419 |
| 408 } // namespace cc | 420 } // namespace cc |
| 409 | 421 |
| 410 #endif // CC_LAYER_TREE_HOST_IMPL_H_ | 422 #endif // CC_LAYER_TREE_HOST_IMPL_H_ |
| OLD | NEW |