summaryrefslogtreecommitdiffstats
path: root/cc/RateLimiter.h
diff options
context:
space:
mode:
Diffstat (limited to 'cc/RateLimiter.h')
-rw-r--r--cc/RateLimiter.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/cc/RateLimiter.h b/cc/RateLimiter.h
new file mode 100644
index 0000000..8cb8a1d
--- /dev/null
+++ b/cc/RateLimiter.h
@@ -0,0 +1,53 @@
+// 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 RateLimiter_h
+#define RateLimiter_h
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebKit {
+class WebGraphicsContext3D;
+}
+
+namespace WebCore {
+
+class RateLimiterClient {
+public:
+ virtual void rateLimit() = 0;
+};
+
+// A RateLimiter can be used to make sure that a single context does not dominate all execution time.
+// To use, construct a RateLimiter class around the context and call start() whenever calls are made on the
+// context outside of normal flow control. RateLimiter will block if the context is too far ahead of the
+// compositor.
+class RateLimiter : public RefCounted<RateLimiter> {
+public:
+ static PassRefPtr<RateLimiter> create(WebKit::WebGraphicsContext3D*, RateLimiterClient*);
+ ~RateLimiter();
+
+ void start();
+
+ // Context and client will not be accessed after stop().
+ void stop();
+
+private:
+ RateLimiter(WebKit::WebGraphicsContext3D*, RateLimiterClient*);
+
+ class Task;
+ friend class Task;
+ void rateLimitContext();
+
+ WebKit::WebGraphicsContext3D* m_context;
+ bool m_active;
+ RateLimiterClient *m_client;
+};
+
+}
+#endif // USE(ACCELERATED_COMPOSITING)
+
+#endif