summaryrefslogtreecommitdiff
path: root/chromium/cc/scheduler/rate_limiter.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/cc/scheduler/rate_limiter.h')
-rw-r--r--chromium/cc/scheduler/rate_limiter.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/chromium/cc/scheduler/rate_limiter.h b/chromium/cc/scheduler/rate_limiter.h
new file mode 100644
index 00000000000..04b90772e36
--- /dev/null
+++ b/chromium/cc/scheduler/rate_limiter.h
@@ -0,0 +1,61 @@
+// 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 CC_SCHEDULER_RATE_LIMITER_H_
+#define CC_SCHEDULER_RATE_LIMITER_H_
+
+#include "base/memory/ref_counted.h"
+
+namespace base { class SingleThreadTaskRunner; }
+
+namespace WebKit { class WebGraphicsContext3D; }
+
+namespace cc {
+
+class RateLimiterClient {
+ public:
+ virtual void RateLimit() = 0;
+
+ protected:
+ virtual ~RateLimiterClient() {}
+};
+
+// 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* context,
+ RateLimiterClient* client,
+ base::SingleThreadTaskRunner* task_runner);
+
+ void Start();
+
+ // Context and client will not be accessed after Stop().
+ void Stop();
+
+ private:
+ friend class base::RefCounted<RateLimiter>;
+
+ RateLimiter(WebKit::WebGraphicsContext3D* context,
+ RateLimiterClient* client,
+ base::SingleThreadTaskRunner* task_runner);
+ ~RateLimiter();
+
+ void RateLimitContext();
+
+ WebKit::WebGraphicsContext3D* context_;
+ bool active_;
+ RateLimiterClient* client_;
+ base::SingleThreadTaskRunner* task_runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(RateLimiter);
+};
+
+} // namespace cc
+
+#endif // CC_SCHEDULER_RATE_LIMITER_H_