Mir

Merge lp:~kdub/mir/0.17.1-fix-1406725 into lp:mir/0.17

Proposed by Kevin DuBois
Status: Work in progress
Proposed branch: lp:~kdub/mir/0.17.1-fix-1406725
Merge into: lp:mir/0.17
Diff against target: 393 lines (+125/-9)
19 files modified
debian/changelog (+7/-2)
include/renderers/gl/mir/renderer/gl/texture_source.h (+1/-0)
src/client/buffer_stream.cpp (+3/-2)
src/common/CMakeLists.txt (+1/-0)
src/common/graphics/android/android_native_buffer.cpp (+46/-0)
src/gl/recently_used_cache.cpp (+9/-0)
src/include/common/mir/graphics/android/android_native_buffer.h (+25/-0)
src/include/common/mir/graphics/android/native_buffer.h (+3/-0)
src/platforms/android/server/buffer.cpp (+7/-3)
src/platforms/android/server/buffer.h (+1/-0)
src/platforms/android/server/ipc_operations.cpp (+2/-0)
src/server/compositor/multi_threaded_compositor.cpp (+5/-1)
tests/acceptance-tests/test_latency.cpp (+1/-1)
tests/include/mir/test/doubles/mock_android_native_buffer.h (+3/-0)
tests/include/mir/test/doubles/stub_android_native_buffer.h (+3/-0)
tests/mir_test_doubles/mock_egl.cpp (+2/-0)
tests/unit-tests/client/android/test_gralloc_registrar.cpp (+2/-0)
tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp (+2/-0)
tests/unit-tests/graphics/android/test_native_buffer.cpp (+2/-0)
To merge this branch: bzr merge lp:~kdub/mir/0.17.1-fix-1406725
Reviewer Review Type Date Requested Status
Mir development team Pending
Review via email: mp+277476@code.launchpad.net

Commit message

just testing/demo for lp: #1406725. don't land

Description of the change

just testing/demo for lp: #1406725. don't land

To post a comment you must log in.
lp:~kdub/mir/0.17.1-fix-1406725 updated
3024. By Kevin DuBois

dont let xmir trash our cache to query size

3025. By Kevin DuBois

merge base

3026. By Kevin DuBois

bump version

Unmerged revisions

3026. By Kevin DuBois

bump version

3025. By Kevin DuBois

merge base

3024. By Kevin DuBois

dont let xmir trash our cache to query size

3023. By Kevin DuBois

add a warty quick fix for egl sync fence extensions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2015-11-05 15:49:46 +0000
+++ debian/changelog 2015-11-17 16:35:23 +0000
@@ -1,5 +1,6 @@
1mir (0.17.1) UNRELEASED; urgency=medium1mir (0.17.2ubuntu2) UNRELEASED; urgency=medium
22
3 [ Alberto Aguirre ]
3 * New upstream release 0.17.1 (https://launchpad.net/mir/+milestone/0.17.1)4 * New upstream release 0.17.1 (https://launchpad.net/mir/+milestone/0.17.1)
4 - No ABI changes. Bug fix release only.5 - No ABI changes. Bug fix release only.
5 - Bugs fixed:6 - Bugs fixed:
@@ -16,7 +17,11 @@
16 . [regression] mir-client-platform-mesa-dev pkg-config file dropped17 . [regression] mir-client-platform-mesa-dev pkg-config file dropped
17 (LP: #1509005)18 (LP: #1509005)
1819
19 -- Alberto Aguirre <alberto.aguirre@canonical.com> Wed, 04 Nov 2015 15:08:54 -060020 [ kdub ]
21 * correct graphic corruption due to not having EGLSync fences
22 * correct xmir from trashing the android caches whenever it queries size on android
23
24 -- Kevin DuBois <kevin.dubois@canonical.com> Tue, 17 Nov 2015 11:33:20 -0500
2025
21mir (0.17.0+15.10.20151008.2-0ubuntu1) wily; urgency=medium26mir (0.17.0+15.10.20151008.2-0ubuntu1) wily; urgency=medium
2227
2328
=== modified file 'include/renderers/gl/mir/renderer/gl/texture_source.h'
--- include/renderers/gl/mir/renderer/gl/texture_source.h 2015-09-15 17:13:45 +0000
+++ include/renderers/gl/mir/renderer/gl/texture_source.h 2015-11-17 16:35:23 +0000
@@ -32,6 +32,7 @@
32 virtual ~TextureSource() = default;32 virtual ~TextureSource() = default;
3333
34 virtual void gl_bind_to_texture() = 0;34 virtual void gl_bind_to_texture() = 0;
35 virtual void gl_rebind_to_texture() {};
3536
36protected:37protected:
37 TextureSource() = default;38 TextureSource() = default;
3839
=== modified file 'src/client/buffer_stream.cpp'
--- src/client/buffer_stream.cpp 2015-09-24 15:42:21 +0000
+++ src/client/buffer_stream.cpp 2015-11-17 16:35:23 +0000
@@ -510,13 +510,14 @@
510void mcl::BufferStream::release_cpu_region()510void mcl::BufferStream::release_cpu_region()
511{511{
512 secured_region.reset();512 secured_region.reset();
513 secured_region = nullptr;
513}514}
514515
515std::shared_ptr<mcl::MemoryRegion> mcl::BufferStream::secure_for_cpu_write()516std::shared_ptr<mcl::MemoryRegion> mcl::BufferStream::secure_for_cpu_write()
516{517{
517 std::unique_lock<decltype(mutex)> lock(mutex);518 std::unique_lock<decltype(mutex)> lock(mutex);
518519 if (!secured_region)
519 secured_region = buffer_depository->current_buffer()->secure_for_cpu_write();520 secured_region = buffer_depository->current_buffer()->secure_for_cpu_write();
520 return secured_region;521 return secured_region;
521}522}
522523
523524
=== modified file 'src/common/CMakeLists.txt'
--- src/common/CMakeLists.txt 2015-08-19 02:03:51 +0000
+++ src/common/CMakeLists.txt 2015-11-17 16:35:23 +0000
@@ -43,6 +43,7 @@
4343
44target_link_libraries(mircommon44target_link_libraries(mircommon
45 ${MIR_COMMON_REFERENCES}45 ${MIR_COMMON_REFERENCES}
46 ${EGL_LIBRARIES}
46)47)
4748
48# TODO we need a place to manage ABI and related versioning but use this as placeholder49# TODO we need a place to manage ABI and related versioning but use this as placeholder
4950
=== modified file 'src/common/graphics/android/android_native_buffer.cpp'
--- src/common/graphics/android/android_native_buffer.cpp 2015-06-17 05:20:42 +0000
+++ src/common/graphics/android/android_native_buffer.cpp 2015-11-17 16:35:23 +0000
@@ -58,3 +58,49 @@
58{58{
59 return fence->copy_native_handle();59 return fence->copy_native_handle();
60}60}
61
62void mga::AndroidNativeBuffer::EGLFence::clear_fence()
63{
64 if (!sync_extensions) return;
65 if (cmdfence != EGL_NO_SYNC_KHR)
66 {
67 wait_fence(disp, cmdfence, 0, 1500000000); //1500ms
68 destroy_fence(disp, cmdfence);
69 cmdfence = EGL_NO_SYNC_KHR;
70 }
71}
72
73void mga::AndroidNativeBuffer::EGLFence::raise_fence()
74{
75 if (!sync_extensions) return;
76 clear_fence();
77 disp = eglGetCurrentDisplay();
78 cmdfence = create_fence(disp, EGL_SYNC_FENCE_KHR, NULL);
79}
80
81mga::AndroidNativeBuffer::EGLFence::EGLFence() :
82 create_fence(reinterpret_cast<PFNEGLCREATESYNCKHRPROC>(eglGetProcAddress("eglCreateSyncKHR"))),
83 destroy_fence(reinterpret_cast<PFNEGLDESTROYSYNCKHRPROC>(eglGetProcAddress("eglDestroySyncKHR"))),
84 wait_fence(reinterpret_cast<PFNEGLCLIENTWAITSYNCKHRPROC>(eglGetProcAddress("eglClientWaitSyncKHR"))),
85 sync_extensions(create_fence && destroy_fence && wait_fence)
86{
87}
88
89mga::AndroidNativeBuffer::EGLFence::~EGLFence()
90{
91 if (!sync_extensions) return;
92 if (cmdfence != EGL_NO_SYNC_KHR)
93 destroy_fence(disp, cmdfence);
94}
95
96void mga::AndroidNativeBuffer::insert_cmdfence()
97{
98 std::unique_lock<std::mutex> lk(mutex);
99 cmdfence.raise_fence();
100}
101
102void mga::AndroidNativeBuffer::clear_cmdfence()
103{
104 std::unique_lock<std::mutex> lk(mutex);
105 cmdfence.clear_fence();
106}
61107
=== modified file 'src/gl/recently_used_cache.cpp'
--- src/gl/recently_used_cache.cpp 2015-10-06 02:30:52 +0000
+++ src/gl/recently_used_cache.cpp 2015-11-17 16:35:23 +0000
@@ -47,6 +47,15 @@
47 texture.resource = buffer;47 texture.resource = buffer;
48 texture.last_bound_buffer = buffer_id;48 texture.last_bound_buffer = buffer_id;
49 }49 }
50 else
51 {
52 auto const texture_source =
53 dynamic_cast<mir::renderer::gl::TextureSource*>(
54 buffer->native_buffer_base());
55 if (!texture_source)
56 BOOST_THROW_EXCEPTION(std::logic_error("Buffer does not support GL rendering"));
57 texture_source->gl_rebind_to_texture();
58 }
50 texture.valid_binding = true;59 texture.valid_binding = true;
51 texture.used = true;60 texture.used = true;
5261
5362
=== modified file 'src/include/common/mir/graphics/android/android_native_buffer.h'
--- src/include/common/mir/graphics/android/android_native_buffer.h 2015-06-17 05:20:42 +0000
+++ src/include/common/mir/graphics/android/android_native_buffer.h 2015-11-17 16:35:23 +0000
@@ -19,6 +19,9 @@
19#ifndef MIR_GRAPHICS_ANDROID_ANDROID_NATIVE_BUFFER_H_19#ifndef MIR_GRAPHICS_ANDROID_ANDROID_NATIVE_BUFFER_H_
20#define MIR_GRAPHICS_ANDROID_ANDROID_NATIVE_BUFFER_H_20#define MIR_GRAPHICS_ANDROID_ANDROID_NATIVE_BUFFER_H_
2121
22#define EGL_EGLEXT_PROTOTYPES
23#include <EGL/egl.h>
24#include <EGL/eglext.h>
22#include "native_buffer.h"25#include "native_buffer.h"
23#include <memory>26#include <memory>
24#include <mutex>27#include <mutex>
@@ -45,10 +48,32 @@
45 void ensure_available_for(BufferAccess);48 void ensure_available_for(BufferAccess);
46 void update_usage(NativeFence& merge_fd, BufferAccess);49 void update_usage(NativeFence& merge_fd, BufferAccess);
4750
51 void insert_cmdfence();
52 void clear_cmdfence();
48private:53private:
54
55 //Native fence infrastructure
49 std::shared_ptr<Fence> fence;56 std::shared_ptr<Fence> fence;
50 BufferAccess access;57 BufferAccess access;
51 std::shared_ptr<ANativeWindowBuffer> native_window_buffer;58 std::shared_ptr<ANativeWindowBuffer> native_window_buffer;
59
60 //EGL fence infrastructure
61 std::mutex mutex;
62 struct EGLFence
63 {
64 EGLFence();
65 ~EGLFence();
66 void clear_fence();
67 void raise_fence();
68 private:
69 EGLDisplay disp{EGL_NO_DISPLAY};
70 EGLSyncKHR cmdfence{EGL_NO_SYNC_KHR};
71 PFNEGLCREATESYNCKHRPROC const create_fence;
72 PFNEGLDESTROYSYNCKHRPROC const destroy_fence;
73 PFNEGLCLIENTWAITSYNCKHRPROC const wait_fence;
74 bool const sync_extensions;
75 } cmdfence;
76
52};77};
5378
54struct RefCountedNativeBuffer : public ANativeWindowBuffer79struct RefCountedNativeBuffer : public ANativeWindowBuffer
5580
=== modified file 'src/include/common/mir/graphics/android/native_buffer.h'
--- src/include/common/mir/graphics/android/native_buffer.h 2015-06-17 05:20:42 +0000
+++ src/include/common/mir/graphics/android/native_buffer.h 2015-11-17 16:35:23 +0000
@@ -53,6 +53,9 @@
53 virtual void ensure_available_for(android::BufferAccess intent) = 0;53 virtual void ensure_available_for(android::BufferAccess intent) = 0;
54 virtual void update_usage(android::NativeFence& fence, android::BufferAccess current_usage) = 0;54 virtual void update_usage(android::NativeFence& fence, android::BufferAccess current_usage) = 0;
5555
56 virtual void insert_cmdfence() = 0;
57 virtual void clear_cmdfence() = 0;
58
56protected:59protected:
57 NativeBuffer() = default;60 NativeBuffer() = default;
58 NativeBuffer(NativeBuffer const&) = delete;61 NativeBuffer(NativeBuffer const&) = delete;
5962
=== modified file 'src/platforms/android/server/buffer.cpp'
--- src/platforms/android/server/buffer.cpp 2015-08-27 13:41:02 +0000
+++ src/platforms/android/server/buffer.cpp 2015-11-17 16:35:23 +0000
@@ -71,6 +71,12 @@
71 return mga::to_mir_format(anwb->format);71 return mga::to_mir_format(anwb->format);
72}72}
7373
74void mga::Buffer::gl_rebind_to_texture()
75{
76 std::unique_lock<std::mutex> lk(content_lock);
77 native_buffer->insert_cmdfence();
78}
79
74void mga::Buffer::gl_bind_to_texture()80void mga::Buffer::gl_bind_to_texture()
75{81{
76 std::unique_lock<std::mutex> lk(content_lock);82 std::unique_lock<std::mutex> lk(content_lock);
@@ -114,9 +120,7 @@
114120
115 egl_extensions->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);121 egl_extensions->glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
116122
117 //TODO: we should make use of the android egl fence extension here to update the fence.123 native_buffer->insert_cmdfence();
118 // if the extension is not available, we should pass out a token that the user
119 // will have to keep until the completion of the gl draw
120}124}
121125
122std::shared_ptr<mg::NativeBuffer> mga::Buffer::native_buffer_handle() const126std::shared_ptr<mg::NativeBuffer> mga::Buffer::native_buffer_handle() const
123127
=== modified file 'src/platforms/android/server/buffer.h'
--- src/platforms/android/server/buffer.h 2015-09-04 06:46:36 +0000
+++ src/platforms/android/server/buffer.h 2015-11-17 16:35:23 +0000
@@ -56,6 +56,7 @@
56 geometry::Stride stride() const override;56 geometry::Stride stride() const override;
57 MirPixelFormat pixel_format() const override;57 MirPixelFormat pixel_format() const override;
58 void gl_bind_to_texture() override;58 void gl_bind_to_texture() override;
59 void gl_rebind_to_texture() override;
59 //note, you will get the native representation of an android buffer, including60 //note, you will get the native representation of an android buffer, including
60 //the fences associated with the buffer. You must close these fences61 //the fences associated with the buffer. You must close these fences
61 std::shared_ptr<NativeBuffer> native_buffer_handle() const override;62 std::shared_ptr<NativeBuffer> native_buffer_handle() const override;
6263
=== modified file 'src/platforms/android/server/ipc_operations.cpp'
--- src/platforms/android/server/ipc_operations.cpp 2015-06-18 14:33:10 +0000
+++ src/platforms/android/server/ipc_operations.cpp 2015-11-17 16:35:23 +0000
@@ -32,6 +32,8 @@
32{32{
33 auto native_buffer = buffer.native_buffer_handle();33 auto native_buffer = buffer.native_buffer_handle();
3434
35 native_buffer->clear_cmdfence();
36
35 mir::Fd fence_fd(native_buffer->copy_fence());37 mir::Fd fence_fd(native_buffer->copy_fence());
36 if (fence_fd != mir::Fd::invalid)38 if (fence_fd != mir::Fd::invalid)
37 {39 {
3840
=== modified file 'src/server/compositor/multi_threaded_compositor.cpp'
--- src/server/compositor/multi_threaded_compositor.cpp 2015-09-22 14:53:26 +0000
+++ src/server/compositor/multi_threaded_compositor.cpp 2015-11-17 16:35:23 +0000
@@ -137,12 +137,16 @@
137 frames_scheduled--;137 frames_scheduled--;
138 lock.unlock();138 lock.unlock();
139139
140 std::vector<mc::SceneElementSequence> seqs;
140 for (auto& tuple : compositors)141 for (auto& tuple : compositors)
141 {142 {
142 auto& compositor = std::get<1>(tuple);143 auto& compositor = std::get<1>(tuple);
143 compositor->composite(scene->scene_elements_for(compositor.get()));144 auto rs = scene->scene_elements_for(compositor.get());
145 seqs.push_back(rs);
146 compositor->composite(std::move(rs));
144 }147 }
145 group.post();148 group.post();
149 seqs.clear();
146150
147 /*151 /*
148 * "Predictive bypass" optimization: If the last frame was152 * "Predictive bypass" optimization: If the last frame was
149153
=== modified file 'tests/acceptance-tests/test_latency.cpp'
--- tests/acceptance-tests/test_latency.cpp 2015-09-08 03:25:06 +0000
+++ tests/acceptance-tests/test_latency.cpp 2015-11-17 16:35:23 +0000
@@ -190,7 +190,7 @@
190};190};
191}191}
192192
193TEST_F(ClientLatency, triple_buffered_client_uses_all_buffers)193TEST_F(ClientLatency, DISABLED_triple_buffered_client_uses_all_buffers)
194{194{
195 using namespace testing;195 using namespace testing;
196196
197197
=== modified file 'tests/include/mir/test/doubles/mock_android_native_buffer.h'
--- tests/include/mir/test/doubles/mock_android_native_buffer.h 2015-06-17 05:20:42 +0000
+++ tests/include/mir/test/doubles/mock_android_native_buffer.h 2015-11-17 16:35:23 +0000
@@ -57,6 +57,9 @@
57 MOCK_METHOD1(ensure_available_for, void(graphics::android::BufferAccess));57 MOCK_METHOD1(ensure_available_for, void(graphics::android::BufferAccess));
58 MOCK_METHOD2(update_usage, void(graphics::android::NativeFence&, graphics::android::BufferAccess));58 MOCK_METHOD2(update_usage, void(graphics::android::NativeFence&, graphics::android::BufferAccess));
5959
60 MOCK_METHOD0(insert_cmdfence, void());
61 MOCK_METHOD0(clear_cmdfence, void());
62
60 ANativeWindowBuffer stub_anwb;63 ANativeWindowBuffer stub_anwb;
61 native_handle_t native_handle;64 native_handle_t native_handle;
62};65};
6366
=== modified file 'tests/include/mir/test/doubles/stub_android_native_buffer.h'
--- tests/include/mir/test/doubles/stub_android_native_buffer.h 2015-05-29 17:53:49 +0000
+++ tests/include/mir/test/doubles/stub_android_native_buffer.h 2015-11-17 16:35:23 +0000
@@ -47,6 +47,9 @@
47 void ensure_available_for(graphics::android::BufferAccess) {}47 void ensure_available_for(graphics::android::BufferAccess) {}
48 void update_usage(graphics::android::NativeFence&, graphics::android::BufferAccess) {}48 void update_usage(graphics::android::NativeFence&, graphics::android::BufferAccess) {}
4949
50 void insert_cmdfence() {}
51 void clear_cmdfence() {}
52
50 ANativeWindowBuffer stub_anwb;53 ANativeWindowBuffer stub_anwb;
51 native_handle_t native_handle;54 native_handle_t native_handle;
52};55};
5356
=== modified file 'tests/mir_test_doubles/mock_egl.cpp'
--- tests/mir_test_doubles/mock_egl.cpp 2015-06-25 03:00:08 +0000
+++ tests/mir_test_doubles/mock_egl.cpp 2015-11-17 16:35:23 +0000
@@ -125,6 +125,8 @@
125 .WillByDefault(Return(fake_egl_image));125 .WillByDefault(Return(fake_egl_image));
126126
127 typedef mtd::MockEGL::generic_function_pointer_t func_ptr_t;127 typedef mtd::MockEGL::generic_function_pointer_t func_ptr_t;
128 ON_CALL(*this, eglGetProcAddress(_))
129 .WillByDefault(Return(nullptr));
128 ON_CALL(*this, eglGetProcAddress(StrEq("eglCreateImageKHR")))130 ON_CALL(*this, eglGetProcAddress(StrEq("eglCreateImageKHR")))
129 .WillByDefault(Return(reinterpret_cast<func_ptr_t>(extension_eglCreateImageKHR)));131 .WillByDefault(Return(reinterpret_cast<func_ptr_t>(extension_eglCreateImageKHR)));
130 ON_CALL(*this, eglGetProcAddress(StrEq("eglDestroyImageKHR")))132 ON_CALL(*this, eglGetProcAddress(StrEq("eglDestroyImageKHR")))
131133
=== modified file 'tests/unit-tests/client/android/test_gralloc_registrar.cpp'
--- tests/unit-tests/client/android/test_gralloc_registrar.cpp 2015-06-25 03:00:08 +0000
+++ tests/unit-tests/client/android/test_gralloc_registrar.cpp 2015-11-17 16:35:23 +0000
@@ -19,6 +19,7 @@
19#include "mir/graphics/android/native_buffer.h"19#include "mir/graphics/android/native_buffer.h"
20#include "src/platforms/android/client/gralloc_registrar.h"20#include "src/platforms/android/client/gralloc_registrar.h"
21#include "mir/test/doubles/mock_android_native_buffer.h"21#include "mir/test/doubles/mock_android_native_buffer.h"
22#include "mir/test/doubles/mock_egl.h"
22#include <stdexcept>23#include <stdexcept>
23#include <fcntl.h>24#include <fcntl.h>
24#include <gtest/gtest.h>25#include <gtest/gtest.h>
@@ -39,6 +40,7 @@
39 unlock = hook_unlock;40 unlock = hook_unlock;
40 }41 }
4142
43 mtd::MockEGL mock_egl;
42 MOCK_CONST_METHOD2(registerBuffer_interface,44 MOCK_CONST_METHOD2(registerBuffer_interface,
43 int(struct gralloc_module_t const*, buffer_handle_t));45 int(struct gralloc_module_t const*, buffer_handle_t));
44 MOCK_CONST_METHOD2(unregisterBuffer_interface,46 MOCK_CONST_METHOD2(unregisterBuffer_interface,
4547
=== modified file 'tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp'
--- tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp 2015-08-07 15:55:22 +0000
+++ tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp 2015-11-17 16:35:23 +0000
@@ -22,6 +22,7 @@
2222
23#include "mir/test/doubles/mock_android_alloc_device.h"23#include "mir/test/doubles/mock_android_alloc_device.h"
24#include "mir/test/doubles/mock_alloc_adaptor.h"24#include "mir/test/doubles/mock_alloc_adaptor.h"
25#include "mir/test/doubles/mock_egl.h"
2526
26#include <gtest/gtest.h>27#include <gtest/gtest.h>
27#include <gmock/gmock.h>28#include <gmock/gmock.h>
@@ -64,6 +65,7 @@
64 int const fb_usage_flags;65 int const fb_usage_flags;
65 int const hw_usage_flags;66 int const hw_usage_flags;
66 int const sw_usage_flags;67 int const sw_usage_flags;
68 mtd::MockEGL mock_egl;
67};69};
6870
69TEST_F(AdaptorICSTest, resource_type_test_fail_ret)71TEST_F(AdaptorICSTest, resource_type_test_fail_ret)
7072
=== modified file 'tests/unit-tests/graphics/android/test_native_buffer.cpp'
--- tests/unit-tests/graphics/android/test_native_buffer.cpp 2015-06-25 03:00:08 +0000
+++ tests/unit-tests/graphics/android/test_native_buffer.cpp 2015-11-17 16:35:23 +0000
@@ -18,6 +18,7 @@
1818
19#include "mir/graphics/android/android_native_buffer.h"19#include "mir/graphics/android/android_native_buffer.h"
20#include "mir/test/doubles/mock_fence.h"20#include "mir/test/doubles/mock_fence.h"
21#include "mir/test/doubles/mock_egl.h"
21#include <memory>22#include <memory>
22#include <gtest/gtest.h>23#include <gtest/gtest.h>
2324
@@ -36,6 +37,7 @@
36 std::shared_ptr<ANativeWindowBuffer> a_native_window_buffer;37 std::shared_ptr<ANativeWindowBuffer> a_native_window_buffer;
37 std::shared_ptr<mtd::MockFence> mock_fence;38 std::shared_ptr<mtd::MockFence> mock_fence;
38 int fake_fd;39 int fake_fd;
40 mtd::MockEGL mock_egl;
39};41};
4042
41TEST_F(NativeBuffer, extends_lifetime_when_driver_calls_external_refcount_hooks)43TEST_F(NativeBuffer, extends_lifetime_when_driver_calls_external_refcount_hooks)

Subscribers

People subscribed via source and target branches