Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(432)

Unified Diff: ui/cc/cc/CCScheduler.h

Issue 10701016: Initial import attempt, just to play with. Many things disabled/removed (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/cc/cc/CCRenderingStats.h ('k') | ui/cc/cc/CCScheduler.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/cc/cc/CCScheduler.h
diff --git a/ui/cc/cc/CCScheduler.h b/ui/cc/cc/CCScheduler.h
new file mode 100644
index 0000000000000000000000000000000000000000..3e6f7aa7b8157aa224609c29a37f45b696bbd612
--- /dev/null
+++ b/ui/cc/cc/CCScheduler.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CCScheduler_h
+#define CCScheduler_h
+
+#include "cc/CCFrameRateController.h"
+#include "cc/CCSchedulerStateMachine.h"
+
+#include <wtf/Noncopyable.h>
+#include <wtf/PassOwnPtr.h>
+
+namespace WebCore {
+
+class CCThread;
+
+struct CCScheduledActionDrawAndSwapResult {
+ CCScheduledActionDrawAndSwapResult()
+ : didDraw(false)
+ , didSwap(false)
+ {
+ }
+ CCScheduledActionDrawAndSwapResult(bool didDraw, bool didSwap)
+ : didDraw(didDraw)
+ , didSwap(didSwap)
+ {
+ }
+ bool didDraw;
+ bool didSwap;
+};
+
+class CCSchedulerClient {
+public:
+ virtual bool canDraw() = 0;
+ virtual bool hasMoreResourceUpdates() const = 0;
+
+ virtual void scheduledActionBeginFrame() = 0;
+ virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapIfPossible() = 0;
+ virtual CCScheduledActionDrawAndSwapResult scheduledActionDrawAndSwapForced() = 0;
+ virtual void scheduledActionUpdateMoreResources() = 0;
+ virtual void scheduledActionCommit() = 0;
+ virtual void scheduledActionBeginContextRecreation() = 0;
+ virtual void scheduledActionAcquireLayerTexturesForMainThread() = 0;
+
+protected:
+ virtual ~CCSchedulerClient() { }
+};
+
+class CCScheduler : CCFrameRateControllerClient {
+ WTF_MAKE_NONCOPYABLE(CCScheduler);
+public:
+ static PassOwnPtr<CCScheduler> create(CCSchedulerClient* client, PassOwnPtr<CCFrameRateController> frameRateController)
+ {
+ return adoptPtr(new CCScheduler(client, frameRateController));
+ }
+
+ virtual ~CCScheduler();
+
+ void setCanBeginFrame(bool);
+
+ void setVisible(bool);
+
+ void setNeedsCommit();
+
+ // Like setNeedsCommit(), but ensures a commit will definitely happen even if we are not visible.
+ void setNeedsForcedCommit();
+
+ void setNeedsRedraw();
+
+ void setMainThreadNeedsLayerTextures();
+
+ // Like setNeedsRedraw(), but ensures the draw will definitely happen even if we are not visible.
+ void setNeedsForcedRedraw();
+
+ void beginFrameComplete();
+ void beginFrameAborted();
+
+ void setMaxFramesPending(int);
+ void didSwapBuffersComplete();
+
+ void didLoseContext();
+ void didRecreateContext();
+
+ bool commitPending() const { return m_stateMachine.commitPending(); }
+ bool redrawPending() const { return m_stateMachine.redrawPending(); }
+
+ // CCFrameRateControllerClient implementation
+ virtual void vsyncTick() OVERRIDE;
+
+private:
+ CCScheduler(CCSchedulerClient*, PassOwnPtr<CCFrameRateController>);
+
+ CCSchedulerStateMachine::Action nextAction();
+ void processScheduledActions();
+
+ CCSchedulerClient* m_client;
+ OwnPtr<CCFrameRateController> m_frameRateController;
+ CCSchedulerStateMachine m_stateMachine;
+ bool m_updateMoreResourcesPending;
+};
+
+}
+
+#endif // CCScheduler_h
« no previous file with comments | « ui/cc/cc/CCRenderingStats.h ('k') | ui/cc/cc/CCScheduler.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698