| 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" |
| 12 #include "gpu/command_buffer/common/value_state.h" | 11 #include "gpu/command_buffer/common/value_state.h" |
| 13 #include "gpu/command_buffer/service/gl_utils.h" | 12 #include "gpu/command_buffer/service/gl_utils.h" |
| 14 #include "gpu/command_buffer/service/valuebuffer_manager.h" | 13 #include "gpu/command_buffer/service/valuebuffer_manager.h" |
| 15 | 14 |
| 16 using gpu::gles2::ValuebufferManager; | 15 using gpu::gles2::ValuebufferManager; |
| 17 using gpu::ValueState; | 16 using gpu::ValueState; |
| 18 | 17 |
| 19 namespace content { | 18 namespace content { |
| 20 | 19 |
| 21 class GpuChannelManagerTest : public GpuChannelTestCommon { | 20 class GpuChannelManagerTest : public GpuChannelTestCommon { |
| 22 public: | 21 public: |
| 23 GpuChannelManagerTest() : GpuChannelTestCommon() {} | 22 GpuChannelManagerTest() : GpuChannelTestCommon() {} |
| 24 ~GpuChannelManagerTest() override {} | 23 ~GpuChannelManagerTest() override {} |
| 25 }; | 24 }; |
| 26 | 25 |
| 27 TEST_F(GpuChannelManagerTest, EstablishChannel) { | 26 TEST_F(GpuChannelManagerTest, EstablishChannel) { |
| 28 int32_t kClientId = 1; | 27 int32_t kClientId = 1; |
| 29 uint64_t kClientTracingId = 1; | 28 uint64_t kClientTracingId = 1; |
| 30 | 29 |
| 31 ASSERT_TRUE(channel_manager()); | 30 ASSERT_TRUE(channel_manager()); |
| 32 | 31 |
| 33 EstablishChannelParams params; | 32 IPC::ChannelHandle channel_handle = channel_manager()->EstablishChannel( |
| 34 params.client_id = kClientId; | 33 kClientId, kClientTracingId, false /* preempts */, |
| 35 params.client_tracing_id = kClientTracingId; | 34 false /* allow_view_command_buffers */, |
| 36 params.preempts = false; | 35 false /* allow_real_time_streams */); |
| 37 params.allow_view_command_buffers = false; | |
| 38 params.allow_real_time_streams = false; | |
| 39 IPC::ChannelHandle channel_handle = | |
| 40 channel_manager()->EstablishChannel(params); | |
| 41 EXPECT_NE("", channel_handle.name); | 36 EXPECT_NE("", channel_handle.name); |
| 42 | 37 |
| 43 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); | 38 GpuChannel* channel = channel_manager()->LookupChannel(kClientId); |
| 44 ASSERT_TRUE(channel); | 39 ASSERT_TRUE(channel); |
| 45 EXPECT_EQ(channel_handle.name, channel->channel_id()); | 40 EXPECT_EQ(channel_handle.name, channel->channel_id()); |
| 46 } | 41 } |
| 47 | 42 |
| 48 TEST_F(GpuChannelManagerTest, SecureValueStateForwarding) { | 43 TEST_F(GpuChannelManagerTest, SecureValueStateForwarding) { |
| 49 int32_t kClientId1 = 111; | 44 int32_t kClientId1 = 111; |
| 50 uint64_t kClientTracingId1 = 11111; | 45 uint64_t kClientTracingId1 = 11111; |
| 51 int32_t kClientId2 = 222; | 46 int32_t kClientId2 = 222; |
| 52 uint64_t kClientTracingId2 = 22222; | 47 uint64_t kClientTracingId2 = 22222; |
| 53 ValueState value_state1; | 48 ValueState value_state1; |
| 54 value_state1.int_value[0] = 1111; | 49 value_state1.int_value[0] = 1111; |
| 55 value_state1.int_value[1] = 0; | 50 value_state1.int_value[1] = 0; |
| 56 value_state1.int_value[2] = 0; | 51 value_state1.int_value[2] = 0; |
| 57 value_state1.int_value[3] = 0; | 52 value_state1.int_value[3] = 0; |
| 58 ValueState value_state2; | 53 ValueState value_state2; |
| 59 value_state2.int_value[0] = 3333; | 54 value_state2.int_value[0] = 3333; |
| 60 value_state2.int_value[1] = 0; | 55 value_state2.int_value[1] = 0; |
| 61 value_state2.int_value[2] = 0; | 56 value_state2.int_value[2] = 0; |
| 62 value_state2.int_value[3] = 0; | 57 value_state2.int_value[3] = 0; |
| 63 | 58 |
| 64 ASSERT_TRUE(channel_manager()); | 59 ASSERT_TRUE(channel_manager()); |
| 65 | 60 |
| 66 // Initialize gpu channels | 61 // Initialize gpu channels |
| 67 EstablishChannelParams params; | 62 channel_manager()->EstablishChannel(kClientId1, kClientTracingId1, |
| 68 params.client_id = kClientId1; | 63 false /* preempts */, |
| 69 params.client_tracing_id = kClientTracingId1; | 64 false /* allow_view_command_buffer */, |
| 70 params.preempts = false; | 65 false /* allow_real_time_streams */); |
| 71 params.allow_view_command_buffers = false; | |
| 72 params.allow_real_time_streams = false; | |
| 73 channel_manager()->EstablishChannel(params); | |
| 74 GpuChannel* channel1 = channel_manager()->LookupChannel(kClientId1); | 66 GpuChannel* channel1 = channel_manager()->LookupChannel(kClientId1); |
| 75 ASSERT_TRUE(channel1); | 67 ASSERT_TRUE(channel1); |
| 76 | 68 |
| 77 params.client_id = kClientId2; | 69 channel_manager()->EstablishChannel(kClientId2, kClientTracingId2, |
| 78 params.client_tracing_id = kClientTracingId2; | 70 false /* preempts */, |
| 79 channel_manager()->EstablishChannel(params); | 71 false /* allow_view_command_buffers */, |
| 72 false /* allow_real_time_streams */); |
| 80 GpuChannel* channel2 = channel_manager()->LookupChannel(kClientId2); | 73 GpuChannel* channel2 = channel_manager()->LookupChannel(kClientId2); |
| 81 ASSERT_TRUE(channel2); | 74 ASSERT_TRUE(channel2); |
| 82 | 75 |
| 83 EXPECT_NE(channel1, channel2); | 76 EXPECT_NE(channel1, channel2); |
| 84 | 77 |
| 85 // Make sure value states are only accessible by proper channels | 78 // Make sure value states are only accessible by proper channels |
| 86 channel_manager()->UpdateValueState(kClientId1, GL_MOUSE_POSITION_CHROMIUM, | 79 channel_manager()->UpdateValueState(kClientId1, GL_MOUSE_POSITION_CHROMIUM, |
| 87 value_state1); | 80 value_state1); |
| 88 channel_manager()->UpdateValueState(kClientId2, GL_MOUSE_POSITION_CHROMIUM, | 81 channel_manager()->UpdateValueState(kClientId2, GL_MOUSE_POSITION_CHROMIUM, |
| 89 value_state2); | 82 value_state2); |
| 90 | 83 |
| 91 const gpu::ValueStateMap* pending_value_buffer_state1 = | 84 const gpu::ValueStateMap* pending_value_buffer_state1 = |
| 92 channel1->pending_valuebuffer_state(); | 85 channel1->pending_valuebuffer_state(); |
| 93 const gpu::ValueStateMap* pending_value_buffer_state2 = | 86 const gpu::ValueStateMap* pending_value_buffer_state2 = |
| 94 channel2->pending_valuebuffer_state(); | 87 channel2->pending_valuebuffer_state(); |
| 95 EXPECT_NE(pending_value_buffer_state1, pending_value_buffer_state2); | 88 EXPECT_NE(pending_value_buffer_state1, pending_value_buffer_state2); |
| 96 | 89 |
| 97 const ValueState* state1 = | 90 const ValueState* state1 = |
| 98 pending_value_buffer_state1->GetState(GL_MOUSE_POSITION_CHROMIUM); | 91 pending_value_buffer_state1->GetState(GL_MOUSE_POSITION_CHROMIUM); |
| 99 const ValueState* state2 = | 92 const ValueState* state2 = |
| 100 pending_value_buffer_state2->GetState(GL_MOUSE_POSITION_CHROMIUM); | 93 pending_value_buffer_state2->GetState(GL_MOUSE_POSITION_CHROMIUM); |
| 101 EXPECT_NE(state1, state2); | 94 EXPECT_NE(state1, state2); |
| 102 | 95 |
| 103 EXPECT_EQ(state1->int_value[0], value_state1.int_value[0]); | 96 EXPECT_EQ(state1->int_value[0], value_state1.int_value[0]); |
| 104 EXPECT_EQ(state2->int_value[0], value_state2.int_value[0]); | 97 EXPECT_EQ(state2->int_value[0], value_state2.int_value[0]); |
| 105 EXPECT_NE(state1->int_value[0], state2->int_value[0]); | 98 EXPECT_NE(state1->int_value[0], state2->int_value[0]); |
| 106 } | 99 } |
| 107 | 100 |
| 108 } // namespace content | 101 } // namespace content |
| OLD | NEW |