15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/command_buffer_mock.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "gpu/command_buffer/service/gpu_scheduler.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/mocks.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_nsautorelease_pool.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::DoAll; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Invoke; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::NiceMock; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Return; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::SetArgumentPointee; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::StrictMock; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kRingBufferSize = 1024; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kRingBufferEntries = kRingBufferSize / sizeof(CommandBufferEntry); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuSchedulerTest : public testing::Test { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int32 kTransferBufferId = 123; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<base::SharedMemory> shared_memory(new ::base::SharedMemory); 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shared_memory->CreateAndMapAnonymous(kRingBufferSize); 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch buffer_ = static_cast<int32*>(shared_memory->memory()); 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch shared_memory_buffer_ = 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch MakeBufferFromSharedMemory(shared_memory.Pass(), kRingBufferSize); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(buffer_, 0, kRingBufferSize); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_buffer_.reset(new MockCommandBuffer); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBuffer::State default_state; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_state.num_entries = kRingBufferEntries; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ON_CALL(*command_buffer_.get(), GetLastState()) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillByDefault(Return(default_state)); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_.reset(new gles2::MockGLES2Decoder()); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Install FakeDoCommands handler so we can use individual DoCommand() 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // expectations. 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_CALL(*decoder_, DoCommands(_, _, _, _)).WillRepeatedly( 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Invoke(decoder_.get(), &gles2::MockGLES2Decoder::FakeDoCommands)); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_.get(), 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decoder_.get())); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, GetTransferBuffer(kTransferBufferId)) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(shared_memory_buffer_)); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetGetOffset(0)); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(scheduler_->SetGetBuffer(kTransferBufferId)); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that any unexpected tasks posted by the GPU scheduler are executed 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in order to fail the test. 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error::Error GetError() { 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return command_buffer_->GetLastState().error; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool autorelease_pool_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop message_loop; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<MockCommandBuffer> command_buffer_; 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_refptr<Buffer> shared_memory_buffer_; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32* buffer_; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gles2::MockGLES2Decoder> decoder_; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<GpuScheduler> scheduler_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBuffer::State state; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state.put_offset = 0; 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*command_buffer_, GetLastState()) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(state)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetParseError(_)) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(0); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_->PutChanged(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, GetSetBuffer) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBuffer::State state; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the get offset to something not 0. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_->SetGetOffset(2); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, scheduler_->GetGetOffset()); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the buffer. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, GetTransferBuffer(kTransferBufferId)) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(shared_memory_buffer_)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetGetOffset(0)); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(scheduler_->SetGetBuffer(kTransferBufferId)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the get offset was reset. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, scheduler_->GetGetOffset()); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, ProcessesOneCommand) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[0].command = 7; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[0].size = 2; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer_[1] = 123; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBuffer::State state; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state.put_offset = 2; 1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*command_buffer_, GetLastState()) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(state)); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0])) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error::kNoError)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetParseError(_)) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(0); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_->PutChanged(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, ProcessesTwoCommands) { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[0].command = 7; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[0].size = 2; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer_[1] = 123; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[2].command = 8; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[2].size = 1; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBuffer::State state; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state.put_offset = 3; 1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*command_buffer_, GetLastState()) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(state)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0])) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error::kNoError)); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*decoder_, DoCommand(8, 0, &buffer_[2])) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error::kNoError)); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetGetOffset(3)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_->PutChanged(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[0].command = 7; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) header[0].size = 1; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBuffer::State state; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state.put_offset = 1; 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*command_buffer_, GetLastState()) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(state)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*decoder_, DoCommand(7, 0, &buffer_[0])) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return( 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error::kUnknownCommand)); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetGetOffset(1)); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetContextLostReason(_)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*decoder_, GetContextLostReason()) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(error::kUnknown)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetParseError(error::kUnknownCommand)); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_->PutChanged(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) { 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBuffer::State state; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state.error = error::kGenericError; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_CALL(*command_buffer_, GetLastState()) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(state)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_->PutChanged(); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, CanGetAddressOfSharedMemory) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7)) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(shared_memory_buffer_)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(&buffer_[0], scheduler_->GetSharedMemoryBuffer(7)->memory()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ACTION_P2(SetPointee, address, value) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *address = value; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, CanGetSizeOfSharedMemory) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7)) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Return(shared_memory_buffer_)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7)->size()); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*command_buffer_, SetToken(7)); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scheduler_->set_token(7); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 222