blob: 3c35536cba4f35ddbe5186882662d67bcba3717c [file] [log] [blame]
// Copyright 2014 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.
#include "cc/test/fake_external_begin_frame_source.h"
#include "base/location.h"
#include "base/single_thread_task_runner.h"
#include "base/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "cc/test/begin_frame_args_test.h"
namespace cc {
FakeExternalBeginFrameSource::FakeExternalBeginFrameSource(double refresh_rate)
: milliseconds_per_frame_(1000.0 / refresh_rate),
is_ready_(false),
weak_ptr_factory_(this) {
DetachFromThread();
}
FakeExternalBeginFrameSource::~FakeExternalBeginFrameSource() {
DCHECK(CalledOnValidThread());
}
void FakeExternalBeginFrameSource::SetClientReady() {
DCHECK(CalledOnValidThread());
is_ready_ = true;
}
void FakeExternalBeginFrameSource::OnNeedsBeginFramesChange(
bool needs_begin_frames) {
DCHECK(CalledOnValidThread());
if (needs_begin_frames) {
PostTestOnBeginFrame();
}
}
void FakeExternalBeginFrameSource::TestOnBeginFrame() {
DCHECK(CalledOnValidThread());
CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
if (NeedsBeginFrames()) {
PostTestOnBeginFrame();
}
}
void FakeExternalBeginFrameSource::PostTestOnBeginFrame() {
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE, base::Bind(&FakeExternalBeginFrameSource::TestOnBeginFrame,
weak_ptr_factory_.GetWeakPtr()),
base::TimeDelta::FromMilliseconds(milliseconds_per_frame_));
}
} // namespace cc