Mir

Merge lp:~kdub/mir/fix-1369763 into lp:mir

Proposed by Kevin DuBois
Status: Merged
Approved by: Daniel van Vugt
Approved revision: no longer in the source branch.
Merged at revision: 3759
Proposed branch: lp:~kdub/mir/fix-1369763
Merge into: lp:mir
Diff against target: 266 lines (+71/-2)
17 files modified
include/platform/mir/graphics/renderable.h (+1/-0)
src/include/server/mir/compositor/buffer_stream.h (+1/-0)
src/platform/symbols.map (+1/-0)
src/platforms/android/server/hwc_device.cpp (+2/-1)
src/platforms/android/utils/render_overlays.cpp (+5/-0)
src/platforms/android/utils/test_android_hardware_sanity.cpp (+4/-0)
src/server/compositor/stream.cpp (+5/-0)
src/server/compositor/stream.h (+1/-0)
src/server/graphics/software_cursor.cpp (+5/-0)
src/server/input/touchspot_controller.cpp (+6/-0)
src/server/scene/basic_surface.cpp (+5/-0)
tests/include/mir/test/doubles/fake_renderable.h (+5/-0)
tests/include/mir/test/doubles/mock_buffer_stream.h (+1/-0)
tests/include/mir/test/doubles/mock_renderable.h (+1/-0)
tests/include/mir/test/doubles/stub_buffer_stream.h (+4/-1)
tests/include/mir/test/doubles/stub_renderable.h (+13/-0)
tests/unit-tests/platforms/android/server/test_hwc_device.cpp (+11/-0)
To merge this branch: bzr merge lp:~kdub/mir/fix-1369763
Reviewer Review Type Date Requested Status
Daniel van Vugt Approve
Brandon Schaefer (community) Approve
Mir CI Bot continuous-integration Approve
Cemil Azizoglu (community) Approve
Alexandros Frantzis (community) Needs Fixing
Review via email: mp+307945@code.launchpad.net

Commit message

android: disable overlays when a swapinterval 0 client is part of the RenderableList. This won't affect the overlay percentage for usc/u8, as u8 runs swapinterval 1.

mg::Renderable providing swapinterval information is useful to android to fix this bug, as well as for nested-passthrough, where nested-passthrough has to coordinate the passthrough surface with the host server, so the host server doesn't end up grabbing all the buffers from the passthrough surface.

platform abi number was already increased for the 0.25 series.

Fixes: LP: #1369763

Description of the change

android: disable overlays when a swapinterval 0 client is part of the RenderableList. This won't affect the overlay percentage for usc/u8, as u8 runs swapinterval 1.

mg::Renderable providing swapinterval information is useful to android to fix this bug, as well as for nested-passthrough, where nested-passthrough has to coordinate the passthrough surface with the host server, so the host server doesn't end up grabbing all the buffers from the passthrough surface.

platform abi number was already increased for the 0.25 series.

Fixes: LP: #1369763

To post a comment you must log in.
Revision history for this message
Kevin DuBois (kdub) wrote :

This can go in the 'why didn't I think of this before" pile.

Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

Looks good, except for:

1. a left over debugging comment:

+ printf("SET SWAPINTERVAL %i\n", interval);

2. a clang build error (and perhaps there are others):

src/platforms/android/utils/render_overlays.cpp:145:18: error: 'swap_interval' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override]

review: Needs Fixing
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

FAILED: Continuous integration, rev:3744
https://mir-jenkins.ubuntu.com/job/mir-ci/1911/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/2426/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/2489
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/2482
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/2482
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=yakkety/2482
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/2456/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/2456
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/2456/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/2456
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/2456/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/2456
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/2456/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/2456
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/2456/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/2456
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/2456/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/1911/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Cemil Azizoglu (cemil-azizoglu) wrote :

Ok

review: Approve
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:3747
https://mir-jenkins.ubuntu.com/job/mir-ci/1922/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/2438
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/2501
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/2493
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/2493
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=yakkety/2493
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/2467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=yakkety/2467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/2467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/2467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/2467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=yakkety/2467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/2467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/2467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/2467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/2467/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/2467
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/2467/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/1922/rebuild

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

Thanks for looking at this. Just wondering; if you're disabling overlays for anything that's interval 0 on the server side and we hope to make everything on the server side interval 0 (when interval 1 becomes a function of the libmirclient), then won't we need to revert this? Would it not just be a better idea to leave the bug unresolved until a final solution is feasible?

By landing this now, we create a regression that's worse than the bug itself. That is a future mirserver will never overlay unless we remember to also revert this change.

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

> Thanks for looking at this. Just wondering; if you're disabling overlays for
> anything that's interval 0 on the server side and we hope to make everything
> on the server side interval 0 (when interval 1 becomes a function of the
> libmirclient), then won't we need to revert this? Would it not just be a
> better idea to leave the bug unresolved until a final solution is feasible?
>

Once we have dropping-only, the server won't really have a concept of 'swapinterval' anymore (which makes it simpler there). We will probably be best to remove the Renderable::swap_interval information.

> By landing this now, we create a regression that's worse than the bug itself.
> That is a future mirserver will never overlay unless we remember to also
> revert this change.

Its not a regression once it lands, its only a regression if we forget how this works when we change the submission mode in the future. I can keep tabs on it so that when we switch to dropping-only, we will change the behavior. Nested passthrough's behavior will have to change even more when that part of the system is reworked.

Its useful now for fixing android support for this option, and the interval information is needed for nested passthrough to prevent loss of swapinterval 0 on passthrough clients.

Revision history for this message
Brandon Schaefer (brandontschaefer) wrote :

lgtm

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

subsequent branches showing how the swapinterval() function are used in nested pasthrough are up.

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

Alright

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/platform/mir/graphics/renderable.h'
--- include/platform/mir/graphics/renderable.h 2015-04-28 07:54:10 +0000
+++ include/platform/mir/graphics/renderable.h 2016-10-07 18:58:00 +0000
@@ -70,6 +70,7 @@
7070
71 virtual bool shaped() const = 0; // meaning the pixel format has alpha71 virtual bool shaped() const = 0; // meaning the pixel format has alpha
7272
73 virtual unsigned int swap_interval() const = 0;
73protected:74protected:
74 Renderable() = default;75 Renderable() = default;
75 Renderable(Renderable const&) = delete;76 Renderable(Renderable const&) = delete;
7677
=== modified file 'src/include/server/mir/compositor/buffer_stream.h'
--- src/include/server/mir/compositor/buffer_stream.h 2016-05-03 06:55:25 +0000
+++ src/include/server/mir/compositor/buffer_stream.h 2016-10-07 18:58:00 +0000
@@ -50,6 +50,7 @@
50 virtual int buffers_ready_for_compositor(void const* user_id) const = 0;50 virtual int buffers_ready_for_compositor(void const* user_id) const = 0;
51 virtual void drop_old_buffers() = 0;51 virtual void drop_old_buffers() = 0;
52 virtual bool has_submitted_buffer() const = 0;52 virtual bool has_submitted_buffer() const = 0;
53 virtual bool framedropping() const = 0;
53};54};
5455
55}56}
5657
=== modified file 'src/platform/symbols.map'
--- src/platform/symbols.map 2016-09-19 06:09:48 +0000
+++ src/platform/symbols.map 2016-10-07 18:58:00 +0000
@@ -90,6 +90,7 @@
90 mir::graphics::Renderable::screen_position*;90 mir::graphics::Renderable::screen_position*;
91 mir::graphics::Renderable::shaped*;91 mir::graphics::Renderable::shaped*;
92 mir::graphics::Renderable::transformation*;92 mir::graphics::Renderable::transformation*;
93 mir::graphics::Renderable::swap_interval*;
93 mir::graphics::UserDisplayConfigurationOutput::extents*;94 mir::graphics::UserDisplayConfigurationOutput::extents*;
94 mir::graphics::UserDisplayConfigurationOutput::UserDisplayConfigurationOutput*;95 mir::graphics::UserDisplayConfigurationOutput::UserDisplayConfigurationOutput*;
95 mir::options::arw_server_socket_opt*;96 mir::options::arw_server_socket_opt*;
9697
=== modified file 'src/platforms/android/server/hwc_device.cpp'
--- src/platforms/android/server/hwc_device.cpp 2016-05-03 06:55:25 +0000
+++ src/platforms/android/server/hwc_device.cpp 2016-10-07 18:58:00 +0000
@@ -56,7 +56,8 @@
56 //TODO: enable planeAlpha for (hwc version >= 1.2), 90 deg rotation56 //TODO: enable planeAlpha for (hwc version >= 1.2), 90 deg rotation
57 static glm::mat4 const identity;57 static glm::mat4 const identity;
58 if (plane_alpha_is_translucent(*renderable) ||58 if (plane_alpha_is_translucent(*renderable) ||
59 (renderable->transformation() != identity))59 (renderable->transformation() != identity) ||
60 (renderable->swap_interval() == 0)) //See LP: #1369763
60 {61 {
61 return false;62 return false;
62 }63 }
6364
=== modified file 'src/platforms/android/utils/render_overlays.cpp'
--- src/platforms/android/utils/render_overlays.cpp 2016-09-19 06:09:48 +0000
+++ src/platforms/android/utils/render_overlays.cpp 2016-10-07 18:58:00 +0000
@@ -142,6 +142,11 @@
142 {142 {
143 }143 }
144144
145 unsigned int swap_interval() const override
146 {
147 return 1u;
148 }
149
145 ID id() const override150 ID id() const override
146 {151 {
147 return this;152 return this;
148153
=== modified file 'src/platforms/android/utils/test_android_hardware_sanity.cpp'
--- src/platforms/android/utils/test_android_hardware_sanity.cpp 2016-09-19 06:09:48 +0000
+++ src/platforms/android/utils/test_android_hardware_sanity.cpp 2016-10-07 18:58:00 +0000
@@ -240,6 +240,10 @@
240 buffer_(buffer)240 buffer_(buffer)
241 {241 {
242 }242 }
243 unsigned int swap_interval() const override
244 {
245 return 1u;
246 }
243 ID id() const override247 ID id() const override
244 {248 {
245 return this;249 return this;
246250
=== modified file 'src/server/compositor/stream.cpp'
--- src/server/compositor/stream.cpp 2016-09-22 11:38:46 +0000
+++ src/server/compositor/stream.cpp 2016-10-07 18:58:00 +0000
@@ -164,6 +164,11 @@
164 }164 }
165}165}
166166
167bool mc::Stream::framedropping() const
168{
169 return schedule_mode == ScheduleMode::Dropping;
170}
171
167void mc::Stream::transition_schedule(172void mc::Stream::transition_schedule(
168 std::shared_ptr<mc::Schedule>&& new_schedule, std::lock_guard<std::mutex> const&)173 std::shared_ptr<mc::Schedule>&& new_schedule, std::lock_guard<std::mutex> const&)
169{174{
170175
=== modified file 'src/server/compositor/stream.h'
--- src/server/compositor/stream.h 2016-09-22 11:38:46 +0000
+++ src/server/compositor/stream.h 2016-10-07 18:58:00 +0000
@@ -57,6 +57,7 @@
57 geometry::Size stream_size() override;57 geometry::Size stream_size() override;
58 void resize(geometry::Size const& size) override;58 void resize(geometry::Size const& size) override;
59 void allow_framedropping(bool) override;59 void allow_framedropping(bool) override;
60 bool framedropping() const override;
60 void drop_outstanding_requests() override;61 void drop_outstanding_requests() override;
61 int buffers_ready_for_compositor(void const* user_id) const override;62 int buffers_ready_for_compositor(void const* user_id) const override;
62 void drop_old_buffers() override;63 void drop_old_buffers() override;
6364
=== modified file 'src/server/graphics/software_cursor.cpp'
--- src/server/graphics/software_cursor.cpp 2016-09-15 13:44:43 +0000
+++ src/server/graphics/software_cursor.cpp 2016-10-07 18:58:00 +0000
@@ -65,6 +65,11 @@
65 {65 {
66 }66 }
6767
68 unsigned int swap_interval() const override
69 {
70 return 1;
71 }
72
68 mg::Renderable::ID id() const override73 mg::Renderable::ID id() const override
69 {74 {
70 return this;75 return this;
7176
=== modified file 'src/server/input/touchspot_controller.cpp'
--- src/server/input/touchspot_controller.cpp 2016-08-16 19:34:28 +0000
+++ src/server/input/touchspot_controller.cpp 2016-10-07 18:58:00 +0000
@@ -52,6 +52,12 @@
52 }52 }
5353
54// mg::Renderable54// mg::Renderable
55
56 unsigned int swap_interval() const override
57 {
58 return 1;
59 }
60
55 mg::Renderable::ID id() const override61 mg::Renderable::ID id() const override
56 {62 {
57 return this;63 return this;
5864
=== modified file 'src/server/scene/basic_surface.cpp'
--- src/server/scene/basic_surface.cpp 2016-09-19 04:16:15 +0000
+++ src/server/scene/basic_surface.cpp 2016-10-07 18:58:00 +0000
@@ -825,6 +825,11 @@
825 ~SurfaceSnapshot()825 ~SurfaceSnapshot()
826 {826 {
827 }827 }
828
829 unsigned int swap_interval() const override
830 {
831 return underlying_buffer_stream->framedropping() ? 0 : 1;
832 }
828 833
829 std::shared_ptr<mg::Buffer> buffer() const override834 std::shared_ptr<mg::Buffer> buffer() const override
830 {835 {
831836
=== modified file 'tests/include/mir/test/doubles/fake_renderable.h'
--- tests/include/mir/test/doubles/fake_renderable.h 2015-04-28 07:54:10 +0000
+++ tests/include/mir/test/doubles/fake_renderable.h 2016-10-07 18:58:00 +0000
@@ -95,6 +95,11 @@
95 return rect;95 return rect;
96 }96 }
9797
98 unsigned int swap_interval() const override
99 {
100 return 1u;
101 }
102
98private:103private:
99 std::shared_ptr<graphics::Buffer> buf;104 std::shared_ptr<graphics::Buffer> buf;
100 mir::geometry::Rectangle rect;105 mir::geometry::Rectangle rect;
101106
=== modified file 'tests/include/mir/test/doubles/mock_buffer_stream.h'
--- tests/include/mir/test/doubles/mock_buffer_stream.h 2016-08-16 19:34:28 +0000
+++ tests/include/mir/test/doubles/mock_buffer_stream.h 2016-10-07 18:58:00 +0000
@@ -69,6 +69,7 @@
69 MOCK_METHOD1(resize, void(geometry::Size const&));69 MOCK_METHOD1(resize, void(geometry::Size const&));
70 MOCK_METHOD0(force_client_completion, void());70 MOCK_METHOD0(force_client_completion, void());
71 MOCK_METHOD1(allow_framedropping, void(bool));71 MOCK_METHOD1(allow_framedropping, void(bool));
72 MOCK_CONST_METHOD0(framedropping, bool());
7273
73 MOCK_METHOD0(drop_outstanding_requests, void());74 MOCK_METHOD0(drop_outstanding_requests, void());
74 MOCK_CONST_METHOD1(buffers_ready_for_compositor, int(void const*));75 MOCK_CONST_METHOD1(buffers_ready_for_compositor, int(void const*));
7576
=== modified file 'tests/include/mir/test/doubles/mock_renderable.h'
--- tests/include/mir/test/doubles/mock_renderable.h 2015-06-25 03:00:08 +0000
+++ tests/include/mir/test/doubles/mock_renderable.h 2016-10-07 18:58:00 +0000
@@ -52,6 +52,7 @@
52 MOCK_CONST_METHOD0(transformation, glm::mat4());52 MOCK_CONST_METHOD0(transformation, glm::mat4());
53 MOCK_CONST_METHOD0(visible, bool());53 MOCK_CONST_METHOD0(visible, bool());
54 MOCK_CONST_METHOD0(shaped, bool());54 MOCK_CONST_METHOD0(shaped, bool());
55 MOCK_CONST_METHOD0(swap_interval, unsigned int());
55};56};
56}57}
57}58}
5859
=== modified file 'tests/include/mir/test/doubles/stub_buffer_stream.h'
--- tests/include/mir/test/doubles/stub_buffer_stream.h 2016-09-19 04:16:15 +0000
+++ tests/include/mir/test/doubles/stub_buffer_stream.h 2016-10-07 18:58:00 +0000
@@ -63,7 +63,10 @@
63 void allow_framedropping(bool) override63 void allow_framedropping(bool) override
64 {64 {
65 }65 }
6666 bool framedropping() const override
67 {
68 return false;
69 }
67 int buffers_ready_for_compositor(void const*) const override { return nready; }70 int buffers_ready_for_compositor(void const*) const override { return nready; }
6871
69 void drop_old_buffers() override {}72 void drop_old_buffers() override {}
7073
=== modified file 'tests/include/mir/test/doubles/stub_renderable.h'
--- tests/include/mir/test/doubles/stub_renderable.h 2016-09-08 18:59:56 +0000
+++ tests/include/mir/test/doubles/stub_renderable.h 2016-10-07 18:58:00 +0000
@@ -85,6 +85,10 @@
85 {85 {
86 return false;86 return false;
87 }87 }
88 unsigned int swap_interval() const override
89 {
90 return 1;
91 }
8892
89private:93private:
90 std::shared_ptr<graphics::Buffer> make_stub_buffer(geometry::Rectangle const& rect)94 std::shared_ptr<graphics::Buffer> make_stub_buffer(geometry::Rectangle const& rect)
@@ -146,6 +150,15 @@
146 return 1.0f - ( 3.0f / 1024.0f );150 return 1.0f - ( 3.0f / 1024.0f );
147 }151 }
148};152};
153
154struct IntervalZeroRenderable : StubRenderable
155{
156 unsigned int swap_interval() const override
157 {
158 return 0;
159 }
160};
161
149}162}
150}163}
151}164}
152165
=== modified file 'tests/unit-tests/platforms/android/server/test_hwc_device.cpp'
--- tests/unit-tests/platforms/android/server/test_hwc_device.cpp 2016-05-03 06:55:25 +0000
+++ tests/unit-tests/platforms/android/server/test_hwc_device.cpp 2016-10-07 18:58:00 +0000
@@ -599,6 +599,17 @@
599 EXPECT_FALSE(device.compatible_renderlist(renderlist));599 EXPECT_FALSE(device.compatible_renderlist(renderlist));
600}600}
601601
602//LP: #1369763. We could get swapinterval 0 to work with overlays, but we'd need
603//the vsync signal from hwc to reach the client, so the client can rate-limit its submissions.
604TEST_F(HwcDevice, rejects_list_containing_interval_0)
605{
606 mga::HwcDevice device(mock_device);
607
608 auto renderable = std::make_shared<mtd::StubTransformedRenderable>();
609 mg::RenderableList renderlist{renderable};
610 EXPECT_FALSE(device.compatible_renderlist(renderlist));
611}
612
602//TODO: we could accept a 90 degree transform613//TODO: we could accept a 90 degree transform
603TEST_F(HwcDevice, rejects_list_containing_transformed)614TEST_F(HwcDevice, rejects_list_containing_transformed)
604{615{

Subscribers

People subscribed via source and target branches