diff options
Diffstat (limited to 'chromium/cc/scheduler/rate_limiter.h')
-rw-r--r-- | chromium/cc/scheduler/rate_limiter.h | 61 |
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_ |