Index: cc/CCLayerTreeHostImpl.h |
diff --git a/cc/CCLayerTreeHostImpl.h b/cc/CCLayerTreeHostImpl.h |
index 297f619d00f992b4645a967d3b92c305bc583335..714a528175f67460498fc953535311843e69677c 100644 |
--- a/cc/CCLayerTreeHostImpl.h |
+++ b/cc/CCLayerTreeHostImpl.h |
@@ -1,356 +1,6 @@ |
-// Copyright 2011 The Chromium Authors. All rights reserved. |
+// Copyright 2012 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef CCLayerTreeHostImpl_h |
-#define CCLayerTreeHostImpl_h |
- |
-#include "base/basictypes.h" |
-#include "base/time.h" |
-#include "CCAnimationEvents.h" |
-#include "CCInputHandler.h" |
-#include "CCLayerSorter.h" |
-#include "CCRenderPass.h" |
-#include "CCRenderPassSink.h" |
-#include "CCRenderer.h" |
-#include "SkColor.h" |
-#include <public/WebCompositorOutputSurfaceClient.h> |
-#include <wtf/PassOwnPtr.h> |
-#include <wtf/RefPtr.h> |
- |
-namespace cc { |
- |
-class CCCompletionEvent; |
-class CCDebugRectHistory; |
-class CCFrameRateCounter; |
-class CCHeadsUpDisplayLayerImpl; |
-class CCLayerImpl; |
-class CCLayerTreeHostImplTimeSourceAdapter; |
-class CCPageScaleAnimation; |
-class CCRenderPassDrawQuad; |
-class CCResourceProvider; |
-struct RendererCapabilities; |
-struct CCRenderingStats; |
- |
-// CCLayerTreeHost->CCProxy callback interface. |
-class CCLayerTreeHostImplClient { |
-public: |
- virtual void didLoseContextOnImplThread() = 0; |
- virtual void onSwapBuffersCompleteOnImplThread() = 0; |
- virtual void onVSyncParametersChanged(double monotonicTimebase, double intervalInSeconds) = 0; |
- virtual void onCanDrawStateChanged(bool canDraw) = 0; |
- virtual void setNeedsRedrawOnImplThread() = 0; |
- virtual void setNeedsCommitOnImplThread() = 0; |
- virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<CCAnimationEventsVector>, double wallClockTime) = 0; |
- virtual void releaseContentsTexturesOnImplThread() = 0; |
-}; |
- |
-// CCPinchZoomViewport models the bounds and offset of the viewport that is used during a pinch-zoom operation. |
-// It tracks the layout-space dimensions of the viewport before any applied scale, and then tracks the layout-space |
-// coordinates of the viewport respecting the pinch settings. |
-class CCPinchZoomViewport { |
-public: |
- CCPinchZoomViewport(); |
- |
- float totalPageScaleFactor() const; |
- |
- void setPageScaleFactor(float factor) { m_pageScaleFactor = factor; } |
- float pageScaleFactor() const { return m_pageScaleFactor; } |
- |
- void setPageScaleDelta(float delta); |
- float pageScaleDelta() const { return m_pageScaleDelta; } |
- |
- float minPageScaleFactor() const { return m_minPageScaleFactor; } |
- float maxPageScaleFactor() const { return m_maxPageScaleFactor; } |
- |
- void setSentPageScaleDelta(float delta) { m_sentPageScaleDelta = delta; } |
- float sentPageScaleDelta() const { return m_sentPageScaleDelta; } |
- |
- // Returns true if the passed parameters were different from those previously |
- // cached. |
- bool setPageScaleFactorAndLimits(float pageScaleFactor, |
- float minPageScaleFactor, |
- float maxPageScaleFactor); |
- |
- // Returns the bounds and offset of the scaled and translated viewport to use for pinch-zoom. |
- FloatRect bounds() const; |
- const FloatPoint& scrollDelta() const { return m_pinchViewportScrollDelta; } |
- |
- void setLayoutViewportSize(const FloatSize& size) { m_layoutViewportSize = size; } |
- |
- // Apply the scroll offset in layout space to the offset of the pinch-zoom viewport. The viewport cannot be |
- // scrolled outside of the layout viewport bounds. Returns the component of the scroll that is un-applied due to |
- // this constraint. |
- FloatSize applyScroll(FloatSize&); |
- |
- WebKit::WebTransformationMatrix implTransform() const; |
- |
-private: |
- float m_pageScaleFactor; |
- float m_pageScaleDelta; |
- float m_sentPageScaleDelta; |
- float m_maxPageScaleFactor; |
- float m_minPageScaleFactor; |
- |
- FloatPoint m_pinchViewportScrollDelta; |
- FloatSize m_layoutViewportSize; |
-}; |
- |
-// CCLayerTreeHostImpl owns the CCLayerImpl tree as well as associated rendering state |
-class CCLayerTreeHostImpl : public CCInputHandlerClient, |
- public CCRendererClient, |
- public WebKit::WebCompositorOutputSurfaceClient { |
- typedef std::vector<CCLayerImpl*> CCLayerList; |
- |
-public: |
- static scoped_ptr<CCLayerTreeHostImpl> create(const CCLayerTreeSettings&, CCLayerTreeHostImplClient*); |
- virtual ~CCLayerTreeHostImpl(); |
- |
- // CCInputHandlerClient implementation |
- virtual CCInputHandlerClient::ScrollStatus scrollBegin(const IntPoint&, CCInputHandlerClient::ScrollInputType) OVERRIDE; |
- virtual void scrollBy(const IntPoint&, const IntSize&) OVERRIDE; |
- virtual void scrollEnd() OVERRIDE; |
- virtual void pinchGestureBegin() OVERRIDE; |
- virtual void pinchGestureUpdate(float, const IntPoint&) OVERRIDE; |
- virtual void pinchGestureEnd() OVERRIDE; |
- virtual void startPageScaleAnimation(const IntSize& targetPosition, bool anchorPoint, float pageScale, double startTime, double duration) OVERRIDE; |
- virtual void scheduleAnimation() OVERRIDE; |
- |
- struct FrameData : public CCRenderPassSink { |
- FrameData(); |
- ~FrameData(); |
- |
- Vector<IntRect> occludingScreenSpaceRects; |
- CCRenderPassList renderPasses; |
- CCRenderPassIdHashMap renderPassesById; |
- CCLayerList* renderSurfaceLayerList; |
- CCLayerList willDrawLayers; |
- |
- // CCRenderPassSink implementation. |
- virtual void appendRenderPass(scoped_ptr<CCRenderPass>) OVERRIDE; |
- }; |
- |
- // Virtual for testing. |
- virtual void beginCommit(); |
- virtual void commitComplete(); |
- virtual void animate(double monotonicTime, double wallClockTime); |
- |
- // Returns false if problems occured preparing the frame, and we should try |
- // to avoid displaying the frame. If prepareToDraw is called, |
- // didDrawAllLayers must also be called, regardless of whether drawLayers is |
- // called between the two. |
- virtual bool prepareToDraw(FrameData&); |
- virtual void drawLayers(const FrameData&); |
- // Must be called if and only if prepareToDraw was called. |
- void didDrawAllLayers(const FrameData&); |
- |
- // CCRendererClient implementation |
- virtual const IntSize& deviceViewportSize() const OVERRIDE; |
- virtual const CCLayerTreeSettings& settings() const OVERRIDE; |
- virtual void didLoseContext() OVERRIDE; |
- virtual void onSwapBuffersComplete() OVERRIDE; |
- virtual void setFullRootLayerDamage() OVERRIDE; |
- virtual void releaseContentsTextures() OVERRIDE; |
- virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE; |
- |
- // WebCompositorOutputSurfaceClient implementation. |
- virtual void onVSyncParametersChanged(double monotonicTimebase, double intervalInSeconds) OVERRIDE; |
- |
- // Implementation |
- bool canDraw(); |
- CCGraphicsContext* context() const; |
- |
- std::string layerTreeAsText() const; |
- |
- void finishAllRendering(); |
- int sourceAnimationFrameNumber() const; |
- |
- bool initializeRenderer(scoped_ptr<CCGraphicsContext>); |
- bool isContextLost(); |
- CCRenderer* renderer() { return m_renderer.get(); } |
- const RendererCapabilities& rendererCapabilities() const; |
- |
- bool swapBuffers(); |
- |
- void readback(void* pixels, const IntRect&); |
- |
- void setRootLayer(scoped_ptr<CCLayerImpl>); |
- CCLayerImpl* rootLayer() { return m_rootLayerImpl.get(); } |
- |
- void setHudLayer(CCHeadsUpDisplayLayerImpl* layerImpl) { m_hudLayerImpl = layerImpl; } |
- CCHeadsUpDisplayLayerImpl* hudLayer() { return m_hudLayerImpl; } |
- |
- // Release ownership of the current layer tree and replace it with an empty |
- // tree. Returns the root layer of the detached tree. |
- scoped_ptr<CCLayerImpl> detachLayerTree(); |
- |
- CCLayerImpl* rootScrollLayer() const { return m_rootScrollLayerImpl; } |
- |
- bool visible() const { return m_visible; } |
- void setVisible(bool); |
- |
- int sourceFrameNumber() const { return m_sourceFrameNumber; } |
- void setSourceFrameNumber(int frameNumber) { m_sourceFrameNumber = frameNumber; } |
- |
- bool contentsTexturesPurged() const { return m_contentsTexturesPurged; } |
- void setContentsTexturesPurged(); |
- void resetContentsTexturesPurged(); |
- size_t memoryAllocationLimitBytes() const { return m_memoryAllocationLimitBytes; } |
- |
- void setViewportSize(const IntSize& layoutViewportSize, const IntSize& deviceViewportSize); |
- const IntSize& layoutViewportSize() const { return m_layoutViewportSize; } |
- |
- float deviceScaleFactor() const { return m_deviceScaleFactor; } |
- void setDeviceScaleFactor(float); |
- |
- float pageScaleFactor() const; |
- void setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor); |
- |
- scoped_ptr<CCScrollAndScaleSet> processScrollDeltas(); |
- WebKit::WebTransformationMatrix implTransform() const; |
- |
- void startPageScaleAnimation(const IntSize& tragetPosition, bool useAnchor, float scale, double durationSec); |
- |
- SkColor backgroundColor() const { return m_backgroundColor; } |
- void setBackgroundColor(SkColor color) { m_backgroundColor = color; } |
- |
- bool hasTransparentBackground() const { return m_hasTransparentBackground; } |
- void setHasTransparentBackground(bool transparent) { m_hasTransparentBackground = transparent; } |
- |
- bool needsAnimateLayers() const { return m_needsAnimateLayers; } |
- void setNeedsAnimateLayers() { m_needsAnimateLayers = true; } |
- |
- void setNeedsRedraw(); |
- |
- void renderingStats(CCRenderingStats*) const; |
- |
- void updateRootScrollLayerImplTransform(); |
- |
- CCFrameRateCounter* fpsCounter() const { return m_fpsCounter.get(); } |
- CCDebugRectHistory* debugRectHistory() const { return m_debugRectHistory.get(); } |
- CCResourceProvider* resourceProvider() const { return m_resourceProvider.get(); } |
- |
- class CullRenderPassesWithCachedTextures { |
- public: |
- bool shouldRemoveRenderPass(const CCRenderPassDrawQuad&, const FrameData&) const; |
- |
- // Iterates from the root first, in order to remove the surfaces closest |
- // to the root with cached textures, and all surfaces that draw into |
- // them. |
- size_t renderPassListBegin(const CCRenderPassList& list) const { return list.size() - 1; } |
- size_t renderPassListEnd(const CCRenderPassList&) const { return 0 - 1; } |
- size_t renderPassListNext(size_t it) const { return it - 1; } |
- |
- CullRenderPassesWithCachedTextures(CCRenderer& renderer) : m_renderer(renderer) { } |
- private: |
- CCRenderer& m_renderer; |
- }; |
- |
- class CullRenderPassesWithNoQuads { |
- public: |
- bool shouldRemoveRenderPass(const CCRenderPassDrawQuad&, const FrameData&) const; |
- |
- // Iterates in draw order, so that when a surface is removed, and its |
- // target becomes empty, then its target can be removed also. |
- size_t renderPassListBegin(const CCRenderPassList&) const { return 0; } |
- size_t renderPassListEnd(const CCRenderPassList& list) const { return list.size(); } |
- size_t renderPassListNext(size_t it) const { return it + 1; } |
- }; |
- |
- template<typename RenderPassCuller> |
- static void removeRenderPasses(RenderPassCuller, FrameData&); |
- |
-protected: |
- CCLayerTreeHostImpl(const CCLayerTreeSettings&, CCLayerTreeHostImplClient*); |
- |
- void animatePageScale(double monotonicTime); |
- void animateScrollbars(double monotonicTime); |
- |
- // Exposed for testing. |
- void calculateRenderSurfaceLayerList(CCLayerList&); |
- |
- // Virtual for testing. |
- virtual void animateLayers(double monotonicTime, double wallClockTime); |
- |
- // Virtual for testing. |
- virtual base::TimeDelta lowFrequencyAnimationInterval() const; |
- |
- CCLayerTreeHostImplClient* m_client; |
- int m_sourceFrameNumber; |
- |
-private: |
- void computeDoubleTapZoomDeltas(CCScrollAndScaleSet* scrollInfo); |
- void computePinchZoomDeltas(CCScrollAndScaleSet* scrollInfo); |
- void makeScrollAndScaleSet(CCScrollAndScaleSet* scrollInfo, const IntSize& scrollOffset, float pageScale); |
- |
- void setPageScaleDelta(float); |
- void updateMaxScrollPosition(); |
- void trackDamageForAllSurfaces(CCLayerImpl* rootDrawLayer, const CCLayerList& renderSurfaceLayerList); |
- |
- // Returns false if the frame should not be displayed. This function should |
- // only be called from prepareToDraw, as didDrawAllLayers must be called |
- // if this helper function is called. |
- bool calculateRenderPasses(FrameData&); |
- void animateLayersRecursive(CCLayerImpl*, double monotonicTime, double wallClockTime, CCAnimationEventsVector*, bool& didAnimate, bool& needsAnimateLayers); |
- void setBackgroundTickingEnabled(bool); |
- IntSize contentSize() const; |
- |
- void sendDidLoseContextRecursive(CCLayerImpl*); |
- void clearRenderSurfaces(); |
- bool ensureRenderSurfaceLayerList(); |
- void clearCurrentlyScrollingLayer(); |
- |
- void animateScrollbarsRecursive(CCLayerImpl*, double monotonicTime); |
- |
- void dumpRenderSurfaces(std::string*, int indent, const CCLayerImpl*) const; |
- |
- scoped_ptr<CCGraphicsContext> m_context; |
- OwnPtr<CCResourceProvider> m_resourceProvider; |
- OwnPtr<CCRenderer> m_renderer; |
- scoped_ptr<CCLayerImpl> m_rootLayerImpl; |
- CCLayerImpl* m_rootScrollLayerImpl; |
- CCLayerImpl* m_currentlyScrollingLayerImpl; |
- CCHeadsUpDisplayLayerImpl* m_hudLayerImpl; |
- int m_scrollingLayerIdFromPreviousTree; |
- bool m_scrollDeltaIsInScreenSpace; |
- CCLayerTreeSettings m_settings; |
- IntSize m_layoutViewportSize; |
- IntSize m_deviceViewportSize; |
- float m_deviceScaleFactor; |
- bool m_visible; |
- bool m_contentsTexturesPurged; |
- size_t m_memoryAllocationLimitBytes; |
- |
- SkColor m_backgroundColor; |
- bool m_hasTransparentBackground; |
- |
- // If this is true, it is necessary to traverse the layer tree ticking the animators. |
- bool m_needsAnimateLayers; |
- bool m_pinchGestureActive; |
- IntPoint m_previousPinchAnchor; |
- |
- OwnPtr<CCPageScaleAnimation> m_pageScaleAnimation; |
- |
- // This is used for ticking animations slowly when hidden. |
- OwnPtr<CCLayerTreeHostImplTimeSourceAdapter> m_timeSourceClientAdapter; |
- |
- CCLayerSorter m_layerSorter; |
- |
- // List of visible layers for the most recently prepared frame. Used for |
- // rendering and input event hit testing. |
- CCLayerList m_renderSurfaceLayerList; |
- |
- CCPinchZoomViewport m_pinchZoomViewport; |
- |
- OwnPtr<CCFrameRateCounter> m_fpsCounter; |
- OwnPtr<CCDebugRectHistory> m_debugRectHistory; |
- |
- size_t m_numImplThreadScrolls; |
- size_t m_numMainThreadScrolls; |
- |
- DISALLOW_COPY_AND_ASSIGN(CCLayerTreeHostImpl); |
-}; |
- |
-}; |
- |
-#endif |
+// Temporary forwarding header |
+#include "cc/layer_tree_host_impl.h" |