OLD | NEW |
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include "content/common/gpu/establish_channel_params.h" | |
9 #include "content/common/gpu/gpu_channel.h" | 8 #include "content/common/gpu/gpu_channel.h" |
10 #include "content/common/gpu/gpu_channel_manager.h" | 9 #include "content/common/gpu/gpu_channel_manager.h" |
11 #include "content/common/gpu/gpu_channel_test_common.h" | 10 #include "content/common/gpu/gpu_channel_test_common.h" |
| 11 #include "content/common/gpu/gpu_messages.h" |
12 #include "gpu/command_buffer/common/value_state.h" | 12 #include "gpu/command_buffer/common/value_state.h" |
13 #include "gpu/command_buffer/service/gl_utils.h" | 13 #include "gpu/command_buffer/service/gl_utils.h" |
14 #include "gpu/command_buffer/service/valuebuffer_manager.h" | 14 #include "gpu/command_buffer/service/valuebuffer_manager.h" |
| 15 #include "ipc/ipc_test_sink.h" |
15 | 16 |
16 using gpu::gles2::ValuebufferManager; | 17 using gpu::gles2::ValuebufferManager; |
17 using gpu::ValueState; | 18 using gpu::ValueState; |
18 | 19 |
19 namespace content { | 20 namespace content { |
20 | 21 |
21 class GpuChannelManagerTest : public GpuChannelTestCommon { | 22 class GpuChannelManagerTest : public GpuChannelTestCommon { |
22 public: | 23 public: |
23 GpuChannelManagerTest() : GpuChannelTestCommon() {} | 24 GpuChannelManagerTest() : GpuChannelTestCommon() {} |
24 ~GpuChannelManagerTest() override {} | 25 ~GpuChannelManagerTest() override {} |
25 }; | 26 }; |
26 | 27 |
27 TEST_F(GpuChannelManagerTest, EstablishChannel) { | 28 TEST_F(GpuChannelManagerTest, EstablishChannel) { |
28 int32_t kClientId = 1; | 29 int32_t kClientId = 1; |
29 uint64_t kClientTracingId = 1; | 30 uint64_t kClientTracingId = 1; |
30 | 31 |
31 ASSERT_TRUE(channel_manager()); | 32 ASSERT_TRUE(channel_manager()); |
32 | 33 |
33 EstablishChannelParams params; | 34 GpuMsg_EstablishChannel_Params params; |
34 params.client_id = kClientId; | 35 params.client_id = kClientId; |
35 params.client_tracing_id = kClientTracingId; | 36 params.client_tracing_id = kClientTracingId; |
36 params.preempts = false; | 37 params.preempts = false; |
37 params.allow_view_command_buffers = false; | 38 params.allow_view_command_buffers = false; |
38 params.allow_real_time_streams = false; | 39 params.allow_real_time_streams = false; |
39 channel_manager()->EstablishChannel(params); | 40 EXPECT_TRUE( |
40 IPC::ChannelHandle handle = | 41 channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel(params))); |
41 channel_manager_delegate()->last_established_channel_handle(); | 42 EXPECT_EQ((size_t)1, sink()->message_count()); |
42 EXPECT_NE("", handle.name); | 43 const IPC::Message* msg = |
| 44 sink()->GetUniqueMessageMatching(GpuHostMsg_ChannelEstablished::ID); |
| 45 ASSERT_TRUE(msg); |
| 46 base::Tuple<IPC::ChannelHandle> handle; |
| 47 ASSERT_TRUE(GpuHostMsg_ChannelEstablished::Read(msg, &handle)); |
| 48 EXPECT_NE("", base::get<0>(handle).name); |
| 49 sink()->ClearMessages(); |
43 | 50 |
44 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | 51 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); |
45 ASSERT_TRUE(channel); | 52 ASSERT_TRUE(channel); |
46 EXPECT_EQ(handle.name, channel->channel_id()); | 53 EXPECT_EQ(base::get<0>(handle).name, channel->channel_id()); |
47 } | 54 } |
48 | 55 |
49 TEST_F(GpuChannelManagerTest, SecureValueStateForwarding) { | 56 TEST_F(GpuChannelManagerTest, SecureValueStateForwarding) { |
50 int32_t kClientId1 = 111; | 57 int32_t kClientId1 = 111; |
51 uint64_t kClientTracingId1 = 11111; | 58 uint64_t kClientTracingId1 = 11111; |
52 int32_t kClientId2 = 222; | 59 int32_t kClientId2 = 222; |
53 uint64_t kClientTracingId2 = 22222; | 60 uint64_t kClientTracingId2 = 22222; |
54 ValueState value_state1; | 61 ValueState value_state1; |
55 value_state1.int_value[0] = 1111; | 62 value_state1.int_value[0] = 1111; |
56 value_state1.int_value[1] = 0; | 63 value_state1.int_value[1] = 0; |
57 value_state1.int_value[2] = 0; | 64 value_state1.int_value[2] = 0; |
58 value_state1.int_value[3] = 0; | 65 value_state1.int_value[3] = 0; |
59 ValueState value_state2; | 66 ValueState value_state2; |
60 value_state2.int_value[0] = 3333; | 67 value_state2.int_value[0] = 3333; |
61 value_state2.int_value[1] = 0; | 68 value_state2.int_value[1] = 0; |
62 value_state2.int_value[2] = 0; | 69 value_state2.int_value[2] = 0; |
63 value_state2.int_value[3] = 0; | 70 value_state2.int_value[3] = 0; |
64 | 71 |
65 ASSERT_TRUE(channel_manager()); | 72 ASSERT_TRUE(channel_manager()); |
66 | 73 |
67 // Initialize gpu channels | 74 // Initialize gpu channels |
68 EstablishChannelParams params; | 75 GpuMsg_EstablishChannel_Params params; |
69 params.client_id = kClientId1; | 76 params.client_id = kClientId1; |
70 params.client_tracing_id = kClientTracingId1; | 77 params.client_tracing_id = kClientTracingId1; |
71 params.preempts = false; | 78 params.preempts = false; |
72 params.allow_view_command_buffers = false; | 79 params.allow_view_command_buffers = false; |
73 params.allow_real_time_streams = false; | 80 params.allow_real_time_streams = false; |
74 channel_manager()->EstablishChannel(params); | 81 EXPECT_TRUE( |
| 82 channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel(params))); |
75 GpuChannel* channel1 = channel_manager()->LookupChannel(kClientId1); | 83 GpuChannel* channel1 = channel_manager()->LookupChannel(kClientId1); |
76 ASSERT_TRUE(channel1); | 84 ASSERT_TRUE(channel1); |
77 | 85 |
78 params.client_id = kClientId2; | 86 params.client_id = kClientId2; |
79 params.client_tracing_id = kClientTracingId2; | 87 params.client_tracing_id = kClientTracingId2; |
80 channel_manager()->EstablishChannel(params); | 88 EXPECT_TRUE( |
| 89 channel_manager()->OnMessageReceived(GpuMsg_EstablishChannel(params))); |
81 GpuChannel* channel2 = channel_manager()->LookupChannel(kClientId2); | 90 GpuChannel* channel2 = channel_manager()->LookupChannel(kClientId2); |
82 ASSERT_TRUE(channel2); | 91 ASSERT_TRUE(channel2); |
83 | 92 |
84 EXPECT_NE(channel1, channel2); | 93 EXPECT_NE(channel1, channel2); |
85 | 94 |
86 // Make sure value states are only accessible by proper channels | 95 // Make sure value states are only accessible by proper channels |
87 channel_manager()->UpdateValueState(kClientId1, GL_MOUSE_POSITION_CHROMIUM, | 96 channel_manager()->OnMessageReceived(GpuMsg_UpdateValueState( |
88 value_state1); | 97 kClientId1, GL_MOUSE_POSITION_CHROMIUM, value_state1)); |
89 channel_manager()->UpdateValueState(kClientId2, GL_MOUSE_POSITION_CHROMIUM, | 98 channel_manager()->OnMessageReceived(GpuMsg_UpdateValueState( |
90 value_state2); | 99 kClientId2, GL_MOUSE_POSITION_CHROMIUM, value_state2)); |
91 | 100 |
92 const gpu::ValueStateMap* pending_value_buffer_state1 = | 101 const gpu::ValueStateMap* pending_value_buffer_state1 = |
93 channel1->pending_valuebuffer_state(); | 102 channel1->pending_valuebuffer_state(); |
94 const gpu::ValueStateMap* pending_value_buffer_state2 = | 103 const gpu::ValueStateMap* pending_value_buffer_state2 = |
95 channel2->pending_valuebuffer_state(); | 104 channel2->pending_valuebuffer_state(); |
96 EXPECT_NE(pending_value_buffer_state1, pending_value_buffer_state2); | 105 EXPECT_NE(pending_value_buffer_state1, pending_value_buffer_state2); |
97 | 106 |
98 const ValueState* state1 = | 107 const ValueState* state1 = |
99 pending_value_buffer_state1->GetState(GL_MOUSE_POSITION_CHROMIUM); | 108 pending_value_buffer_state1->GetState(GL_MOUSE_POSITION_CHROMIUM); |
100 const ValueState* state2 = | 109 const ValueState* state2 = |
101 pending_value_buffer_state2->GetState(GL_MOUSE_POSITION_CHROMIUM); | 110 pending_value_buffer_state2->GetState(GL_MOUSE_POSITION_CHROMIUM); |
102 EXPECT_NE(state1, state2); | 111 EXPECT_NE(state1, state2); |
103 | 112 |
104 EXPECT_EQ(state1->int_value[0], value_state1.int_value[0]); | 113 EXPECT_EQ(state1->int_value[0], value_state1.int_value[0]); |
105 EXPECT_EQ(state2->int_value[0], value_state2.int_value[0]); | 114 EXPECT_EQ(state2->int_value[0], value_state2.int_value[0]); |
106 EXPECT_NE(state1->int_value[0], state2->int_value[0]); | 115 EXPECT_NE(state1->int_value[0], state2->int_value[0]); |
107 } | 116 } |
108 | 117 |
109 } // namespace content | 118 } // namespace content |
OLD | NEW |