| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/test/test_simple_task_runner.h" | 5 #include "base/test/test_simple_task_runner.h" |
| 6 #include "content/common/gpu/gpu_channel.h" | 6 #include "content/common/gpu/gpu_channel.h" |
| 7 #include "content/common/gpu/gpu_channel_manager.h" | 7 #include "content/common/gpu/gpu_channel_manager.h" |
| 8 #include "content/common/gpu/gpu_channel_test_common.h" | 8 #include "content/common/gpu/gpu_channel_test_common.h" |
| 9 #include "content/common/gpu/gpu_messages.h" | 9 #include "content/common/gpu/gpu_messages.h" |
| 10 #include "ipc/ipc_test_sink.h" | 10 #include "ipc/ipc_test_sink.h" |
| 11 | 11 |
| 12 namespace content { | 12 namespace content { |
| 13 | 13 |
| 14 class GpuChannelTest : public GpuChannelTestCommon { | 14 class GpuChannelTest : public GpuChannelTestCommon { |
| 15 public: | 15 public: |
| 16 GpuChannelTest() : GpuChannelTestCommon() {} | 16 GpuChannelTest() : GpuChannelTestCommon() {} |
| 17 ~GpuChannelTest() override {} | 17 ~GpuChannelTest() override {} |
| 18 |
| 19 GpuChannel* CreateChannel(int32 client_id, bool allow_real_time_streams) { |
| 20 DCHECK(channel_manager()); |
| 21 uint64 kClientTracingId = 1; |
| 22 GpuMsg_EstablishChannel_Params params; |
| 23 params.client_id = client_id; |
| 24 params.client_tracing_id = kClientTracingId; |
| 25 params.preempts = false; |
| 26 params.preempted = false; |
| 27 params.allow_future_sync_points = false; |
| 28 params.allow_real_time_streams = allow_real_time_streams; |
| 29 EXPECT_TRUE( |
| 30 channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel(params))); |
| 31 return channel_manager()->LookupChannel(client_id); |
| 32 } |
| 18 }; | 33 }; |
| 19 | 34 |
| 20 TEST_F(GpuChannelTest, CreateViewCommandBuffer) { | 35 TEST_F(GpuChannelTest, CreateViewCommandBuffer) { |
| 21 int32 kClientId = 1; | 36 int32 kClientId = 1; |
| 22 uint64 kClientTracingId = 1; | 37 GpuChannel* channel = CreateChannel(kClientId, false); |
| 23 | |
| 24 ASSERT_TRUE(channel_manager()); | |
| 25 | |
| 26 EXPECT_TRUE(channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel( | |
| 27 kClientId, kClientTracingId, false, false, false))); | |
| 28 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | |
| 29 ASSERT_TRUE(channel); | 38 ASSERT_TRUE(channel); |
| 30 | 39 |
| 31 gfx::GLSurfaceHandle surface_handle; | 40 gfx::GLSurfaceHandle surface_handle; |
| 32 int32 kSurfaceId = 1; | |
| 33 int32 kRouteId = 1; | 41 int32 kRouteId = 1; |
| 34 GPUCreateCommandBufferConfig init_params; | 42 GPUCreateCommandBufferConfig init_params; |
| 35 init_params.share_group_id = MSG_ROUTING_NONE; | 43 init_params.share_group_id = MSG_ROUTING_NONE; |
| 36 init_params.stream_id = 0; | 44 init_params.stream_id = 0; |
| 37 init_params.stream_priority = GpuStreamPriority::NORMAL; | 45 init_params.stream_priority = GpuStreamPriority::NORMAL; |
| 38 init_params.attribs = std::vector<int>(); | 46 init_params.attribs = std::vector<int>(); |
| 39 init_params.active_url = GURL(); | 47 init_params.active_url = GURL(); |
| 40 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 48 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 41 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 49 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 42 surface_handle, kSurfaceId, kClientId, init_params, kRouteId)); | 50 surface_handle, kClientId, init_params, kRouteId)); |
| 43 | 51 |
| 44 const IPC::Message* msg = | 52 const IPC::Message* msg = |
| 45 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 53 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 46 ASSERT_TRUE(msg); | 54 ASSERT_TRUE(msg); |
| 47 | 55 |
| 48 base::Tuple<CreateCommandBufferResult> result; | 56 base::Tuple<CreateCommandBufferResult> result; |
| 49 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 57 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 50 | 58 |
| 51 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); | 59 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); |
| 52 | 60 |
| 53 sink()->ClearMessages(); | 61 sink()->ClearMessages(); |
| 54 | 62 |
| 55 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId); | 63 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId); |
| 56 ASSERT_TRUE(stub); | 64 ASSERT_TRUE(stub); |
| 57 } | 65 } |
| 58 | 66 |
| 59 TEST_F(GpuChannelTest, IncompatibleStreamIds) { | 67 TEST_F(GpuChannelTest, IncompatibleStreamIds) { |
| 60 int32 kClientId = 1; | 68 int32 kClientId = 1; |
| 61 uint64 kClientTracingId = 1; | 69 GpuChannel* channel = CreateChannel(kClientId, false); |
| 62 | |
| 63 ASSERT_TRUE(channel_manager()); | |
| 64 | |
| 65 EXPECT_TRUE(channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel( | |
| 66 kClientId, kClientTracingId, false, false, false))); | |
| 67 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | |
| 68 ASSERT_TRUE(channel); | 70 ASSERT_TRUE(channel); |
| 69 | 71 |
| 70 // Create first context. | 72 // Create first context. |
| 71 int32 kSurfaceId1 = 1; | |
| 72 int32 kRouteId1 = 1; | 73 int32 kRouteId1 = 1; |
| 73 int32 kStreamId1 = 1; | 74 int32 kStreamId1 = 1; |
| 74 GPUCreateCommandBufferConfig init_params; | 75 GPUCreateCommandBufferConfig init_params; |
| 75 init_params.share_group_id = MSG_ROUTING_NONE; | 76 init_params.share_group_id = MSG_ROUTING_NONE; |
| 76 init_params.stream_id = kStreamId1; | 77 init_params.stream_id = kStreamId1; |
| 77 init_params.stream_priority = GpuStreamPriority::NORMAL; | 78 init_params.stream_priority = GpuStreamPriority::NORMAL; |
| 78 init_params.attribs = std::vector<int>(); | 79 init_params.attribs = std::vector<int>(); |
| 79 init_params.active_url = GURL(); | 80 init_params.active_url = GURL(); |
| 80 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 81 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 81 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 82 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 82 gfx::GLSurfaceHandle(), kSurfaceId1, kClientId, init_params, kRouteId1)); | 83 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId1)); |
| 83 | 84 |
| 84 const IPC::Message* msg = | 85 const IPC::Message* msg = |
| 85 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 86 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 86 ASSERT_TRUE(msg); | 87 ASSERT_TRUE(msg); |
| 87 | 88 |
| 88 base::Tuple<CreateCommandBufferResult> result; | 89 base::Tuple<CreateCommandBufferResult> result; |
| 89 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 90 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 90 | 91 |
| 91 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); | 92 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); |
| 92 | 93 |
| 93 sink()->ClearMessages(); | 94 sink()->ClearMessages(); |
| 94 | 95 |
| 95 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId1); | 96 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId1); |
| 96 ASSERT_TRUE(stub); | 97 ASSERT_TRUE(stub); |
| 97 | 98 |
| 98 // Create second context in same share group but different stream. | 99 // Create second context in same share group but different stream. |
| 99 int32 kSurfaceId2 = 2; | |
| 100 int32 kRouteId2 = 2; | 100 int32 kRouteId2 = 2; |
| 101 int32 kStreamId2 = 2; | 101 int32 kStreamId2 = 2; |
| 102 | 102 |
| 103 init_params.share_group_id = kRouteId1; | 103 init_params.share_group_id = kRouteId1; |
| 104 init_params.stream_id = kStreamId2; | 104 init_params.stream_id = kStreamId2; |
| 105 init_params.stream_priority = GpuStreamPriority::NORMAL; | 105 init_params.stream_priority = GpuStreamPriority::NORMAL; |
| 106 init_params.attribs = std::vector<int>(); | 106 init_params.attribs = std::vector<int>(); |
| 107 init_params.active_url = GURL(); | 107 init_params.active_url = GURL(); |
| 108 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 108 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 109 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 109 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 110 gfx::GLSurfaceHandle(), kSurfaceId2, kClientId, init_params, kRouteId2)); | 110 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId2)); |
| 111 | 111 |
| 112 msg = sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 112 msg = sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 113 ASSERT_TRUE(msg); | 113 ASSERT_TRUE(msg); |
| 114 | 114 |
| 115 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 115 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 116 | 116 |
| 117 EXPECT_EQ(CREATE_COMMAND_BUFFER_FAILED, base::get<0>(result)); | 117 EXPECT_EQ(CREATE_COMMAND_BUFFER_FAILED, base::get<0>(result)); |
| 118 | 118 |
| 119 sink()->ClearMessages(); | 119 sink()->ClearMessages(); |
| 120 | 120 |
| 121 stub = channel->LookupCommandBuffer(kRouteId2); | 121 stub = channel->LookupCommandBuffer(kRouteId2); |
| 122 ASSERT_FALSE(stub); | 122 ASSERT_FALSE(stub); |
| 123 } | 123 } |
| 124 | 124 |
| 125 TEST_F(GpuChannelTest, IncompatibleStreamPriorities) { | 125 TEST_F(GpuChannelTest, IncompatibleStreamPriorities) { |
| 126 int32 kClientId = 1; | 126 int32 kClientId = 1; |
| 127 uint64 kClientTracingId = 1; | 127 GpuChannel* channel = CreateChannel(kClientId, false); |
| 128 | |
| 129 ASSERT_TRUE(channel_manager()); | |
| 130 | |
| 131 EXPECT_TRUE(channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel( | |
| 132 kClientId, kClientTracingId, false, false, false))); | |
| 133 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | |
| 134 ASSERT_TRUE(channel); | 128 ASSERT_TRUE(channel); |
| 135 | 129 |
| 136 // Create first context. | 130 // Create first context. |
| 137 int32 kSurfaceId1 = 1; | |
| 138 int32 kRouteId1 = 1; | 131 int32 kRouteId1 = 1; |
| 139 int32 kStreamId1 = 1; | 132 int32 kStreamId1 = 1; |
| 140 GpuStreamPriority kStreamPriority1 = GpuStreamPriority::NORMAL; | 133 GpuStreamPriority kStreamPriority1 = GpuStreamPriority::NORMAL; |
| 141 GPUCreateCommandBufferConfig init_params; | 134 GPUCreateCommandBufferConfig init_params; |
| 142 init_params.share_group_id = MSG_ROUTING_NONE; | 135 init_params.share_group_id = MSG_ROUTING_NONE; |
| 143 init_params.stream_id = kStreamId1; | 136 init_params.stream_id = kStreamId1; |
| 144 init_params.stream_priority = kStreamPriority1; | 137 init_params.stream_priority = kStreamPriority1; |
| 145 init_params.attribs = std::vector<int>(); | 138 init_params.attribs = std::vector<int>(); |
| 146 init_params.active_url = GURL(); | 139 init_params.active_url = GURL(); |
| 147 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 140 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 148 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 141 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 149 gfx::GLSurfaceHandle(), kSurfaceId1, kClientId, init_params, kRouteId1)); | 142 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId1)); |
| 150 | 143 |
| 151 const IPC::Message* msg = | 144 const IPC::Message* msg = |
| 152 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 145 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 153 ASSERT_TRUE(msg); | 146 ASSERT_TRUE(msg); |
| 154 | 147 |
| 155 base::Tuple<CreateCommandBufferResult> result; | 148 base::Tuple<CreateCommandBufferResult> result; |
| 156 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 149 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 157 | 150 |
| 158 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); | 151 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); |
| 159 | 152 |
| 160 sink()->ClearMessages(); | 153 sink()->ClearMessages(); |
| 161 | 154 |
| 162 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId1); | 155 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId1); |
| 163 ASSERT_TRUE(stub); | 156 ASSERT_TRUE(stub); |
| 164 | 157 |
| 165 // Create second context in same share group but different stream. | 158 // Create second context in same share group but different stream. |
| 166 int32 kSurfaceId2 = 2; | |
| 167 int32 kRouteId2 = 2; | 159 int32 kRouteId2 = 2; |
| 168 int32 kStreamId2 = kStreamId1; | 160 int32 kStreamId2 = kStreamId1; |
| 169 GpuStreamPriority kStreamPriority2 = GpuStreamPriority::LOW; | 161 GpuStreamPriority kStreamPriority2 = GpuStreamPriority::LOW; |
| 170 | 162 |
| 171 init_params.share_group_id = MSG_ROUTING_NONE; | 163 init_params.share_group_id = MSG_ROUTING_NONE; |
| 172 init_params.stream_id = kStreamId2; | 164 init_params.stream_id = kStreamId2; |
| 173 init_params.stream_priority = kStreamPriority2; | 165 init_params.stream_priority = kStreamPriority2; |
| 174 init_params.attribs = std::vector<int>(); | 166 init_params.attribs = std::vector<int>(); |
| 175 init_params.active_url = GURL(); | 167 init_params.active_url = GURL(); |
| 176 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 168 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 177 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 169 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 178 gfx::GLSurfaceHandle(), kSurfaceId2, kClientId, init_params, kRouteId2)); | 170 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId2)); |
| 179 | 171 |
| 180 msg = sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 172 msg = sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 181 ASSERT_TRUE(msg); | 173 ASSERT_TRUE(msg); |
| 182 | 174 |
| 183 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 175 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 184 | 176 |
| 185 EXPECT_EQ(CREATE_COMMAND_BUFFER_FAILED, base::get<0>(result)); | 177 EXPECT_EQ(CREATE_COMMAND_BUFFER_FAILED, base::get<0>(result)); |
| 186 | 178 |
| 187 sink()->ClearMessages(); | 179 sink()->ClearMessages(); |
| 188 | 180 |
| 189 stub = channel->LookupCommandBuffer(kRouteId2); | 181 stub = channel->LookupCommandBuffer(kRouteId2); |
| 190 ASSERT_FALSE(stub); | 182 ASSERT_FALSE(stub); |
| 191 } | 183 } |
| 192 | 184 |
| 193 TEST_F(GpuChannelTest, StreamLifetime) { | 185 TEST_F(GpuChannelTest, StreamLifetime) { |
| 194 int32 kClientId = 1; | 186 int32 kClientId = 1; |
| 195 uint64 kClientTracingId = 1; | 187 GpuChannel* channel = CreateChannel(kClientId, false); |
| 196 | |
| 197 ASSERT_TRUE(channel_manager()); | |
| 198 | |
| 199 EXPECT_TRUE(channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel( | |
| 200 kClientId, kClientTracingId, false, false, false))); | |
| 201 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | |
| 202 ASSERT_TRUE(channel); | 188 ASSERT_TRUE(channel); |
| 203 | 189 |
| 204 // Create first context. | 190 // Create first context. |
| 205 int32 kSurfaceId1 = 1; | |
| 206 int32 kRouteId1 = 1; | 191 int32 kRouteId1 = 1; |
| 207 int32 kStreamId1 = 1; | 192 int32 kStreamId1 = 1; |
| 208 GpuStreamPriority kStreamPriority1 = GpuStreamPriority::NORMAL; | 193 GpuStreamPriority kStreamPriority1 = GpuStreamPriority::NORMAL; |
| 209 GPUCreateCommandBufferConfig init_params; | 194 GPUCreateCommandBufferConfig init_params; |
| 210 init_params.share_group_id = MSG_ROUTING_NONE; | 195 init_params.share_group_id = MSG_ROUTING_NONE; |
| 211 init_params.stream_id = kStreamId1; | 196 init_params.stream_id = kStreamId1; |
| 212 init_params.stream_priority = kStreamPriority1; | 197 init_params.stream_priority = kStreamPriority1; |
| 213 init_params.attribs = std::vector<int>(); | 198 init_params.attribs = std::vector<int>(); |
| 214 init_params.active_url = GURL(); | 199 init_params.active_url = GURL(); |
| 215 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 200 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 216 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 201 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 217 gfx::GLSurfaceHandle(), kSurfaceId1, kClientId, init_params, kRouteId1)); | 202 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId1)); |
| 218 | 203 |
| 219 const IPC::Message* msg = | 204 const IPC::Message* msg = |
| 220 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 205 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 221 ASSERT_TRUE(msg); | 206 ASSERT_TRUE(msg); |
| 222 | 207 |
| 223 base::Tuple<CreateCommandBufferResult> result; | 208 base::Tuple<CreateCommandBufferResult> result; |
| 224 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 209 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 225 | 210 |
| 226 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); | 211 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); |
| 227 | 212 |
| 228 sink()->ClearMessages(); | 213 sink()->ClearMessages(); |
| 229 | 214 |
| 230 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId1); | 215 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId1); |
| 231 ASSERT_TRUE(stub); | 216 ASSERT_TRUE(stub); |
| 232 | 217 |
| 233 { | 218 { |
| 234 // GpuChannelHost always calls set_unblock(false) on messages sent to the | 219 // GpuChannelHost always calls set_unblock(false) on messages sent to the |
| 235 // GPU process. | 220 // GPU process. |
| 236 IPC::Message m = GpuChannelMsg_DestroyCommandBuffer(kRouteId1); | 221 IPC::Message m = GpuChannelMsg_DestroyCommandBuffer(kRouteId1); |
| 237 m.set_unblock(false); | 222 m.set_unblock(false); |
| 238 EXPECT_TRUE(channel->filter()->OnMessageReceived(m)); | 223 EXPECT_TRUE(channel->filter()->OnMessageReceived(m)); |
| 239 task_runner()->RunPendingTasks(); | 224 task_runner()->RunPendingTasks(); |
| 240 } | 225 } |
| 241 | 226 |
| 242 stub = channel->LookupCommandBuffer(kRouteId1); | 227 stub = channel->LookupCommandBuffer(kRouteId1); |
| 243 ASSERT_FALSE(stub); | 228 ASSERT_FALSE(stub); |
| 244 | 229 |
| 245 // Create second context in same share group but different stream. | 230 // Create second context in same share group but different stream. |
| 246 int32 kSurfaceId2 = 2; | |
| 247 int32 kRouteId2 = 2; | 231 int32 kRouteId2 = 2; |
| 248 int32 kStreamId2 = 2; | 232 int32 kStreamId2 = 2; |
| 249 GpuStreamPriority kStreamPriority2 = GpuStreamPriority::LOW; | 233 GpuStreamPriority kStreamPriority2 = GpuStreamPriority::LOW; |
| 250 | 234 |
| 251 init_params.share_group_id = MSG_ROUTING_NONE; | 235 init_params.share_group_id = MSG_ROUTING_NONE; |
| 252 init_params.stream_id = kStreamId2; | 236 init_params.stream_id = kStreamId2; |
| 253 init_params.stream_priority = kStreamPriority2; | 237 init_params.stream_priority = kStreamPriority2; |
| 254 init_params.attribs = std::vector<int>(); | 238 init_params.attribs = std::vector<int>(); |
| 255 init_params.active_url = GURL(); | 239 init_params.active_url = GURL(); |
| 256 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 240 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 257 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 241 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 258 gfx::GLSurfaceHandle(), kSurfaceId2, kClientId, init_params, kRouteId2)); | 242 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId2)); |
| 259 | 243 |
| 260 msg = sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 244 msg = sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 261 ASSERT_TRUE(msg); | 245 ASSERT_TRUE(msg); |
| 262 | 246 |
| 263 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 247 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 264 | 248 |
| 265 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); | 249 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); |
| 266 | 250 |
| 267 sink()->ClearMessages(); | 251 sink()->ClearMessages(); |
| 268 | 252 |
| 269 stub = channel->LookupCommandBuffer(kRouteId2); | 253 stub = channel->LookupCommandBuffer(kRouteId2); |
| 270 ASSERT_TRUE(stub); | 254 ASSERT_TRUE(stub); |
| 271 } | 255 } |
| 272 | 256 |
| 273 TEST_F(GpuChannelTest, RealTimeStreamsDisallowed) { | 257 TEST_F(GpuChannelTest, RealTimeStreamsDisallowed) { |
| 274 int32 kClientId = 1; | 258 int32 kClientId = 1; |
| 275 uint64 kClientTracingId = 1; | |
| 276 bool allow_real_time_streams = false; | 259 bool allow_real_time_streams = false; |
| 277 | 260 GpuChannel* channel = CreateChannel(kClientId, allow_real_time_streams); |
| 278 ASSERT_TRUE(channel_manager()); | |
| 279 | |
| 280 EXPECT_TRUE(channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel( | |
| 281 kClientId, kClientTracingId, false, false, allow_real_time_streams))); | |
| 282 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | |
| 283 ASSERT_TRUE(channel); | 261 ASSERT_TRUE(channel); |
| 284 | 262 |
| 285 // Create first context. | 263 // Create first context. |
| 286 int32 kSurfaceId = 1; | |
| 287 int32 kRouteId = 1; | 264 int32 kRouteId = 1; |
| 288 int32 kStreamId = 1; | 265 int32 kStreamId = 1; |
| 289 GpuStreamPriority kStreamPriority = GpuStreamPriority::REAL_TIME; | 266 GpuStreamPriority kStreamPriority = GpuStreamPriority::REAL_TIME; |
| 290 GPUCreateCommandBufferConfig init_params; | 267 GPUCreateCommandBufferConfig init_params; |
| 291 init_params.share_group_id = MSG_ROUTING_NONE; | 268 init_params.share_group_id = MSG_ROUTING_NONE; |
| 292 init_params.stream_id = kStreamId; | 269 init_params.stream_id = kStreamId; |
| 293 init_params.stream_priority = kStreamPriority; | 270 init_params.stream_priority = kStreamPriority; |
| 294 init_params.attribs = std::vector<int>(); | 271 init_params.attribs = std::vector<int>(); |
| 295 init_params.active_url = GURL(); | 272 init_params.active_url = GURL(); |
| 296 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 273 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 297 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 274 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 298 gfx::GLSurfaceHandle(), kSurfaceId, kClientId, init_params, kRouteId)); | 275 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId)); |
| 299 | 276 |
| 300 const IPC::Message* msg = | 277 const IPC::Message* msg = |
| 301 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 278 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 302 ASSERT_TRUE(msg); | 279 ASSERT_TRUE(msg); |
| 303 | 280 |
| 304 base::Tuple<CreateCommandBufferResult> result; | 281 base::Tuple<CreateCommandBufferResult> result; |
| 305 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 282 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 306 | 283 |
| 307 EXPECT_EQ(CREATE_COMMAND_BUFFER_FAILED, base::get<0>(result)); | 284 EXPECT_EQ(CREATE_COMMAND_BUFFER_FAILED, base::get<0>(result)); |
| 308 | 285 |
| 309 sink()->ClearMessages(); | 286 sink()->ClearMessages(); |
| 310 | 287 |
| 311 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId); | 288 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId); |
| 312 ASSERT_FALSE(stub); | 289 ASSERT_FALSE(stub); |
| 313 } | 290 } |
| 314 | 291 |
| 315 TEST_F(GpuChannelTest, RealTimeStreamsAllowed) { | 292 TEST_F(GpuChannelTest, RealTimeStreamsAllowed) { |
| 316 int32 kClientId = 1; | 293 int32 kClientId = 1; |
| 317 uint64 kClientTracingId = 1; | |
| 318 | |
| 319 ASSERT_TRUE(channel_manager()); | |
| 320 | |
| 321 bool allow_real_time_streams = true; | 294 bool allow_real_time_streams = true; |
| 322 EXPECT_TRUE(channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel( | 295 GpuChannel* channel = CreateChannel(kClientId, allow_real_time_streams); |
| 323 kClientId, kClientTracingId, false, false, allow_real_time_streams))); | |
| 324 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | |
| 325 ASSERT_TRUE(channel); | 296 ASSERT_TRUE(channel); |
| 326 | 297 |
| 327 // Create first context. | 298 // Create first context. |
| 328 int32 kSurfaceId = 1; | |
| 329 int32 kRouteId = 1; | 299 int32 kRouteId = 1; |
| 330 int32 kStreamId = 1; | 300 int32 kStreamId = 1; |
| 331 GpuStreamPriority kStreamPriority = GpuStreamPriority::REAL_TIME; | 301 GpuStreamPriority kStreamPriority = GpuStreamPriority::REAL_TIME; |
| 332 GPUCreateCommandBufferConfig init_params; | 302 GPUCreateCommandBufferConfig init_params; |
| 333 init_params.share_group_id = MSG_ROUTING_NONE; | 303 init_params.share_group_id = MSG_ROUTING_NONE; |
| 334 init_params.stream_id = kStreamId; | 304 init_params.stream_id = kStreamId; |
| 335 init_params.stream_priority = kStreamPriority; | 305 init_params.stream_priority = kStreamPriority; |
| 336 init_params.attribs = std::vector<int>(); | 306 init_params.attribs = std::vector<int>(); |
| 337 init_params.active_url = GURL(); | 307 init_params.active_url = GURL(); |
| 338 init_params.gpu_preference = gfx::PreferIntegratedGpu; | 308 init_params.gpu_preference = gfx::PreferIntegratedGpu; |
| 339 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( | 309 channel_manager()->OnMessageReceived(GpuMsg_CreateViewCommandBuffer( |
| 340 gfx::GLSurfaceHandle(), kSurfaceId, kClientId, init_params, kRouteId)); | 310 gfx::GLSurfaceHandle(), kClientId, init_params, kRouteId)); |
| 341 | 311 |
| 342 const IPC::Message* msg = | 312 const IPC::Message* msg = |
| 343 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); | 313 sink()->GetUniqueMessageMatching(GpuHostMsg_CommandBufferCreated::ID); |
| 344 ASSERT_TRUE(msg); | 314 ASSERT_TRUE(msg); |
| 345 | 315 |
| 346 base::Tuple<CreateCommandBufferResult> result; | 316 base::Tuple<CreateCommandBufferResult> result; |
| 347 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); | 317 ASSERT_TRUE(GpuHostMsg_CommandBufferCreated::Read(msg, &result)); |
| 348 | 318 |
| 349 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); | 319 EXPECT_EQ(CREATE_COMMAND_BUFFER_SUCCEEDED, base::get<0>(result)); |
| 350 | 320 |
| 351 sink()->ClearMessages(); | 321 sink()->ClearMessages(); |
| 352 | 322 |
| 353 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId); | 323 GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId); |
| 354 ASSERT_TRUE(stub); | 324 ASSERT_TRUE(stub); |
| 355 } | 325 } |
| 356 | 326 |
| 357 } // namespace content | 327 } // namespace content |
| OLD | NEW |