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.
5 // This file contains definitions for mock objects, used for testing.
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.
10 #ifndef GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_
11 #define GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_
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"
26 // Mocks an AsyncAPIInterface, using GMock.
27 class AsyncAPIMock
: public AsyncAPIInterface
{
29 explicit AsyncAPIMock(bool default_do_commands
);
30 virtual ~AsyncAPIMock();
32 error::Error
FakeDoCommands(unsigned int num_commands
,
35 int* entries_processed
);
37 // Predicate that matches args passed to DoCommand, by looking at the values.
40 IsArgs(unsigned int arg_count
, const void* args
)
41 : arg_count_(arg_count
),
42 args_(static_cast<CommandBufferEntry
*>(const_cast<void*>(args
))) {
45 bool operator() (const void* _args
) const {
46 const CommandBufferEntry
* args
=
47 static_cast<const CommandBufferEntry
*>(_args
) + 1;
48 for (unsigned int i
= 0; i
< arg_count_
; ++i
) {
49 if (args
[i
].value_uint32
!= args_
[i
].value_uint32
) return false;
55 unsigned int arg_count_
;
56 CommandBufferEntry
*args_
;
59 MOCK_METHOD3(DoCommand
, error::Error(
61 unsigned int arg_count
,
62 const void* cmd_data
));
64 MOCK_METHOD4(DoCommands
,
65 error::Error(unsigned int num_commands
,
68 int* entries_processed
));
70 const char* GetCommandName(unsigned int command_id
) const {
74 // Sets the engine, to forward SetToken commands to it.
75 void set_engine(CommandBufferEngine
*engine
) { engine_
= engine
; }
77 // Forwards the SetToken commands to the engine.
78 void SetToken(unsigned int command
,
79 unsigned int arg_count
,
83 CommandBufferEngine
*engine_
;
88 class MockShaderTranslator
: public ShaderTranslatorInterface
{
90 MockShaderTranslator();
92 MOCK_METHOD5(Init
, bool(
93 sh::GLenum shader_type
,
94 ShShaderSpec shader_spec
,
95 const ShBuiltInResources
* resources
,
96 GlslImplementationType glsl_implementation_type
,
97 ShCompileOptions driver_bug_workarounds
));
98 MOCK_CONST_METHOD7(Translate
, bool(
99 const std::string
& shader_source
,
100 std::string
* info_log
,
101 std::string
* translated_source
,
102 AttributeMap
* attrib_map
,
103 UniformMap
* uniform_map
,
104 VaryingMap
* varying_map
,
107 GetStringForOptionsThatWouldAffectCompilation
, std::string());
109 ~MockShaderTranslator() override
;
112 class MockProgramCache
: public ProgramCache
{
115 virtual ~MockProgramCache();
117 MOCK_METHOD7(LoadLinkedProgram
, ProgramLoadResult(
121 const LocationMap
* bind_attrib_location_map
,
122 const std::vector
<std::string
>& transform_feedback_varyings
,
123 GLenum transform_feedback_buffer_mode
,
124 const ShaderCacheCallback
& callback
));
126 MOCK_METHOD7(SaveLinkedProgram
, void(
128 const Shader
* shader_a
,
129 const Shader
* shader_b
,
130 const LocationMap
* bind_attrib_location_map
,
131 const std::vector
<std::string
>& transform_feedback_varyings
,
132 GLenum transform_feedback_buffer_mode
,
133 const ShaderCacheCallback
& callback
));
134 MOCK_METHOD1(LoadProgram
, void(const std::string
&));
137 MOCK_METHOD0(ClearBackend
, void());
140 class MockMemoryTracker
: public MemoryTracker
{
144 MOCK_METHOD3(TrackMemoryAllocatedChange
, void(
145 size_t old_size
, size_t new_size
, Pool pool
));
146 MOCK_METHOD1(EnsureGPUMemoryAvailable
, bool(size_t size_needed
));
149 friend class ::testing::StrictMock
<MockMemoryTracker
>;
150 friend class base::RefCounted
< ::testing::StrictMock
<MockMemoryTracker
> >;
151 virtual ~MockMemoryTracker();
157 #endif // GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_