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

Side by Side Diff: content/browser/browser_io_surface_manager_mac_unittest.cc

Issue 1137453002: content: Pass IOSurface references using Mach IPC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase, remove extra DCHECKs and fix reply port typo Created 5 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/browser_io_surface_manager_mac.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace content {
10
11 class BrowserIOSurfaceManagerTest : public testing::Test {
12 public:
13 void EnsureRunning() { io_surface_manager_.EnsureRunning(); }
14
15 gpu::Mailbox GetGpuProcessMailbox() const {
16 return io_surface_manager_.GetGpuProcessMailbox();
17 }
18
19 gpu::Mailbox GenerateChildProcessMailbox(int child_process_id) {
20 return io_surface_manager_.GenerateChildProcessMailbox(child_process_id);
21 }
22
23 void InvalidateChildProcessMailbox(const gpu::Mailbox& mailbox) {
24 io_surface_manager_.InvalidateChildProcessMailbox(mailbox);
25 }
26
27 bool HandleRegisterIOSurfaceRequest(
28 const IOSurfaceManagerHostMsg_RegisterIOSurface& request,
29 IOSurfaceManagerMsg_RegisterIOSurfaceReply* reply) {
30 return io_surface_manager_.HandleRegisterIOSurfaceRequest(request, reply);
31 }
32
33 bool HandleUnregisterIOSurfaceRequest(
34 const IOSurfaceManagerHostMsg_UnregisterIOSurface& request) {
35 return io_surface_manager_.HandleUnregisterIOSurfaceRequest(request);
36 }
37
38 bool HandleAcquireIOSurfaceRequest(
39 const IOSurfaceManagerHostMsg_AcquireIOSurface& request,
40 IOSurfaceManagerMsg_AcquireIOSurfaceReply* reply) {
41 return io_surface_manager_.HandleAcquireIOSurfaceRequest(request, reply);
42 }
43
44 private:
45 BrowserIOSurfaceManager io_surface_manager_;
46 };
47
48 TEST_F(BrowserIOSurfaceManagerTest, EnsureRunning) {
49 EnsureRunning();
50 mach_port_t service_port =
51 BrowserIOSurfaceManager::LookupServicePort(getpid());
52 EXPECT_NE(static_cast<mach_port_t>(MACH_PORT_NULL), service_port);
53 mach_port_deallocate(mach_task_self(), service_port);
54 }
55
56 TEST_F(BrowserIOSurfaceManagerTest, IOSurfaceRegistration) {
57 const int kIOSurfaceId = 1;
58 const int kClientId = 1;
59
60 gpu::Mailbox child_process_mailbox = GenerateChildProcessMailbox(kClientId);
61
62 {
63 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
64 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
65
66 request.io_surface_id = kIOSurfaceId;
67 request.client_id = kClientId;
68
69 // Fails as request doesn't contain valid mailbox.
70 EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
71
72 memcpy(request.mailbox_name, child_process_mailbox.name,
73 sizeof(child_process_mailbox.name));
74 // Fails as child process is not allowed to register IOSurfaces.
75 EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
76
77 gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
78 memcpy(request.mailbox_name, gpu_process_mailbox.name,
79 sizeof(gpu_process_mailbox.name));
80 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
81 EXPECT_TRUE(reply.result);
82 }
83
84 {
85 IOSurfaceManagerHostMsg_UnregisterIOSurface request = {{0}};
86
87 request.io_surface_id = kIOSurfaceId;
88 request.client_id = kClientId;
89
90 // Fails as request doesn't contain valid GPU mailbox.
91 EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
92
93 memcpy(request.mailbox_name, child_process_mailbox.name,
94 sizeof(child_process_mailbox.name));
95 // Fails as child process is not allowed to unregister IOSurfaces.
96 EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
97
98 gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
99 memcpy(request.mailbox_name, gpu_process_mailbox.name,
100 sizeof(gpu_process_mailbox.name));
101 EXPECT_TRUE(HandleUnregisterIOSurfaceRequest(request));
102 }
103 }
104
105 TEST_F(BrowserIOSurfaceManagerTest, AcquireIOSurface) {
106 const int kIOSurfaceId1 = 10;
107 const int kIOSurfaceId2 = 20;
108 const int kClientId1 = 1;
109 const int kClientId2 = 2;
110 const mach_port_t kIOSurfacePortId1 = 100u;
111 const mach_port_t kIOSurfacePortId2 = 200u;
112
113 gpu::Mailbox child_process_mailbox1 = GenerateChildProcessMailbox(kClientId1);
114 gpu::Mailbox child_process_mailbox2 = GenerateChildProcessMailbox(kClientId2);
115
116 {
117 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
118 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
119
120 // Register IOSurface for use by kClientId1.
121 request.io_surface_id = kIOSurfaceId1;
122 request.client_id = kClientId1;
123 request.io_surface_port.name = kIOSurfacePortId1;
124 gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
125 memcpy(request.mailbox_name, gpu_process_mailbox.name,
126 sizeof(gpu_process_mailbox.name));
127 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
128 EXPECT_TRUE(reply.result);
129 }
130
131 {
132 IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
133 IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
134
135 // Register IOSurface for use by kClientId2.
136 request.io_surface_id = kIOSurfaceId2;
137 request.client_id = kClientId2;
138 request.io_surface_port.name = kIOSurfacePortId2;
139 gpu::Mailbox gpu_process_mailbox = GetGpuProcessMailbox();
140 memcpy(request.mailbox_name, gpu_process_mailbox.name,
141 sizeof(gpu_process_mailbox.name));
142 EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
143 EXPECT_TRUE(reply.result);
144 }
145
146 {
147 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
148 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
149
150 request.io_surface_id = kIOSurfaceId2;
151
152 // Fails as request doesn't contain valid mailbox.
153 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
154
155 memcpy(request.mailbox_name, child_process_mailbox1.name,
156 sizeof(child_process_mailbox1.name));
157 // Fails as child process 1 is not allowed to acquire this IOSurface.
158 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
159
160 request.io_surface_id = kIOSurfaceId1;
161 EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
162 EXPECT_EQ(kIOSurfacePortId1, reply.io_surface_port.name);
163 }
164
165 {
166 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
167 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
168
169 request.io_surface_id = kIOSurfaceId2;
170
171 memcpy(request.mailbox_name, child_process_mailbox2.name,
172 sizeof(child_process_mailbox2.name));
173 EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
174 EXPECT_EQ(kIOSurfacePortId2, reply.io_surface_port.name);
175 }
176
177 InvalidateChildProcessMailbox(child_process_mailbox2);
178
179 {
180 IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
181 IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
182
183 request.io_surface_id = kIOSurfaceId2;
184
185 memcpy(request.mailbox_name, child_process_mailbox2.name,
186 sizeof(child_process_mailbox2.name));
187 // Fails as as mailbox is no longer valid.
188 EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
189 }
190 }
191
192 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698