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

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

Issue 2755573002: Add FrameGenerator Unit Tests (Closed)
Patch Set: Clean up 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
« services/ui/ws/frame_generator.cc ('K') | « 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..6b7d7736d4a98c58121aa89eb2d7bb2e338253f7
--- /dev/null
+++ b/services/ui/ws/frame_generator_unittest.cc
@@ -0,0 +1,159 @@
+// 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/begin_frame_args_test.cc"
+#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 "services/ui/ws/server_window_delegate.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; }
+};
+
+class TestServerWindowDelegate : public ServerWindowDelegate {
+ public:
+ TestServerWindowDelegate() {}
+ ~TestServerWindowDelegate() override {}
+
+ // ServerWindowDelegate implementation:
+ cc::mojom::DisplayCompositor* GetDisplayCompositor() override {
+ return nullptr;
+ }
+
+ ServerWindow* GetRootWindow(const ServerWindow* window) override {
+ return nullptr;
+ }
+};
+
+// FakeCompositorFrameSink observes a FakeExternalBeginFrameSource and receives
+// CompositorFrame from a FrameGenerator.
+class FakeCompositorFrameSink : public cc::CompositorFrameSink,
+ public cc::BeginFrameObserver,
+ public cc::ExternalBeginFrameSourceClient {
+ public:
+ FakeCompositorFrameSink()
+ : cc::CompositorFrameSink(nullptr, nullptr, nullptr, nullptr) {}
+
+ // cc::CompositorFrameSink implementation:
+ bool BindToClient(cc::CompositorFrameSinkClient* client) override {
+ if (!cc::CompositorFrameSink::BindToClient(client))
+ return false;
+
+ begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
+ client_->SetBeginFrameSource(begin_frame_source_.get());
+ return true;
+ }
+
+ void DetachFromClient() override {
+ cc::CompositorFrameSink::DetachFromClient();
+ }
+
+ void SubmitCompositorFrame(cc::CompositorFrame frame) override {
+ ++number_frames_received_;
+ }
+
+ // cc::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 {}
+
+ // cc::ExternalBeginFrameSourceClient implementation:
+ void OnNeedsBeginFrames(bool needs_begin_frames) override {}
+
+ void OnDidFinishFrame(const cc::BeginFrameAck& ack) 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 {}
+
+ // testing::Test overrides:
+ void SetUp() override {
+ testing::Test::SetUp();
+
+ std::unique_ptr<FakeCompositorFrameSink> compositor_frame_sink =
+ base::MakeUnique<FakeCompositorFrameSink>();
+ compositor_frame_sink_ = compositor_frame_sink.get();
+
+ constexpr float kRefreshRate = 0.f;
+ constexpr bool kTickAutomatically = false;
+ begin_frame_source_ = base::MakeUnique<cc::FakeExternalBeginFrameSource>(
+ kRefreshRate, kTickAutomatically);
+ begin_frame_source_->AddObserver(compositor_frame_sink_);
+ delegate_ = base::MakeUnique<TestFrameGeneratorDelegate>();
+ server_window_delegate_ = base::MakeUnique<TestServerWindowDelegate>();
+ root_window_ = base::MakeUnique<ServerWindow>(server_window_delegate_.get(),
+ WindowId());
+ root_window_->SetVisible(true);
+ frame_generator_ = base::MakeUnique<FrameGenerator>(
+ delegate_.get(), root_window_.get(), std::move(compositor_frame_sink));
+ };
+
+ void TearDown() override { testing::Test::TearDown(); }
+
+ int NumberOfFramesRecieved() {
+ return compositor_frame_sink_->number_frames_received();
+ }
+
+ void IssueBeginFrame(const cc::BeginFrameArgs& args) {
+ begin_frame_source_->TestOnBeginFrame(args);
+ }
+
+ private:
+ FakeCompositorFrameSink* compositor_frame_sink_ = nullptr;
+ std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_;
+ std::unique_ptr<TestFrameGeneratorDelegate> delegate_;
+ std::unique_ptr<TestServerWindowDelegate> server_window_delegate_;
+ std::unique_ptr<ServerWindow> root_window_;
+ std::unique_ptr<FrameGenerator> frame_generator_;
+
+ DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest);
+};
+
+TEST_F(FrameGeneratorTest, Creation) {
+ DCHECK_EQ(0, NumberOfFramesRecieved());
+
+ // FrameGenerator does not request BeginFrames upon creation.
+ cc::BeginFrameArgs args =
+ cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1);
+ IssueBeginFrame(args);
+ EXPECT_EQ(0, NumberOfFramesRecieved());
Fady Samuel 2017/03/15 17:47:00 I'd like to see this do a bit more: EXPECT_EQ(0,
Alex Z. 2017/03/15 20:37:12 Done.
+}
+
+// TODO(staraz): Add OnSurfaceCreated test and SetDeviceScaleFactor test.
+
+} // namespace test
+} // namespace ws
+} // namespace ui
« services/ui/ws/frame_generator.cc ('K') | « services/ui/ws/frame_generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698