Fix Win8 metro startup crash from window switcher button
[chromium-blink-merge.git] / cc / scheduler / rate_limiter.cc
blob3508adfe00e26f1961337fefa6164e039b10ccc7
1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "cc/scheduler/rate_limiter.h"
7 #include "base/debug/trace_event.h"
8 #include "cc/base/thread.h"
9 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3D.h"
11 namespace cc {
13 scoped_refptr<RateLimiter> RateLimiter::Create(
14 WebKit::WebGraphicsContext3D* context,
15 RateLimiterClient* client,
16 Thread* thread) {
17 return make_scoped_refptr(new RateLimiter(context, client, thread));
20 RateLimiter::RateLimiter(WebKit::WebGraphicsContext3D* context,
21 RateLimiterClient* client,
22 Thread* thread)
23 : context_(context),
24 active_(false),
25 client_(client),
26 thread_(thread) {
27 DCHECK(context);
30 RateLimiter::~RateLimiter() {}
32 void RateLimiter::Start() {
33 if (active_)
34 return;
36 TRACE_EVENT0("cc", "RateLimiter::Start");
37 active_ = true;
38 thread_->PostTask(base::Bind(&RateLimiter::RateLimitContext, this));
41 void RateLimiter::Stop() {
42 TRACE_EVENT0("cc", "RateLimiter::Stop");
43 client_ = NULL;
46 void RateLimiter::RateLimitContext() {
47 if (!client_)
48 return;
50 TRACE_EVENT0("cc", "RateLimiter::RateLimitContext");
52 active_ = false;
53 client_->RateLimit();
54 context_->rateLimitOffscreenContextCHROMIUM();
57 } // namespace cc