1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This file contains definitions for mock objects, used for testing. 6 7 // TODO(apatrick): This file "manually" defines some mock objects. Using gMock 8 // would be definitely preferable, unfortunately it doesn't work on Windows yet. 9 10 #ifndef GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_ 11 #define GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_ 12 13 #include <string> 14 #include <vector> 15 16 #include "base/logging.h" 17 #include "gpu/command_buffer/service/cmd_parser.h" 18 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 19 #include "gpu/command_buffer/service/memory_tracking.h" 20 #include "gpu/command_buffer/service/program_cache.h" 21 #include "gpu/command_buffer/service/shader_translator.h" 22 #include "testing/gmock/include/gmock/gmock.h" 23 24 namespace gpu { 25 26 // Mocks an AsyncAPIInterface, using GMock. 27 class AsyncAPIMock : public AsyncAPIInterface { 28 public: 29 AsyncAPIMock(); 30 virtual ~AsyncAPIMock(); 31 32 // Predicate that matches args passed to DoCommand, by looking at the values. 33 class IsArgs { 34 public: 35 IsArgs(unsigned int arg_count, const void* args) 36 : arg_count_(arg_count), 37 args_(static_cast<CommandBufferEntry*>(const_cast<void*>(args))) { 38 } 39 40 bool operator() (const void* _args) const { 41 const CommandBufferEntry* args = 42 static_cast<const CommandBufferEntry*>(_args) + 1; 43 for (unsigned int i = 0; i < arg_count_; ++i) { 44 if (args[i].value_uint32 != args_[i].value_uint32) return false; 45 } 46 return true; 47 } 48 49 private: 50 unsigned int arg_count_; 51 CommandBufferEntry *args_; 52 }; 53 54 MOCK_METHOD3(DoCommand, error::Error( 55 unsigned int command, 56 unsigned int arg_count, 57 const void* cmd_data)); 58 59 const char* GetCommandName(unsigned int command_id) const { 60 return ""; 61 }; 62 63 // Sets the engine, to forward SetToken commands to it. 64 void set_engine(CommandBufferEngine *engine) { engine_ = engine; } 65 66 // Forwards the SetToken commands to the engine. 67 void SetToken(unsigned int command, 68 unsigned int arg_count, 69 const void* _args); 70 71 private: 72 CommandBufferEngine *engine_; 73 }; 74 75 namespace gles2 { 76 77 class MockShaderTranslator : public ShaderTranslatorInterface { 78 public: 79 MockShaderTranslator(); 80 virtual ~MockShaderTranslator(); 81 82 MOCK_METHOD5(Init, bool( 83 ShShaderType shader_type, 84 ShShaderSpec shader_spec, 85 const ShBuiltInResources* resources, 86 GlslImplementationType glsl_implementation_type, 87 GlslBuiltInFunctionBehavior glsl_built_in_function_behavior)); 88 MOCK_METHOD1(Translate, bool(const char* shader)); 89 MOCK_CONST_METHOD0(translated_shader, const char*()); 90 MOCK_CONST_METHOD0(info_log, const char*()); 91 MOCK_CONST_METHOD0(attrib_map, const VariableMap&()); 92 MOCK_CONST_METHOD0(uniform_map, const VariableMap&()); 93 MOCK_CONST_METHOD0(name_map, const NameMap&()); 94 MOCK_CONST_METHOD0( 95 GetStringForOptionsThatWouldEffectCompilation, std::string()); 96 }; 97 98 class MockProgramCache : public ProgramCache { 99 public: 100 MockProgramCache(); 101 virtual ~MockProgramCache(); 102 103 MOCK_METHOD7(LoadLinkedProgram, ProgramLoadResult( 104 GLuint program, 105 Shader* shader_a, 106 const ShaderTranslatorInterface* translator_a, 107 Shader* shader_b, 108 const ShaderTranslatorInterface* translator_b, 109 const LocationMap* bind_attrib_location_map, 110 const ShaderCacheCallback& callback)); 111 112 MOCK_METHOD7(SaveLinkedProgram, void( 113 GLuint program, 114 const Shader* shader_a, 115 const ShaderTranslatorInterface* translator_a, 116 const Shader* shader_b, 117 const ShaderTranslatorInterface* translator_b, 118 const LocationMap* bind_attrib_location_map, 119 const ShaderCacheCallback& callback)); 120 MOCK_METHOD1(LoadProgram, void(const std::string&)); 121 122 private: 123 MOCK_METHOD0(ClearBackend, void()); 124 }; 125 126 class MockMemoryTracker : public MemoryTracker { 127 public: 128 MockMemoryTracker(); 129 130 MOCK_METHOD3(TrackMemoryAllocatedChange, void( 131 size_t old_size, size_t new_size, Pool pool)); 132 MOCK_METHOD1(EnsureGPUMemoryAvailable, bool(size_t size_needed)); 133 134 private: 135 friend class ::testing::StrictMock<MockMemoryTracker>; 136 friend class base::RefCounted< ::testing::StrictMock<MockMemoryTracker> >; 137 virtual ~MockMemoryTracker(); 138 }; 139 140 } // namespace gles2 141 } // namespace gpu 142 143 #endif // GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_ 144