Index: cc/rate_limiter.h |
diff --git a/cc/rate_limiter.h b/cc/rate_limiter.h |
index 638cbb270ce9b24689d5095baf174ade4f4d1a13..7b48d742b7df083bd39ccea05986a54502097a2d 100644 |
--- a/cc/rate_limiter.h |
+++ b/cc/rate_limiter.h |
@@ -1,3 +1,53 @@ |
-// 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 RateLimiter_h |
+#define RateLimiter_h |
+ |
+#if USE(ACCELERATED_COMPOSITING) |
+ |
+#include "base/memory/ref_counted.h" |
+ |
+namespace WebKit { |
+class WebGraphicsContext3D; |
+} |
+ |
+namespace cc { |
+ |
+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 base::RefCounted<RateLimiter> { |
+public: |
+ static scoped_refptr<RateLimiter> create(WebKit::WebGraphicsContext3D*, RateLimiterClient*); |
+ |
+ void start(); |
+ |
+ // Context and client will not be accessed after stop(). |
+ void stop(); |
+ |
+private: |
+ RateLimiter(WebKit::WebGraphicsContext3D*, RateLimiterClient*); |
+ ~RateLimiter(); |
+ friend class base::RefCounted<RateLimiter>; |
+ |
+ class Task; |
+ friend class Task; |
+ void rateLimitContext(); |
+ |
+ WebKit::WebGraphicsContext3D* m_context; |
+ bool m_active; |
+ RateLimiterClient *m_client; |
+}; |
+ |
+} |
+#endif // USE(ACCELERATED_COMPOSITING) |
+ |
+#endif |