Avi Drissman | 05dfbc82 | 2022-09-13 21:25:34 | [diff] [blame] | 1 | // Copyright 2012 The Chromium Authors |
apatrick@google.com | 1bee398 | 2009-12-17 23:15:28 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 4 | |
Arthur Sonzogni | 720f1c95 | 2024-07-25 16:17:51 | [diff] [blame] | 5 | #ifdef UNSAFE_BUFFERS_BUILD |
| 6 | // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. |
| 7 | #pragma allow_unsafe_buffers |
| 8 | #endif |
| 9 | |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 10 | // This file contains definitions for mock objects, used for testing. |
| 11 | |
gman@chromium.org | f57bb28 | 2010-11-12 00:51:34 | [diff] [blame] | 12 | // TODO(apatrick): This file "manually" defines some mock objects. Using gMock |
| 13 | // would be definitely preferable, unfortunately it doesn't work on Windows yet. |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 14 | |
apatrick@google.com | a7a27ace | 2009-12-12 00:11:25 | [diff] [blame] | 15 | #ifndef GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_ |
| 16 | #define GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_ |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 17 | |
avi | f15d60a | 2015-12-21 17:06:33 | [diff] [blame] | 18 | #include <stddef.h> |
| 19 | #include <stdint.h> |
| 20 | |
dsinclair@chromium.org | e3932abb | 2013-03-13 00:01:37 | [diff] [blame] | 21 | #include <string> |
Helmut Januschka | b81e97dc | 2024-04-17 14:57:05 | [diff] [blame] | 22 | #include <string_view> |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 23 | #include <vector> |
apatrick@chromium.org | 20407e9 | 2010-09-08 18:31:08 | [diff] [blame] | 24 | |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 25 | #include "base/memory/raw_ptr.h" |
Jonathan Backer | eaf6bd6 | 2019-01-10 22:09:19 | [diff] [blame] | 26 | #include "gpu/command_buffer/common/cmd_buffer_common.h" |
Antoine Labour | e0990c1c | 2017-05-17 21:05:56 | [diff] [blame] | 27 | #include "gpu/command_buffer/service/async_api_interface.h" |
Loko Kung | 6fb05ef | 2022-08-20 00:33:50 | [diff] [blame] | 28 | #include "gpu/command_buffer/service/decoder_client.h" |
Loko Kung | 76d0dab | 2022-10-08 01:58:50 | [diff] [blame] | 29 | #include "gpu/command_buffer/service/isolation_key_provider.h" |
gman@chromium.org | 739a06e | 2013-01-15 23:25:11 | [diff] [blame] | 30 | #include "gpu/command_buffer/service/memory_tracking.h" |
dmurph@chromium.org | 65dfc60 | 2012-07-23 20:39:39 | [diff] [blame] | 31 | #include "gpu/command_buffer/service/program_cache.h" |
gman@chromium.org | f57bb28 | 2010-11-12 00:51:34 | [diff] [blame] | 32 | #include "gpu/command_buffer/service/shader_translator.h" |
apatrick@chromium.org | 20407e9 | 2010-09-08 18:31:08 | [diff] [blame] | 33 | #include "testing/gmock/include/gmock/gmock.h" |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 34 | |
apatrick@google.com | a7a27ace | 2009-12-12 00:11:25 | [diff] [blame] | 35 | namespace gpu { |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 36 | |
Tom Sepez | 8bc9aae | 2023-04-21 22:51:37 | [diff] [blame] | 37 | class CommandBufferDirect; |
Antoine Labour | 33555ec | 2017-05-23 18:16:39 | [diff] [blame] | 38 | class CommandBufferServiceBase; |
| 39 | |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 40 | // Mocks an AsyncAPIInterface, using GMock. |
| 41 | class AsyncAPIMock : public AsyncAPIInterface { |
| 42 | public: |
Antoine Labour | 1bec107 | 2017-06-06 19:37:03 | [diff] [blame] | 43 | explicit AsyncAPIMock(bool default_do_commands, |
Tom Sepez | 8bc9aae | 2023-04-21 22:51:37 | [diff] [blame] | 44 | CommandBufferDirect* command_buffer, |
Antoine Labour | 1bec107 | 2017-06-06 19:37:03 | [diff] [blame] | 45 | CommandBufferServiceBase* command_buffer_service); |
Daniel Cheng | c50b3f0 | 2018-04-27 03:01:55 | [diff] [blame] | 46 | ~AsyncAPIMock() override; |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 47 | |
vmiura | 8266ca7 | 2014-09-09 21:37:00 | [diff] [blame] | 48 | error::Error FakeDoCommands(unsigned int num_commands, |
piman | a728ad1 | 2016-09-06 16:48:08 | [diff] [blame] | 49 | const volatile void* buffer, |
vmiura | 8266ca7 | 2014-09-09 21:37:00 | [diff] [blame] | 50 | int num_entries, |
| 51 | int* entries_processed); |
| 52 | |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 53 | // Predicate that matches args passed to DoCommand, by looking at the values. |
| 54 | class IsArgs { |
| 55 | public: |
piman | a728ad1 | 2016-09-06 16:48:08 | [diff] [blame] | 56 | IsArgs(unsigned int arg_count, const volatile void* args) |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 57 | : arg_count_(arg_count), |
piman | a728ad1 | 2016-09-06 16:48:08 | [diff] [blame] | 58 | args_(static_cast<volatile CommandBufferEntry*>( |
| 59 | const_cast<volatile void*>(args))) {} |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 60 | |
piman | a728ad1 | 2016-09-06 16:48:08 | [diff] [blame] | 61 | bool operator()(const volatile void* _args) const { |
| 62 | const volatile CommandBufferEntry* args = |
| 63 | static_cast<const volatile CommandBufferEntry*>(_args) + 1; |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 64 | for (unsigned int i = 0; i < arg_count_; ++i) { |
| 65 | if (args[i].value_uint32 != args_[i].value_uint32) return false; |
| 66 | } |
| 67 | return true; |
| 68 | } |
| 69 | |
| 70 | private: |
| 71 | unsigned int arg_count_; |
Tom Sepez | d83ed1b | 2023-09-19 00:10:00 | [diff] [blame] | 72 | raw_ptr<volatile CommandBufferEntry, DanglingUntriaged | AllowPtrArithmetic> |
| 73 | args_; |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 74 | }; |
| 75 | |
Antoine Labour | 3aaa590f | 2017-05-24 00:34:34 | [diff] [blame] | 76 | void BeginDecoding() override {} |
| 77 | void EndDecoding() override {} |
| 78 | |
piman | a728ad1 | 2016-09-06 16:48:08 | [diff] [blame] | 79 | MOCK_METHOD3(DoCommand, |
| 80 | error::Error(unsigned int command, |
| 81 | unsigned int arg_count, |
| 82 | const volatile void* cmd_data)); |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 83 | |
vmiura | 8266ca7 | 2014-09-09 21:37:00 | [diff] [blame] | 84 | MOCK_METHOD4(DoCommands, |
| 85 | error::Error(unsigned int num_commands, |
piman | a728ad1 | 2016-09-06 16:48:08 | [diff] [blame] | 86 | const volatile void* buffer, |
vmiura | 8266ca7 | 2014-09-09 21:37:00 | [diff] [blame] | 87 | int num_entries, |
| 88 | int* entries_processed)); |
| 89 | |
Helmut Januschka | b81e97dc | 2024-04-17 14:57:05 | [diff] [blame] | 90 | std::string_view GetLogPrefix() override { return "None"; } |
Antoine Labour | 3aaa590f | 2017-05-24 00:34:34 | [diff] [blame] | 91 | |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 92 | // Forwards the SetToken commands to the engine. |
| 93 | void SetToken(unsigned int command, |
| 94 | unsigned int arg_count, |
piman | a728ad1 | 2016-09-06 16:48:08 | [diff] [blame] | 95 | const volatile void* _args); |
erg@google.com | 3339229 | 2011-01-05 17:56:39 | [diff] [blame] | 96 | |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 97 | private: |
Tom Sepez | 8bc9aae | 2023-04-21 22:51:37 | [diff] [blame] | 98 | raw_ptr<CommandBufferDirect> command_buffer_; |
Arthur Sonzogni | e98d214 | 2023-06-01 15:02:25 | [diff] [blame] | 99 | raw_ptr<CommandBufferServiceBase, DanglingUntriaged> command_buffer_service_; |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 100 | }; |
| 101 | |
Loko Kung | 6fb05ef | 2022-08-20 00:33:50 | [diff] [blame] | 102 | class MockDecoderClient : public DecoderClient { |
| 103 | public: |
| 104 | MockDecoderClient(); |
| 105 | ~MockDecoderClient() override; |
| 106 | |
| 107 | MOCK_METHOD(void, OnConsoleMessage, (int32_t id, const std::string& message)); |
Vasiliy Telezhnikov | d503cba | 2025-09-03 15:26:48 | [diff] [blame] | 108 | MOCK_METHOD(void, OnGpuSwitched, ()); |
Loko Kung | 6fb05ef | 2022-08-20 00:33:50 | [diff] [blame] | 109 | MOCK_METHOD(void, |
| 110 | CacheBlob, |
| 111 | (gpu::GpuDiskCacheType type, |
| 112 | const std::string& key, |
| 113 | const std::string& shader)); |
| 114 | MOCK_METHOD(void, OnFenceSyncRelease, (uint64_t release)); |
| 115 | MOCK_METHOD(void, OnDescheduleUntilFinished, ()); |
| 116 | MOCK_METHOD(void, OnRescheduleAfterFinished, ()); |
Loko Kung | 6fb05ef | 2022-08-20 00:33:50 | [diff] [blame] | 117 | MOCK_METHOD(void, ScheduleGrContextCleanup, ()); |
| 118 | MOCK_METHOD(void, SetActiveURL, (GURL url)); |
| 119 | MOCK_METHOD(void, HandleReturnData, (base::span<const uint8_t> data)); |
Scott Violet | 39a6a82 | 2024-08-09 23:44:00 | [diff] [blame] | 120 | MOCK_METHOD(bool, ShouldYield, ()); |
Loko Kung | 6fb05ef | 2022-08-20 00:33:50 | [diff] [blame] | 121 | }; |
| 122 | |
Loko Kung | 76d0dab | 2022-10-08 01:58:50 | [diff] [blame] | 123 | class MockIsolationKeyProvider : public IsolationKeyProvider { |
| 124 | public: |
| 125 | MockIsolationKeyProvider(); |
| 126 | ~MockIsolationKeyProvider() override; |
| 127 | |
| 128 | MOCK_METHOD(void, |
| 129 | GetIsolationKey, |
| 130 | (const blink::WebGPUExecutionContextToken& token, |
| 131 | GetIsolationKeyCallback cb), |
| 132 | (override)); |
| 133 | }; |
| 134 | |
gman@chromium.org | f57bb28 | 2010-11-12 00:51:34 | [diff] [blame] | 135 | namespace gles2 { |
| 136 | |
| 137 | class MockShaderTranslator : public ShaderTranslatorInterface { |
| 138 | public: |
erg@google.com | 3339229 | 2011-01-05 17:56:39 | [diff] [blame] | 139 | MockShaderTranslator(); |
gman@chromium.org | f57bb28 | 2010-11-12 00:51:34 | [diff] [blame] | 140 | |
penghuang | 7404df988 | 2016-02-29 23:07:29 | [diff] [blame] | 141 | MOCK_METHOD6(Init, |
kkinnunen | 4885420 | 2015-08-13 09:41:35 | [diff] [blame] | 142 | bool(sh::GLenum shader_type, |
| 143 | ShShaderSpec shader_spec, |
| 144 | const ShBuiltInResources* resources, |
| 145 | ShShaderOutput shader_output_language, |
Shahbaz Youssefi | b2c86557 | 2022-08-08 02:33:27 | [diff] [blame] | 146 | const ShCompileOptions& driver_bug_workarounds, |
penghuang | 7404df988 | 2016-02-29 23:07:29 | [diff] [blame] | 147 | bool gl_shader_interm_output)); |
kainino | 78c79d2 | 2017-05-04 18:45:30 | [diff] [blame] | 148 | MOCK_CONST_METHOD9(Translate, |
| 149 | bool(const std::string& shader_source, |
| 150 | std::string* info_log, |
| 151 | std::string* translated_source, |
| 152 | int* shader_version, |
| 153 | AttributeMap* attrib_map, |
| 154 | UniformMap* uniform_map, |
| 155 | VaryingMap* varying_map, |
| 156 | InterfaceBlockMap* interface_block_map, |
| 157 | OutputVariableList* output_variable_list)); |
Geoff Lang | 30efb7b | 2017-08-09 14:59:23 | [diff] [blame] | 158 | MOCK_CONST_METHOD0(GetStringForOptionsThatWouldAffectCompilation, |
| 159 | OptionsAffectingCompilationString*()); |
| 160 | |
dyen | 0ff9e440 | 2015-02-12 22:27:43 | [diff] [blame] | 161 | private: |
| 162 | ~MockShaderTranslator() override; |
gman@chromium.org | f57bb28 | 2010-11-12 00:51:34 | [diff] [blame] | 163 | }; |
| 164 | |
dmurph@chromium.org | 65dfc60 | 2012-07-23 20:39:39 | [diff] [blame] | 165 | class MockProgramCache : public ProgramCache { |
| 166 | public: |
| 167 | MockProgramCache(); |
Daniel Cheng | c50b3f0 | 2018-04-27 03:01:55 | [diff] [blame] | 168 | ~MockProgramCache() override; |
dmurph@chromium.org | 65dfc60 | 2012-07-23 20:39:39 | [diff] [blame] | 169 | |
Antoine Labour | f679fa4 | 2017-06-07 00:32:43 | [diff] [blame] | 170 | MOCK_METHOD7(LoadLinkedProgram, |
| 171 | ProgramLoadResult( |
| 172 | GLuint program, |
| 173 | Shader* shader_a, |
| 174 | Shader* shader_b, |
| 175 | const LocationMap* bind_attrib_location_map, |
| 176 | const std::vector<std::string>& transform_feedback_varyings, |
| 177 | GLenum transform_feedback_buffer_mode, |
Jonathan Backer | 1d807a4 | 2018-01-08 20:45:54 | [diff] [blame] | 178 | DecoderClient* client)); |
dmurph@chromium.org | 65dfc60 | 2012-07-23 20:39:39 | [diff] [blame] | 179 | |
Antoine Labour | f679fa4 | 2017-06-07 00:32:43 | [diff] [blame] | 180 | MOCK_METHOD7(SaveLinkedProgram, |
| 181 | void(GLuint program, |
| 182 | const Shader* shader_a, |
| 183 | const Shader* shader_b, |
| 184 | const LocationMap* bind_attrib_location_map, |
| 185 | const std::vector<std::string>& transform_feedback_varyings, |
| 186 | GLenum transform_feedback_buffer_mode, |
Jonathan Backer | 1d807a4 | 2018-01-08 20:45:54 | [diff] [blame] | 187 | DecoderClient* client)); |
Jamie Madill | 4b5b28f | 2017-07-12 18:19:04 | [diff] [blame] | 188 | MOCK_METHOD2(LoadProgram, void(const std::string&, const std::string&)); |
Jamie Madill | 1dbe2a1 | 2017-07-05 17:49:36 | [diff] [blame] | 189 | MOCK_METHOD1(Trim, size_t(size_t)); |
dsinclair@chromium.org | e3932abb | 2013-03-13 00:01:37 | [diff] [blame] | 190 | |
dmurph@chromium.org | 65dfc60 | 2012-07-23 20:39:39 | [diff] [blame] | 191 | private: |
| 192 | MOCK_METHOD0(ClearBackend, void()); |
| 193 | }; |
| 194 | |
gman@chromium.org | 739a06e | 2013-01-15 23:25:11 | [diff] [blame] | 195 | class MockMemoryTracker : public MemoryTracker { |
| 196 | public: |
| 197 | MockMemoryTracker(); |
gman@chromium.org | 739a06e | 2013-01-15 23:25:11 | [diff] [blame] | 198 | |
Kramer Ge | 4cb61ef | 2019-12-06 17:41:29 | [diff] [blame] | 199 | MOCK_METHOD1(TrackMemoryAllocatedChange, void(int64_t delta)); |
Antoine Labour | 3b79a44 | 2018-07-06 20:19:34 | [diff] [blame] | 200 | uint64_t GetSize() const override { return 0; } |
ericrk | f08855b4 | 2015-08-06 00:20:22 | [diff] [blame] | 201 | MOCK_CONST_METHOD0(ClientTracingId, uint64_t()); |
| 202 | MOCK_CONST_METHOD0(ClientId, int()); |
kylechar | d167a866 | 2018-09-14 20:16:29 | [diff] [blame] | 203 | MOCK_CONST_METHOD0(ContextGroupTracingId, uint64_t()); |
Maggie Chen | 40af1efa | 2025-06-04 18:19:57 | [diff] [blame] | 204 | |
| 205 | protected: |
| 206 | ~MockMemoryTracker() override; |
gman@chromium.org | 739a06e | 2013-01-15 23:25:11 | [diff] [blame] | 207 | }; |
| 208 | |
gman@chromium.org | f57bb28 | 2010-11-12 00:51:34 | [diff] [blame] | 209 | } // namespace gles2 |
apatrick@google.com | a7a27ace | 2009-12-12 00:11:25 | [diff] [blame] | 210 | } // namespace gpu |
apatrick@google.com | 96449d2c | 2009-11-25 00:01:32 | [diff] [blame] | 211 | |
apatrick@google.com | a7a27ace | 2009-12-12 00:11:25 | [diff] [blame] | 212 | #endif // GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_ |