Commit ce60f136 authored by Maksim Sisov's avatar Maksim Sisov Committed by Commit Bot

[ozone/wayland] Manager tests: exercise tests with mojo calls

Previously, unittests for the buffer manager exercised only
the host part.

Now, they are also exercising the buffer manager gpu part and
reinitialization of the mojo connection between the gpu and host.

Bug: 969608
Change-Id: I07af295d5a75ba6cf3f73caa7a74e3e6ec24f180
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1640538
Commit-Queue: Maksim Sisov <msisov@igalia.com>
Reviewed-by: default avatarRobert Kroeger <rjkroege@chromium.org>
Cr-Commit-Position: refs/heads/master@{#665843}
parent 26c5db96
...@@ -238,7 +238,6 @@ source_set("wayland_unittests") { ...@@ -238,7 +238,6 @@ source_set("wayland_unittests") {
sources = [ sources = [
"gpu/wayland_surface_factory_unittest.cc", "gpu/wayland_surface_factory_unittest.cc",
"host/wayland_buffer_manager_host_unittest.cc",
"host/wayland_connection_unittest.cc", "host/wayland_connection_unittest.cc",
"host/wayland_data_device_unittest.cc", "host/wayland_data_device_unittest.cc",
"host/wayland_input_method_context_unittest.cc", "host/wayland_input_method_context_unittest.cc",
...@@ -249,6 +248,7 @@ source_set("wayland_unittests") { ...@@ -249,6 +248,7 @@ source_set("wayland_unittests") {
"host/wayland_window_unittest.cc", "host/wayland_window_unittest.cc",
"test/wayland_test.cc", "test/wayland_test.cc",
"test/wayland_test.h", "test/wayland_test.h",
"wayland_buffer_manager_unittest.cc",
] ]
deps = [ deps = [
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.h"
#include "ui/ozone/platform/wayland/host/wayland_buffer_manager_host.h" #include "ui/ozone/platform/wayland/host/wayland_buffer_manager_host.h"
#include <drm_fourcc.h> #include <drm_fourcc.h>
...@@ -39,20 +40,22 @@ struct InputData { ...@@ -39,20 +40,22 @@ struct InputData {
} // namespace } // namespace
class WaylandBufferManagerHostTest : public WaylandTest { class WaylandBufferManagerTest : public WaylandTest {
public: public:
WaylandBufferManagerHostTest() = default; WaylandBufferManagerTest() = default;
~WaylandBufferManagerHostTest() override = default; ~WaylandBufferManagerTest() override = default;
void SetUp() override { void SetUp() override {
WaylandTest::SetUp(); WaylandTest::SetUp();
manager_ = connection_->buffer_manager_host(); manager_host_ = connection_->buffer_manager_host();
EXPECT_TRUE(manager_); EXPECT_TRUE(manager_host_);
// Use the helper methods below, which automatically set the termination // Use the helper methods below, which automatically set the termination
// callback again if the manager failed. // callback and bind the interface again if the manager failed.
manager_->SetTerminateGpuCallback(callback_.Get()); manager_host_->SetTerminateGpuCallback(callback_.Get());
auto interface_ptr = manager_host_->BindInterface();
buffer_manager_gpu_->SetWaylandBufferManagerHost(std::move(interface_ptr));
} }
protected: protected:
...@@ -65,11 +68,11 @@ class WaylandBufferManagerHostTest : public WaylandTest { ...@@ -65,11 +68,11 @@ class WaylandBufferManagerHostTest : public WaylandTest {
return base::ScopedFD(file.TakePlatformFile()); return base::ScopedFD(file.TakePlatformFile());
} }
// Sets the terminate gpu callback expectation, calls OnChannelDestroyed and // Sets the terminate gpu callback expectation, calls OnChannelDestroyed,
// sets the same callback again for convenience. // sets the same callback again and re-establishes mojo connection again
// for convenience.
void SetTerminateCallbackExpectationAndDestroyChannel( void SetTerminateCallbackExpectationAndDestroyChannel(
MockTerminateGpuCallback* callback, MockTerminateGpuCallback* callback,
WaylandBufferManagerHost* manager,
bool fail) { bool fail) {
if (!fail) { if (!fail) {
// To avoid warning messages as "Expected to be never called, but has 0 // To avoid warning messages as "Expected to be never called, but has 0
...@@ -78,9 +81,13 @@ class WaylandBufferManagerHostTest : public WaylandTest { ...@@ -78,9 +81,13 @@ class WaylandBufferManagerHostTest : public WaylandTest {
} else { } else {
EXPECT_CALL(*callback, Run(_)) EXPECT_CALL(*callback, Run(_))
.Times(1) .Times(1)
.WillRepeatedly(::testing::Invoke([manager, callback](std::string) { .WillRepeatedly(::testing::Invoke([this, callback](std::string) {
manager->OnChannelDestroyed(); manager_host_->OnChannelDestroyed();
manager->SetTerminateGpuCallback(callback->Get()); manager_host_->SetTerminateGpuCallback(callback->Get());
auto interface_ptr = manager_host_->BindInterface();
buffer_manager_gpu_->SetWaylandBufferManagerHost(
std::move(interface_ptr));
})); }));
} }
} }
...@@ -99,12 +106,10 @@ class WaylandBufferManagerHostTest : public WaylandTest { ...@@ -99,12 +106,10 @@ class WaylandBufferManagerHostTest : public WaylandTest {
if (!fd.is_valid()) if (!fd.is_valid())
fd = MakeFD(); fd = MakeFD();
SetTerminateCallbackExpectationAndDestroyChannel(&callback_, manager_, SetTerminateCallbackExpectationAndDestroyChannel(&callback_, fail);
fail); buffer_manager_gpu_->CreateDmabufBasedBuffer(
manager_->CreateDmabufBasedBuffer( widget, std::move(fd), kDefaultSize, strides, offsets, modifiers,
widget, mojo::WrapPlatformHandle(mojo::PlatformHandle(std::move(fd))), format, planes_count, buffer_id);
kDefaultSize, strides, offsets, modifiers, format, planes_count,
buffer_id);
Sync(); Sync();
} }
...@@ -115,34 +120,34 @@ class WaylandBufferManagerHostTest : public WaylandTest { ...@@ -115,34 +120,34 @@ class WaylandBufferManagerHostTest : public WaylandTest {
uint32_t buffer_id, uint32_t buffer_id,
const gfx::Size& size = kDefaultSize, const gfx::Size& size = kDefaultSize,
size_t length = 0) { size_t length = 0) {
SetTerminateCallbackExpectationAndDestroyChannel(&callback_, manager_, SetTerminateCallbackExpectationAndDestroyChannel(&callback_, fail);
fail);
if (!length) if (!length)
length = size.width() * size.height() * 4; length = size.width() * size.height() * 4;
manager_->CreateShmBasedBuffer( buffer_manager_gpu_->CreateShmBasedBuffer(widget, MakeFD(), length, size,
widget, mojo::WrapPlatformHandle(mojo::PlatformHandle(MakeFD())), buffer_id);
length, size, buffer_id);
Sync(); Sync();
} }
void DestroyBufferAndSetTerminateExpectation(gfx::AcceleratedWidget widget, void DestroyBufferAndSetTerminateExpectation(gfx::AcceleratedWidget widget,
uint32_t buffer_id, uint32_t buffer_id,
bool fail) { bool fail) {
SetTerminateCallbackExpectationAndDestroyChannel(&callback_, manager_, SetTerminateCallbackExpectationAndDestroyChannel(&callback_, fail);
fail);
manager_->DestroyBuffer(widget, buffer_id); buffer_manager_gpu_->DestroyBuffer(widget, buffer_id);
Sync(); Sync();
} }
MockTerminateGpuCallback callback_; MockTerminateGpuCallback callback_;
WaylandBufferManagerHost* manager_; WaylandBufferManagerHost* manager_host_;
private: private:
DISALLOW_COPY_AND_ASSIGN(WaylandBufferManagerHostTest); DISALLOW_COPY_AND_ASSIGN(WaylandBufferManagerTest);
}; };
TEST_P(WaylandBufferManagerHostTest, CreateDmabufBasedBuffers) { TEST_P(WaylandBufferManagerTest, CreateDmabufBasedBuffers) {
constexpr uint32_t kDmabufBufferId = 1; constexpr uint32_t kDmabufBufferId = 1;
EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1); EXPECT_CALL(*server_.zwp_linux_dmabuf_v1(), CreateParams(_, _, _)).Times(1);
...@@ -154,7 +159,7 @@ TEST_P(WaylandBufferManagerHostTest, CreateDmabufBasedBuffers) { ...@@ -154,7 +159,7 @@ TEST_P(WaylandBufferManagerHostTest, CreateDmabufBasedBuffers) {
false /*fail*/); false /*fail*/);
} }
TEST_P(WaylandBufferManagerHostTest, CreateShmBasedBuffers) { TEST_P(WaylandBufferManagerTest, CreateShmBasedBuffers) {
constexpr uint32_t kShmBufferId = 1; constexpr uint32_t kShmBufferId = 1;
const gfx::AcceleratedWidget widget = window_->GetWidget(); const gfx::AcceleratedWidget widget = window_->GetWidget();
...@@ -165,7 +170,7 @@ TEST_P(WaylandBufferManagerHostTest, CreateShmBasedBuffers) { ...@@ -165,7 +170,7 @@ TEST_P(WaylandBufferManagerHostTest, CreateShmBasedBuffers) {
DestroyBufferAndSetTerminateExpectation(widget, kShmBufferId, false /*fail*/); DestroyBufferAndSetTerminateExpectation(widget, kShmBufferId, false /*fail*/);
} }
TEST_P(WaylandBufferManagerHostTest, ValidateDataFromGpu) { TEST_P(WaylandBufferManagerTest, ValidateDataFromGpu) {
const InputData kBadInputs[] = { const InputData kBadInputs[] = {
// All zeros. // All zeros.
{}, {},
...@@ -221,7 +226,7 @@ TEST_P(WaylandBufferManagerHostTest, ValidateDataFromGpu) { ...@@ -221,7 +226,7 @@ TEST_P(WaylandBufferManagerHostTest, ValidateDataFromGpu) {
DestroyBufferAndSetTerminateExpectation(widget, kBufferId, true /*fail*/); DestroyBufferAndSetTerminateExpectation(widget, kBufferId, true /*fail*/);
} }
TEST_P(WaylandBufferManagerHostTest, CreateAndDestroyBuffer) { TEST_P(WaylandBufferManagerTest, CreateAndDestroyBuffer) {
const uint32_t kBufferId1 = 1; const uint32_t kBufferId1 = 1;
const uint32_t kBufferId2 = 2; const uint32_t kBufferId2 = 2;
...@@ -257,10 +262,10 @@ TEST_P(WaylandBufferManagerHostTest, CreateAndDestroyBuffer) { ...@@ -257,10 +262,10 @@ TEST_P(WaylandBufferManagerHostTest, CreateAndDestroyBuffer) {
} }
INSTANTIATE_TEST_SUITE_P(XdgVersionV5Test, INSTANTIATE_TEST_SUITE_P(XdgVersionV5Test,
WaylandBufferManagerHostTest, WaylandBufferManagerTest,
::testing::Values(kXdgShellV5)); ::testing::Values(kXdgShellV5));
INSTANTIATE_TEST_SUITE_P(XdgVersionV6Test, INSTANTIATE_TEST_SUITE_P(XdgVersionV6Test,
WaylandBufferManagerHostTest, WaylandBufferManagerTest,
::testing::Values(kXdgShellV6)); ::testing::Values(kXdgShellV6));
} // namespace ui } // namespace ui
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment