Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Unified Diff: services/ui/ws/frame_generator_unittest.cc

Issue 2755573002: Add FrameGenerator Unit Tests (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/ws/frame_generator_unittest.cc
diff --git a/services/ui/ws/frame_generator_unittest.cc b/services/ui/ws/frame_generator_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0405eed552782ce0ea5f9bdbfd8f0c11113920d4
--- /dev/null
+++ b/services/ui/ws/frame_generator_unittest.cc
@@ -0,0 +1,112 @@
+// Copyright 2017 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 "services/ui/ws/frame_generator.h"
+
+#include "base/macros.h"
+#include "cc/output/compositor_frame_sink.h"
+#include "cc/scheduler/begin_frame_source.h"
+#include "cc/test/fake_external_begin_frame_source.h"
+#include "services/ui/ws/frame_generator_delegate.h"
+#include "services/ui/ws/server_window.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace ui {
+namespace ws {
+namespace test {
+
+class TestFrameGeneratorDelegate : public FrameGeneratorDelegate {
+ public:
+ TestFrameGeneratorDelegate() {}
+ ~TestFrameGeneratorDelegate() override {}
+
+ // FrameGeneratorDelegate implementation:
+ bool IsInHighContrastMode() override { return false; }
+};
+
+// FakeCompositorFrameSink observes a FakeExternalBeginFrameSource and receives
+// CompositorFrame from a FrameGenerator.
+class FakeCompositorFrameSink : public cc::CompositorFrameSink,
+ public cc::BeginFrameObserver {
+ public:
+ FakeCompositorFrameSink()
+ : cc::CompositorFrameSink(nullptr, nullptr, nullptr, nullptr) {}
+
+ // cc::CompositorFrameSink implementation:
+ bool BindToClient(cc::CompositorFrameSinkClient* client) override {
+ if (!cc::CompositorFrameSink::BindToClient(client))
+ return false;
+
+ return true;
+ }
+
+ void DetachFromClient() override {
+ cc::CompositorFrameSink::DetachFromClient();
+ }
+
+ void SubmitCompositorFrame(cc::CompositorFrame frame) override {
+ ++number_frames_received_;
+ }
+
+ // BeginFrameObserver implementation.
+ void OnBeginFrame(const cc::BeginFrameArgs& args) override {
+ begin_frame_source_->OnBeginFrame(args);
+ last_begin_frame_args_ = args;
+ }
+
+ const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override {
+ return last_begin_frame_args_;
+ }
+
+ void OnBeginFrameSourcePausedChanged(bool paused) override {}
+
+ int number_frames_received() { return number_frames_received_; }
+
+ private:
+ int number_frames_received_ = 0;
+ std::unique_ptr<cc::ExternalBeginFrameSource> begin_frame_source_;
+ cc::BeginFrameArgs last_begin_frame_args_;
+};
+
+class FrameGeneratorTest : public testing::Test {
+ public:
+ FrameGeneratorTest() {}
+ ~FrameGeneratorTest() override {}
+
+ protected:
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest);
+};
+
+TEST_F(FrameGeneratorTest, Creation) {
+ // Create a FrameGenerator-FakeCompositorFrameSink pair
+ // Tick FakeExternalBeginFrameSouce and verified if FakeCompositorFrameSink
+ // receives a CompositorFrameSink based on FrameGenerator's state.
+ constexpr float refresh_rate = 0.f;
+ constexpr bool tick_automatically = false;
+ const cc::BeginFrameArgs kArgs;
+
+ // TODO(staraz): Put some of this in SetUp()
+ std::unique_ptr<FakeCompositorFrameSink> compositor_frame_sink =
+ base::MakeUnique<FakeCompositorFrameSink>();
+ cc::FakeExternalBeginFrameSource begin_frame_source(refresh_rate,
+ tick_automatically);
+ begin_frame_source.AddObserver(compositor_frame_sink.get());
+ TestFrameGeneratorDelegate delegate;
+ ServerWindow root_window(nullptr, WindowId());
+ root_window.SetVisible(true);
+ FrameGenerator frame_generator(&delegate, &root_window,
+ std::move(compositor_frame_sink));
Fady Samuel 2017/03/15 00:06:07 I would move most of the above to a FrameGenerator
Alex Z. 2017/03/15 17:40:00 Done.
+ EXPECT_EQ(0, compositor_frame_sink->number_frames_received());
+
+ // FrameGenerator does not request BeginFrames upon creation.
+ begin_frame_source.TestOnBeginFrame(kArgs);
Fady Samuel 2017/03/15 00:06:07 Make this a public method "IssueBeginFrame" on Fra
Alex Z. 2017/03/15 17:40:00 Done.
+ EXPECT_EQ(0, compositor_frame_sink->number_frames_received());
+}
Fady Samuel 2017/03/15 00:06:07 This unit test can probably collapse to look like
Alex Z. 2017/03/15 17:40:01 Done.
+
+// TODO(staraz): Add OnSurfaceCreated test and SetDeviceScaleFactor test.
+
+} // namespace test
+} // namespace ws
+} // namespace ui
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698