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
3 // found in the LICENSE file.
5 #ifndef CCSingleThreadProxy_h
6 #define CCSingleThreadProxy_h
8 #include "CCAnimationEvents.h"
9 #include "CCLayerTreeHostImpl.h"
11 #include <base/time.h>
16 class CCLayerTreeHost
;
18 class CCSingleThreadProxy
: public CCProxy
, CCLayerTreeHostImplClient
{
20 static scoped_ptr
<CCProxy
> create(CCLayerTreeHost
*);
21 virtual ~CCSingleThreadProxy();
23 // CCProxy implementation
24 virtual bool compositeAndReadback(void *pixels
, const IntRect
&) OVERRIDE
;
25 virtual void startPageScaleAnimation(const IntSize
& targetPosition
, bool useAnchor
, float scale
, double duration
) OVERRIDE
;
26 virtual void finishAllRendering() OVERRIDE
;
27 virtual bool isStarted() const OVERRIDE
;
28 virtual bool initializeContext() OVERRIDE
;
29 virtual void setSurfaceReady() OVERRIDE
;
30 virtual void setVisible(bool) OVERRIDE
;
31 virtual bool initializeRenderer() OVERRIDE
;
32 virtual bool recreateContext() OVERRIDE
;
33 virtual void renderingStats(CCRenderingStats
*) OVERRIDE
;
34 virtual const RendererCapabilities
& rendererCapabilities() const OVERRIDE
;
35 virtual void loseContext() OVERRIDE
;
36 virtual void setNeedsAnimate() OVERRIDE
;
37 virtual void setNeedsCommit() OVERRIDE
;
38 virtual void setNeedsRedraw() OVERRIDE
;
39 virtual bool commitRequested() const OVERRIDE
;
40 virtual void didAddAnimation() OVERRIDE
;
41 virtual void start() OVERRIDE
;
42 virtual void stop() OVERRIDE
;
43 virtual size_t maxPartialTextureUpdates() const OVERRIDE
;
44 virtual void acquireLayerTextures() OVERRIDE
{ }
45 virtual void forceSerializeOnSwapBuffers() OVERRIDE
;
47 // CCLayerTreeHostImplClient implementation
48 virtual void didLoseContextOnImplThread() OVERRIDE
{ }
49 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE
;
50 virtual void onVSyncParametersChanged(double monotonicTimebase
, double intervalInSeconds
) OVERRIDE
{ }
51 virtual void onCanDrawStateChanged(bool canDraw
) OVERRIDE
{ }
52 virtual void setNeedsRedrawOnImplThread() OVERRIDE
;
53 virtual void setNeedsCommitOnImplThread() OVERRIDE
;
54 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr
<CCAnimationEventsVector
>, double wallClockTime
) OVERRIDE
;
55 virtual void releaseContentsTexturesOnImplThread() OVERRIDE
;
57 // Called by the legacy path where RenderWidget does the scheduling.
58 void compositeImmediately();
61 explicit CCSingleThreadProxy(CCLayerTreeHost
*);
63 bool commitAndComposite();
64 void doCommit(PassOwnPtr
<CCTextureUpdateQueue
>);
68 // Accessed on main thread only.
69 CCLayerTreeHost
* m_layerTreeHost
;
72 // Holds on to the context between initializeContext() and initializeRenderer() calls. Shouldn't
73 // be used for anything else.
74 scoped_ptr
<CCGraphicsContext
> m_contextBeforeInitialization
;
76 // Used on the CCThread, but checked on main thread during initialization/shutdown.
77 scoped_ptr
<CCLayerTreeHostImpl
> m_layerTreeHostImpl
;
78 bool m_rendererInitialized
;
79 RendererCapabilities m_RendererCapabilitiesForMainThread
;
81 bool m_nextFrameIsNewlyCommittedFrame
;
83 base::TimeDelta m_totalCommitTime
;
84 size_t m_totalCommitCount
;
87 // For use in the single-threaded case. In debug builds, it pretends that the
88 // code is running on the impl thread to satisfy assertion checks.
89 class DebugScopedSetImplThread
{
91 DebugScopedSetImplThread()
94 CCProxy::setCurrentThreadIsImplThread(true);
97 ~DebugScopedSetImplThread()
100 CCProxy::setCurrentThreadIsImplThread(false);
105 // For use in the single-threaded case. In debug builds, it pretends that the
106 // code is running on the main thread to satisfy assertion checks.
107 class DebugScopedSetMainThread
{
109 DebugScopedSetMainThread()
112 CCProxy::setCurrentThreadIsImplThread(false);
115 ~DebugScopedSetMainThread()
118 CCProxy::setCurrentThreadIsImplThread(true);
123 // For use in the single-threaded case. In debug builds, it pretends that the
124 // code is running on the impl thread and that the main thread is blocked to
125 // satisfy assertion checks
126 class DebugScopedSetImplThreadAndMainThreadBlocked
{
128 DebugScopedSetImplThread m_implThread
;
129 DebugScopedSetMainThreadBlocked m_mainThreadBlocked
;