Mir

Merge lp:~vanvugt/mir/resize-client-buffers into lp:mir

Proposed by Daniel van Vugt
Status: Merged
Merged at revision: 1221
Proposed branch: lp:~vanvugt/mir/resize-client-buffers
Merge into: lp:mir
Prerequisite: lp:~vanvugt/mir/resize-protocol
Diff against target: 151 lines (+50/-7)
6 files modified
src/client/android/android_client_buffer_factory.cpp (+7/-1)
src/client/gbm/gbm_client_buffer_factory.cpp (+6/-1)
tests/integration-tests/client/test_client_render.cpp (+9/-0)
tests/unit-tests/client/gbm/test_gbm_client_buffer.cpp (+21/-0)
tests/unit-tests/client/test_android_client_buffer_factory.cpp (+5/-5)
tests/unit-tests/client/test_client_mir_surface.cpp (+2/-0)
To merge this branch: bzr merge lp:~vanvugt/mir/resize-client-buffers
Reviewer Review Type Date Requested Status
Kevin DuBois (community) Approve
Alan Griffiths Approve
Review via email: mp+194825@code.launchpad.net

Commit message

Add resize support to *ClientBuffer classes. Now always get dimensions from
the latest buffer package.

Description of the change

There are some comments about some "size" parameters now being unused. They will be eliminated in later proposals.

To post a comment you must log in.
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

I'd like to see the unused parameters gone, but OK as an intermediate step.

review: Approve
Revision history for this message
Kevin DuBois (kdub) wrote :

good improvement after the resize protocol changes

review: Approve
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

The unused "size" parameters... I started removing and found the resulting diff from that cleanup work to be much bigger that this proposal. And it's only this one that contains the useful functionality change.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/client/android/android_client_buffer_factory.cpp'
2--- src/client/android/android_client_buffer_factory.cpp 2013-06-21 21:36:56 +0000
3+++ src/client/android/android_client_buffer_factory.cpp 2013-11-13 10:28:01 +0000
4@@ -31,6 +31,12 @@
5
6 std::shared_ptr<mcl::ClientBuffer> mcla::AndroidClientBufferFactory::create_buffer(std::shared_ptr<MirBufferPackage> const& package, geom::Size size, geom::PixelFormat pf)
7 {
8+ (void)size; // TODO: remove this unused parameter
9 auto handle = registrar->register_buffer(package);
10- return std::make_shared<mcla::AndroidClientBuffer>(registrar, handle, size, pf, geom::Stride{package->stride});
11+ return std::make_shared<mcla::AndroidClientBuffer>(
12+ registrar,
13+ handle,
14+ geometry::Size{package->width, package->height},
15+ pf,
16+ geometry::Stride{package->stride});
17 }
18
19=== modified file 'src/client/gbm/gbm_client_buffer_factory.cpp'
20--- src/client/gbm/gbm_client_buffer_factory.cpp 2013-04-24 05:22:20 +0000
21+++ src/client/gbm/gbm_client_buffer_factory.cpp 2013-11-13 10:28:01 +0000
22@@ -31,5 +31,10 @@
23
24 std::shared_ptr<mcl::ClientBuffer> mclg::GBMClientBufferFactory::create_buffer(std::shared_ptr<MirBufferPackage> const& package, geometry::Size size, geometry::PixelFormat pf)
25 {
26- return std::make_shared<mclg::GBMClientBuffer>(drm_fd_handler, package, size, pf);
27+ (void)size; // TODO: remove this unused parameter
28+ return std::make_shared<mclg::GBMClientBuffer>(
29+ drm_fd_handler,
30+ package,
31+ geometry::Size{package->width, package->height},
32+ pf);
33 }
34
35=== modified file 'tests/integration-tests/client/test_client_render.cpp'
36--- tests/integration-tests/client/test_client_render.cpp 2013-11-11 19:08:47 +0000
37+++ tests/integration-tests/client/test_client_render.cpp 2013-11-13 10:28:01 +0000
38@@ -213,6 +213,10 @@
39 //note about the stride. Mir protocol sends stride in bytes, android uses stride in pixels
40 response->mutable_buffer()->set_stride(client_buffer->stride().as_uint32_t());
41
42+ auto const& size = client_buffer->size();
43+ response->mutable_buffer()->set_width(size.width.as_int());
44+ response->mutable_buffer()->set_height(size.height.as_int());
45+
46 response->mutable_buffer()->set_fds_on_side_channel(1);
47 native_handle_t const* native_handle = buf->handle();
48 for(auto i=0; i<native_handle->numFds; i++)
49@@ -242,6 +246,11 @@
50 response->set_fds_on_side_channel(1);
51 native_handle_t const* native_handle = buf->handle();
52 response->set_stride(client_buffer->stride().as_uint32_t());
53+
54+ auto const& size = client_buffer->size();
55+ response->set_width(size.width.as_int());
56+ response->set_height(size.height.as_int());
57+
58 for(auto i=0; i<native_handle->numFds; i++)
59 response->add_fd(native_handle->data[i]);
60 for(auto i=0; i<native_handle->numInts; i++)
61
62=== modified file 'tests/unit-tests/client/gbm/test_gbm_client_buffer.cpp'
63--- tests/unit-tests/client/gbm/test_gbm_client_buffer.cpp 2013-05-02 20:57:20 +0000
64+++ tests/unit-tests/client/gbm/test_gbm_client_buffer.cpp 2013-11-13 10:28:01 +0000
65@@ -18,6 +18,7 @@
66
67 #include "mir_toolkit/mir_client_library.h"
68 #include "src/client/gbm/gbm_client_buffer.h"
69+#include "src/client/gbm/gbm_client_buffer_factory.h"
70 #include "mock_drm_fd_handler.h"
71
72 #include <xf86drm.h>
73@@ -42,6 +43,9 @@
74
75 package = std::make_shared<MirBufferPackage>();
76 package->stride = stride.as_uint32_t();
77+ package->width = width.as_int();
78+ package->height = height.as_int();
79+
80 package_copy = std::make_shared<MirBufferPackage>(*package.get());
81 }
82 geom::Width width;
83@@ -212,3 +216,20 @@
84
85 mclg::GBMClientBuffer buffer(drm_fd_handler, package, size, pf);
86 }
87+
88+TEST_F(MirGBMBufferTest, factory_gets_size_from_package)
89+{
90+ using namespace testing;
91+
92+ mclg::GBMClientBufferFactory factory(drm_fd_handler);
93+
94+ geom::Size unused_size{0, 0};
95+ auto buffer = factory.create_buffer(package, unused_size, pf);
96+
97+ auto const& buf_size = buffer->size();
98+ EXPECT_EQ(package->width, buf_size.width.as_int());
99+ EXPECT_EQ(package->height, buf_size.height.as_int());
100+
101+ EXPECT_NE(unused_size, buf_size);
102+}
103+
104
105=== modified file 'tests/unit-tests/client/test_android_client_buffer_factory.cpp'
106--- tests/unit-tests/client/test_android_client_buffer_factory.cpp 2013-04-24 05:22:20 +0000
107+++ tests/unit-tests/client/test_android_client_buffer_factory.cpp 2013-11-13 10:28:01 +0000
108@@ -39,9 +39,10 @@
109 pf = geom::PixelFormat::abgr_8888;
110
111 mock_registrar = std::make_shared<mtd::MockAndroidRegistrar>();
112+
113 package1 = std::make_shared<MirBufferPackage>();
114- package2 = std::make_shared<MirBufferPackage>();
115-
116+ package1->width = width.as_int();
117+ package1->height = height.as_int();
118 }
119 geom::Width width;
120 geom::Height height;
121@@ -51,7 +52,6 @@
122 std::shared_ptr<mtd::MockAndroidRegistrar> mock_registrar;
123
124 std::shared_ptr<MirBufferPackage> package1;
125- std::shared_ptr<MirBufferPackage> package2;
126
127 };
128
129@@ -68,7 +68,7 @@
130
131 auto buffer = buffer_factory.create_buffer(package1, size, pf);
132
133- EXPECT_EQ(buffer->size().height, height);
134- EXPECT_EQ(buffer->size().width, width);
135+ EXPECT_EQ(package1->width, buffer->size().width.as_int());
136+ EXPECT_EQ(package1->height, buffer->size().height.as_int());
137 EXPECT_EQ(buffer->pixel_format(), pf);
138 }
139
140=== modified file 'tests/unit-tests/client/test_client_mir_surface.cpp'
141--- tests/unit-tests/client/test_client_mir_surface.cpp 2013-10-24 14:22:27 +0000
142+++ tests/unit-tests/client/test_client_mir_surface.cpp 2013-11-13 10:28:01 +0000
143@@ -148,6 +148,8 @@
144 }
145
146 response->set_stride(server_package.stride);
147+ response->set_width(server_package.width);
148+ response->set_height(server_package.height);
149 }
150
151 void create_surface_response(mir::protobuf::Surface* response)

Subscribers

People subscribed via source and target branches