15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper classes for implementing gpu client side unit tests. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_CLIENT_CLIENT_TEST_HELPER_H_ 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_CLIENT_CLIENT_TEST_HELPER_H_ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/compiler_specific.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/cmd_buffer_common.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/command_buffer.h" 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "gpu/command_buffer/common/gpu_control.h" 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "gpu/command_buffer/common/gpu_memory_allocation.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandBufferHelper; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockCommandBufferBase : public CommandBuffer { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int32 kTransferBufferBaseId = 0x123; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int32 kMaxTransferBuffers = 6; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockCommandBufferBase() { } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockCommandBufferBase(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Initialize() OVERRIDE; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual State GetState() OVERRIDE; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual State GetLastState() OVERRIDE; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int32 GetLastToken() OVERRIDE; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetGetBuffer(int transfer_buffer_id) OVERRIDE; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetGetOffset(int32 get_offset) OVERRIDE; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Buffer CreateTransferBuffer(size_t size, int32* id) OVERRIDE; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual Buffer GetTransferBuffer(int32 id) OVERRIDE; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetToken(int32 token) OVERRIDE; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetParseError(error::Error error) OVERRIDE; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetContextLostReason(error::ContextLostReason reason) OVERRIDE; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get's the Id of the next transfer buffer that will be returned 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by CreateTransferBuffer. This is useful for testing expected ids. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 GetNextFreeTransferBufferId(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FlushHelper(int32 put_offset); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DestroyTransferBufferHelper(int32 id); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnFlush() = 0; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<int8[]> transfer_buffers_[kMaxTransferBuffers]; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Buffer transfer_buffer_buffers_[kMaxTransferBuffers]; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandBufferEntry* ring_buffer_; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Buffer ring_buffer_buffer_; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) State state_; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockClientCommandBuffer : public MockCommandBufferBase { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClientCommandBuffer(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockClientCommandBuffer(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is so we can use all the gmock functions when Flush is called. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(OnFlush, void()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(DestroyTransferBuffer, void(int32 id)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Flush(int32 put_offset) OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DelegateToFake(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockClientCommandBufferMockFlush : public MockClientCommandBuffer { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockClientCommandBufferMockFlush(); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~MockClientCommandBufferMockFlush(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(Flush, void(int32 put_offset)); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DelegateToFake(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class MockClientGpuControl : public GpuControl { 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public: 873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) MockClientGpuControl(); 883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual ~MockClientGpuControl(); 893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MOCK_METHOD0(GetCapabilities, Capabilities()); 913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) MOCK_METHOD4(CreateGpuMemoryBuffer, 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::GpuMemoryBuffer*(size_t width, 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) size_t height, 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) unsigned internalformat, 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) int32* id)); 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) MOCK_METHOD1(DestroyGpuMemoryBuffer, void(int32 id)); 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MOCK_METHOD2(GenerateMailboxNames, bool(unsigned num, 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<gpu::Mailbox>* names)); 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MOCK_METHOD0(InsertSyncPoint, uint32()); 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MOCK_METHOD2(SignalSyncPoint, void(uint32 id, 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::Closure& callback)); 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MOCK_METHOD1(Echo, void(const base::Closure& callback)); 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MOCK_METHOD2(SignalQuery, void(uint32 query, const base::Closure& callback)); 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) MOCK_METHOD1(SetSurfaceVisible, void(bool visible)); 1061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) MOCK_METHOD1(SendManagedMemoryStats, 1071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void(const ManagedMemoryStats& stats)); 1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) private: 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockClientGpuControl); 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}; 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // GPU_COMMAND_BUFFER_CLIENT_CLIENT_TEST_HELPER_H_ 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 117