| Index: cc/thread_proxy.h
|
| diff --git a/cc/thread_proxy.h b/cc/thread_proxy.h
|
| index 638cbb270ce9b24689d5095baf174ade4f4d1a13..a6ea6acbbc22c464483c928c491150877f7acd4e 100644
|
| --- a/cc/thread_proxy.h
|
| +++ b/cc/thread_proxy.h
|
| @@ -1,3 +1,185 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| +// Copyright 2011 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 CCThreadProxy_h
|
| +#define CCThreadProxy_h
|
| +
|
| +#include "CCAnimationEvents.h"
|
| +#include "CCCompletionEvent.h"
|
| +#include "CCLayerTreeHostImpl.h"
|
| +#include "CCProxy.h"
|
| +#include "CCScheduler.h"
|
| +#include "CCTextureUpdateController.h"
|
| +#include <base/time.h>
|
| +#include <wtf/OwnPtr.h>
|
| +
|
| +namespace cc {
|
| +
|
| +class CCInputHandler;
|
| +class CCLayerTreeHost;
|
| +class CCScheduler;
|
| +class CCScopedThreadProxy;
|
| +class CCTextureUpdateQueue;
|
| +class CCThread;
|
| +class CCThreadProxyContextRecreationTimer;
|
| +
|
| +class CCThreadProxy : public CCProxy, CCLayerTreeHostImplClient, CCSchedulerClient, CCTextureUpdateControllerClient {
|
| +public:
|
| + static scoped_ptr<CCProxy> create(CCLayerTreeHost*);
|
| +
|
| + virtual ~CCThreadProxy();
|
| +
|
| + // CCProxy implementation
|
| + virtual bool compositeAndReadback(void *pixels, const IntRect&) OVERRIDE;
|
| + virtual void startPageScaleAnimation(const IntSize& targetPosition, bool useAnchor, float scale, double duration) OVERRIDE;
|
| + virtual void finishAllRendering() OVERRIDE;
|
| + virtual bool isStarted() const OVERRIDE;
|
| + virtual bool initializeContext() OVERRIDE;
|
| + virtual void setSurfaceReady() OVERRIDE;
|
| + virtual void setVisible(bool) OVERRIDE;
|
| + virtual bool initializeRenderer() OVERRIDE;
|
| + virtual bool recreateContext() OVERRIDE;
|
| + virtual void renderingStats(CCRenderingStats*) OVERRIDE;
|
| + virtual const RendererCapabilities& rendererCapabilities() const OVERRIDE;
|
| + virtual void loseContext() OVERRIDE;
|
| + virtual void setNeedsAnimate() OVERRIDE;
|
| + virtual void setNeedsCommit() OVERRIDE;
|
| + virtual void setNeedsRedraw() OVERRIDE;
|
| + virtual bool commitRequested() const OVERRIDE;
|
| + virtual void didAddAnimation() OVERRIDE { }
|
| + virtual void start() OVERRIDE;
|
| + virtual void stop() OVERRIDE;
|
| + virtual size_t maxPartialTextureUpdates() const OVERRIDE;
|
| + virtual void acquireLayerTextures() OVERRIDE;
|
| + virtual void forceSerializeOnSwapBuffers() OVERRIDE;
|
| +
|
| + // CCLayerTreeHostImplClient implementation
|
| + virtual void didLoseContextOnImplThread() OVERRIDE;
|
| + virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE;
|
| + virtual void onVSyncParametersChanged(double monotonicTimebase, double intervalInSeconds) OVERRIDE;
|
| + virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE;
|
| + virtual void setNeedsRedrawOnImplThread() OVERRIDE;
|
| + virtual void setNeedsCommitOnImplThread() OVERRIDE;
|
| + virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<CCAnimationEventsVector>, double wallClockTime) OVERRIDE;
|
| + virtual void releaseContentsTexturesOnImplThread() OVERRIDE;
|
| +
|
| + // CCSchedulerClient implementation
|
| + virtual void scheduledActionBeginFrame() OVERRIDE;
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() OVERRIDE;
|
| + virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced() OVERRIDE;
|
| + virtual void scheduledActionCommit() OVERRIDE;
|
| + virtual void scheduledActionBeginContextRecreation() OVERRIDE;
|
| + virtual void scheduledActionAcquireLayerTexturesForMainThread() OVERRIDE;
|
| + virtual void didAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE;
|
| +
|
| + // CCTextureUpdateControllerClient implementation
|
| + virtual void readyToFinalizeTextureUpdates() OVERRIDE;
|
| +
|
| +private:
|
| + explicit CCThreadProxy(CCLayerTreeHost*);
|
| + friend class CCThreadProxyContextRecreationTimer;
|
| +
|
| + // Set on impl thread, read on main thread.
|
| + struct BeginFrameAndCommitState {
|
| + BeginFrameAndCommitState();
|
| + ~BeginFrameAndCommitState();
|
| +
|
| + double monotonicFrameBeginTime;
|
| + scoped_ptr<CCScrollAndScaleSet> scrollInfo;
|
| + WebKit::WebTransformationMatrix implTransform;
|
| + CCPrioritizedTextureManager::BackingVector evictedContentsTexturesBackings;
|
| + size_t memoryAllocationLimitBytes;
|
| + };
|
| + OwnPtr<BeginFrameAndCommitState> m_pendingBeginFrameRequest;
|
| +
|
| + // Called on main thread
|
| + void beginFrame();
|
| + void didCommitAndDrawFrame();
|
| + void didCompleteSwapBuffers();
|
| + void setAnimationEvents(CCAnimationEventsVector*, double wallClockTime);
|
| + void beginContextRecreation();
|
| + void tryToRecreateContext();
|
| +
|
| + // Called on impl thread
|
| + struct ReadbackRequest {
|
| + CCCompletionEvent completion;
|
| + bool success;
|
| + void* pixels;
|
| + IntRect rect;
|
| + };
|
| + void forceBeginFrameOnImplThread(CCCompletionEvent*);
|
| + void beginFrameCompleteOnImplThread(CCCompletionEvent*, PassOwnPtr<CCTextureUpdateQueue>);
|
| + void beginFrameAbortedOnImplThread();
|
| + void requestReadbackOnImplThread(ReadbackRequest*);
|
| + void requestStartPageScaleAnimationOnImplThread(IntSize targetPosition, bool useAnchor, float scale, double durationSec);
|
| + void finishAllRenderingOnImplThread(CCCompletionEvent*);
|
| + void initializeImplOnImplThread(CCCompletionEvent*, CCInputHandler*);
|
| + void setSurfaceReadyOnImplThread();
|
| + void setVisibleOnImplThread(CCCompletionEvent*, bool);
|
| + void initializeContextOnImplThread(CCGraphicsContext*);
|
| + void initializeRendererOnImplThread(CCCompletionEvent*, bool* initializeSucceeded, RendererCapabilities*);
|
| + void layerTreeHostClosedOnImplThread(CCCompletionEvent*);
|
| + void setFullRootLayerDamageOnImplThread();
|
| + void acquireLayerTexturesForMainThreadOnImplThread(CCCompletionEvent*);
|
| + void recreateContextOnImplThread(CCCompletionEvent*, CCGraphicsContext*, bool* recreateSucceeded, RendererCapabilities*);
|
| + void renderingStatsOnImplThread(CCCompletionEvent*, CCRenderingStats*);
|
| + CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapInternal(bool forcedDraw);
|
| + void forceSerializeOnSwapBuffersOnImplThread(CCCompletionEvent*);
|
| + void setNeedsForcedCommitOnImplThread();
|
| +
|
| + // Accessed on main thread only.
|
| + bool m_animateRequested; // Set only when setNeedsAnimate is called.
|
| + bool m_commitRequested; // Set only when setNeedsCommit is called.
|
| + bool m_commitRequestSentToImplThread; // Set by setNeedsCommit and setNeedsAnimate.
|
| + bool m_forcedCommitRequested;
|
| + OwnPtr<CCThreadProxyContextRecreationTimer> m_contextRecreationTimer;
|
| + CCLayerTreeHost* m_layerTreeHost;
|
| + bool m_rendererInitialized;
|
| + RendererCapabilities m_RendererCapabilitiesMainThreadCopy;
|
| + bool m_started;
|
| + bool m_texturesAcquired;
|
| + bool m_inCompositeAndReadback;
|
| +
|
| + scoped_ptr<CCLayerTreeHostImpl> m_layerTreeHostImpl;
|
| +
|
| + scoped_ptr<CCInputHandler> m_inputHandlerOnImplThread;
|
| +
|
| + OwnPtr<CCScheduler> m_schedulerOnImplThread;
|
| +
|
| + RefPtr<CCScopedThreadProxy> m_mainThreadProxy;
|
| +
|
| + // Holds on to the context we might use for compositing in between initializeContext()
|
| + // and initializeRenderer() calls.
|
| + scoped_ptr<CCGraphicsContext> m_contextBeforeInitializationOnImplThread;
|
| +
|
| + // Set when the main thread is waiting on a scheduledActionBeginFrame to be issued.
|
| + CCCompletionEvent* m_beginFrameCompletionEventOnImplThread;
|
| +
|
| + // Set when the main thread is waiting on a readback.
|
| + ReadbackRequest* m_readbackRequestOnImplThread;
|
| +
|
| + // Set when the main thread is waiting on a commit to complete.
|
| + CCCompletionEvent* m_commitCompletionEventOnImplThread;
|
| +
|
| + // Set when the main thread is waiting on layers to be drawn.
|
| + CCCompletionEvent* m_textureAcquisitionCompletionEventOnImplThread;
|
| +
|
| + OwnPtr<CCTextureUpdateController> m_currentTextureUpdateControllerOnImplThread;
|
| +
|
| + // Set when we need to reset the contentsTexturesPurged flag after the
|
| + // commit.
|
| + bool m_resetContentsTexturesPurgedAfterCommitOnImplThread;
|
| +
|
| + // Set when the next draw should post didCommitAndDrawFrame to the main thread.
|
| + bool m_nextFrameIsNewlyCommittedFrameOnImplThread;
|
| +
|
| + bool m_renderVSyncEnabled;
|
| +
|
| + base::TimeDelta m_totalCommitTime;
|
| + size_t m_totalCommitCount;
|
| +};
|
| +
|
| +}
|
| +
|
| +#endif
|
|
|