| Index: cc/scheduler/frame_source_unittest.cc
|
| diff --git a/cc/scheduler/frame_source_unittest.cc b/cc/scheduler/frame_source_unittest.cc
|
| index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d9a47b9f8c3d2f5dca8b651ffeef7fa24d918f6a 100644
|
| --- a/cc/scheduler/frame_source_unittest.cc
|
| +++ b/cc/scheduler/frame_source_unittest.cc
|
| @@ -0,0 +1,176 @@
|
| +// 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.
|
| +
|
| +#include <deque>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/gtest_prod_util.h"
|
| +#include "base/test/test_simple_task_runner.h"
|
| +#include "cc/scheduler/frame_source.h"
|
| +#include "cc/test/begin_frame_args_test.h"
|
| +#include "cc/test/scheduler_test_common.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace cc {
|
| +namespace {
|
| +
|
| +class FakeBeginFrameSink : public BeginFrameSink {
|
| + public:
|
| + void Expect(BeginFrameArgs args) { expected_.push_back(args); }
|
| +
|
| + virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {
|
| + ASSERT_GT(expected_.size(), 0U) << "Unexpected BeginFrame("
|
| + << ::testing::PrintToString(args)
|
| + << ") call!";
|
| + EXPECT_EQ(expected_[0], args);
|
| + expected_.pop_front();
|
| + }
|
| +
|
| + virtual void Reset() {
|
| + EXPECT_EQ(expected_.size(), 0U) << "Missing " << expected_.size()
|
| + << " BeginFrame calls!";
|
| + expected_.clear();
|
| + }
|
| +
|
| + virtual ~FakeBeginFrameSink() { Reset(); }
|
| +
|
| + private:
|
| + std::deque<BeginFrameArgs> expected_;
|
| +};
|
| +
|
| +class FakeBeginFrameSource : public BaseBeginFrameSource {
|
| + public:
|
| + FakeBeginFrameSource() : BaseBeginFrameSource(0) {}
|
| +
|
| + void SendTestBeginFrame(const BeginFrameArgs& args) {
|
| + frame_sink_->BeginFrame(args);
|
| + }
|
| +
|
| + protected:
|
| + virtual std::string TypeString() const OVERRIDE {
|
| + return "FakeBeginFrameSource";
|
| + }
|
| +
|
| + FRIEND_TEST_ALL_PREFIXES(BeginFrameSourceTest, ProxyFrameSource);
|
| + FRIEND_TEST_ALL_PREFIXES(BeginFrameSourceTest, DualFrameSource);
|
| +};
|
| +
|
| +TEST(BeginFrameSourceTest, ProxyFrameSource) {
|
| + FakeBeginFrameSink sink;
|
| + FakeBeginFrameSource source;
|
| +
|
| + // BeginFrame
|
| + sink.Expect(CreateBeginFrameArgsForTesting(100, 200, 300));
|
| + sink.Expect(CreateBeginFrameArgsForTesting(400, 600, 300));
|
| + ProxyBeginFrameSource proxy(&sink, &source);
|
| + proxy.BeginFrame(CreateBeginFrameArgsForTesting(100, 200, 300));
|
| + proxy.BeginFrame(CreateBeginFrameArgsForTesting(400, 600, 300));
|
| +
|
| + // SetGenerateFrames
|
| + source.generate_frames_ = false;
|
| + proxy.SetGenerateFrames(true);
|
| + EXPECT_EQ(source.generate_frames_, true);
|
| + proxy.SetGenerateFrames(false);
|
| + EXPECT_EQ(source.generate_frames_, false);
|
| +
|
| + // PendingFrames
|
| +
|
| + // SetTimeBaseAndInterval
|
| + source.timebase_ = base::TimeTicks();
|
| + source.interval_ = base::TimeDelta();
|
| + proxy.SetTimeBaseAndInterval(base::TimeTicks::FromInternalValue(123),
|
| + base::TimeDelta::FromInternalValue(456));
|
| + EXPECT_EQ(source.timebase_.ToInternalValue(), 123);
|
| + EXPECT_EQ(source.interval_.ToInternalValue(), 456);
|
| +}
|
| +
|
| +TEST(BeginFrameSourceTest, ThrottledFrameSource) {
|
| + FakeBeginFrameSink sink;
|
| + FakeBeginFrameSource source;
|
| +
|
| + ThrottledBeginFrameSource throttle(
|
| + &sink, &source, base::TimeDelta::FromInternalValue(600));
|
| +
|
| + sink.Expect(CreateBeginFrameArgsForTesting(100, 200, 300));
|
| + sink.Expect(CreateBeginFrameArgsForTesting(700, 900, 300));
|
| + source.SendTestBeginFrame(CreateBeginFrameArgsForTesting(100, 200, 300));
|
| + source.SendTestBeginFrame(CreateBeginFrameArgsForTesting(400, 600, 300));
|
| + source.SendTestBeginFrame(CreateBeginFrameArgsForTesting(700, 900, 300));
|
| +}
|
| +
|
| +TEST(BeginFrameSourceTest, BackToBackFrameSource) {
|
| + FakeBeginFrameSink sink;
|
| + // BackToBackBeginFrameSource source;
|
| +}
|
| +
|
| +TEST(BeginFrameSourceTest, SyntheticFrameSource) {
|
| + FakeBeginFrameSink sink;
|
| + // SyntheticFrameSource
|
| +}
|
| +
|
| +TEST(BeginFrameSourceTest, DualFrameSource) {
|
| + FakeBeginFrameSink sink;
|
| +
|
| + FakeBeginFrameSource* fake_primary = new FakeBeginFrameSource();
|
| + fake_primary->generate_frames_ = false;
|
| + FakeBeginFrameSource* fake_secondary = new FakeBeginFrameSource();
|
| + fake_secondary->generate_frames_ = false;
|
| +
|
| + DualBeginFrameSource source(&sink,
|
| + scoped_ptr<BeginFrameSource>(fake_primary),
|
| + scoped_ptr<BeginFrameSource>(fake_secondary));
|
| + source.SwitchSource(source.SourceForeground());
|
| +
|
| + // Check SetGenerateFrames works
|
| + source.SetGenerateFrames(true);
|
| + EXPECT_EQ(fake_primary->generate_frames_, true);
|
| + EXPECT_EQ(fake_secondary->generate_frames_, false);
|
| + source.SetGenerateFrames(false);
|
| + EXPECT_EQ(fake_primary->generate_frames_, false);
|
| + EXPECT_EQ(fake_secondary->generate_frames_, false);
|
| +
|
| + // Checking that switching the source makes SetGenerateFrames on the
|
| + // subsources correctly.
|
| + source.SetGenerateFrames(true);
|
| + source.SwitchSource(source.SourceBackground());
|
| + EXPECT_EQ(fake_primary->generate_frames_, false);
|
| + EXPECT_EQ(fake_secondary->generate_frames_, true);
|
| + source.SwitchSource(source.SourceForeground());
|
| + EXPECT_EQ(fake_primary->generate_frames_, true);
|
| + EXPECT_EQ(fake_secondary->generate_frames_, false);
|
| +
|
| + sink.Reset();
|
| +
|
| + // Check that BeginFrame calls end up at the sink
|
| + {
|
| + SCOPED_TRACE("First test");
|
| + sink.Expect(CreateBeginFrameArgsForTesting(100, 200, 300));
|
| + sink.Expect(CreateBeginFrameArgsForTesting(400, 600, 300));
|
| + fake_primary->SendTestBeginFrame(
|
| + CreateBeginFrameArgsForTesting(100, 200, 300));
|
| + fake_secondary->SendTestBeginFrame(
|
| + CreateBeginFrameArgsForTesting(400, 600, 300));
|
| + sink.Reset();
|
| + }
|
| +
|
| + // Check that BeginFrames can't go backwards
|
| + {
|
| + SCOPED_TRACE("Backwards test");
|
| + sink.Expect(CreateBeginFrameArgsForTesting(400, 600, 300));
|
| + sink.Expect(CreateBeginFrameArgsForTesting(700, 900, 300));
|
| + sink.Expect(CreateBeginFrameArgsForTesting(1000, 1200, 300));
|
| + fake_primary->SendTestBeginFrame(
|
| + CreateBeginFrameArgsForTesting(400, 600, 300));
|
| + fake_primary->SendTestBeginFrame(
|
| + CreateBeginFrameArgsForTesting(700, 900, 300));
|
| + fake_secondary->SendTestBeginFrame(
|
| + CreateBeginFrameArgsForTesting(699, 899, 300));
|
| + fake_primary->SendTestBeginFrame(
|
| + CreateBeginFrameArgsForTesting(1000, 1200, 300));
|
| + sink.Reset();
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace cc
|
|
|