blob: c1885c143429dafe1bc1a5ac7666e2d7aba77ab9 [file] [log] [blame]
Etienne Membrives175837a2014-12-19 15:45:38 +01001// Copyright 2014 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.
4
5#include "cc/test/fake_external_begin_frame_source.h"
6
7#include "base/location.h"
8#include "base/message_loop/message_loop.h"
9#include "base/time/time.h"
10#include "cc/test/begin_frame_args_test.h"
11
12namespace cc {
13
14FakeExternalBeginFrameSource::FakeExternalBeginFrameSource(double refresh_rate)
15 : milliseconds_per_frame_(1000.0 / refresh_rate),
16 is_ready_(false),
17 weak_ptr_factory_(this) {
18 DetachFromThread();
19}
20
21FakeExternalBeginFrameSource::~FakeExternalBeginFrameSource() {
22 DCHECK(CalledOnValidThread());
23}
24
25void FakeExternalBeginFrameSource::SetClientReady() {
26 DCHECK(CalledOnValidThread());
27 is_ready_ = true;
28}
29
30void FakeExternalBeginFrameSource::OnNeedsBeginFramesChange(
31 bool needs_begin_frames) {
32 DCHECK(CalledOnValidThread());
33 if (needs_begin_frames) {
Benjamin Lerman04616822014-12-22 13:08:16 +010034 PostTestOnBeginFrame();
Etienne Membrives175837a2014-12-19 15:45:38 +010035 }
36}
37
38void FakeExternalBeginFrameSource::TestOnBeginFrame() {
39 DCHECK(CalledOnValidThread());
40 CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
Benjamin Lerman04616822014-12-22 13:08:16 +010041
42 if (NeedsBeginFrames()) {
43 PostTestOnBeginFrame();
44 }
45}
46
47void FakeExternalBeginFrameSource::PostTestOnBeginFrame() {
48 base::MessageLoop::current()->PostDelayedTask(
49 FROM_HERE, base::Bind(&FakeExternalBeginFrameSource::TestOnBeginFrame,
50 weak_ptr_factory_.GetWeakPtr()),
51 base::TimeDelta::FromMilliseconds(milliseconds_per_frame_));
Etienne Membrives175837a2014-12-19 15:45:38 +010052}
53
54} // namespace cc