blob: 0b4164f33037bf7b3f89527899754259d1a11769 [file] [log] [blame]
dmurph@chromium.org65dfc602012-07-23 20:39:391// Copyright (c) 2012 The Chromium Authors. All rights reserved.
apatrick@google.com1bee3982009-12-17 23:15:282// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
apatrick@google.com96449d2c2009-11-25 00:01:324
5// This file contains definitions for mock objects, used for testing.
6
gman@chromium.orgf57bb282010-11-12 00:51:347// TODO(apatrick): This file "manually" defines some mock objects. Using gMock
8// would be definitely preferable, unfortunately it doesn't work on Windows yet.
apatrick@google.com96449d2c2009-11-25 00:01:329
apatrick@google.coma7a27ace2009-12-12 00:11:2510#ifndef GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_
11#define GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_
apatrick@google.com96449d2c2009-11-25 00:01:3212
dsinclair@chromium.orge3932abb2013-03-13 00:01:3713#include <string>
apatrick@google.com96449d2c2009-11-25 00:01:3214#include <vector>
apatrick@chromium.org20407e92010-09-08 18:31:0815
16#include "base/logging.h"
apatrick@google.com96449d2c2009-11-25 00:01:3217#include "gpu/command_buffer/service/cmd_parser.h"
18#include "gpu/command_buffer/service/cmd_buffer_engine.h"
gman@chromium.org739a06e2013-01-15 23:25:1119#include "gpu/command_buffer/service/memory_tracking.h"
dmurph@chromium.org65dfc602012-07-23 20:39:3920#include "gpu/command_buffer/service/program_cache.h"
gman@chromium.orgf57bb282010-11-12 00:51:3421#include "gpu/command_buffer/service/shader_translator.h"
apatrick@chromium.org20407e92010-09-08 18:31:0822#include "testing/gmock/include/gmock/gmock.h"
apatrick@google.com96449d2c2009-11-25 00:01:3223
apatrick@google.coma7a27ace2009-12-12 00:11:2524namespace gpu {
apatrick@google.com96449d2c2009-11-25 00:01:3225
26// Mocks an AsyncAPIInterface, using GMock.
27class AsyncAPIMock : public AsyncAPIInterface {
28 public:
vmiura8266ca72014-09-09 21:37:0029 explicit AsyncAPIMock(bool default_do_commands);
erg@google.com33392292011-01-05 17:56:3930 virtual ~AsyncAPIMock();
apatrick@google.com96449d2c2009-11-25 00:01:3231
vmiura8266ca72014-09-09 21:37:0032 error::Error FakeDoCommands(unsigned int num_commands,
33 const void* buffer,
34 int num_entries,
35 int* entries_processed);
36
apatrick@google.com96449d2c2009-11-25 00:01:3237 // Predicate that matches args passed to DoCommand, by looking at the values.
38 class IsArgs {
39 public:
40 IsArgs(unsigned int arg_count, const void* args)
41 : arg_count_(arg_count),
42 args_(static_cast<CommandBufferEntry*>(const_cast<void*>(args))) {
43 }
44
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;
50 }
51 return true;
52 }
53
54 private:
55 unsigned int arg_count_;
56 CommandBufferEntry *args_;
57 };
58
apatrick@chromium.orgf7a64ee2010-02-01 22:24:1459 MOCK_METHOD3(DoCommand, error::Error(
apatrick@google.com96449d2c2009-11-25 00:01:3260 unsigned int command,
61 unsigned int arg_count,
62 const void* cmd_data));
63
vmiura8266ca72014-09-09 21:37:0064 MOCK_METHOD4(DoCommands,
65 error::Error(unsigned int num_commands,
66 const void* buffer,
67 int num_entries,
68 int* entries_processed));
69
apatrick@google.com96449d2c2009-11-25 00:01:3270 const char* GetCommandName(unsigned int command_id) const {
71 return "";
72 };
73
74 // Sets the engine, to forward SetToken commands to it.
75 void set_engine(CommandBufferEngine *engine) { engine_ = engine; }
76
77 // Forwards the SetToken commands to the engine.
78 void SetToken(unsigned int command,
79 unsigned int arg_count,
erg@google.com33392292011-01-05 17:56:3980 const void* _args);
81
apatrick@google.com96449d2c2009-11-25 00:01:3282 private:
83 CommandBufferEngine *engine_;
84};
85
gman@chromium.orgf57bb282010-11-12 00:51:3486namespace gles2 {
87
88class MockShaderTranslator : public ShaderTranslatorInterface {
89 public:
erg@google.com33392292011-01-05 17:56:3990 MockShaderTranslator();
gman@chromium.orgf57bb282010-11-12 00:51:3491
jmadill@chromium.org44c8cc8b2014-07-08 14:05:1792 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));
oetuahoe6bdcf32015-05-07 16:45:2598 MOCK_CONST_METHOD8(Translate, bool(
zmo576a0492014-09-13 01:12:3299 const std::string& shader_source,
100 std::string* info_log,
101 std::string* translated_source,
oetuahoe6bdcf32015-05-07 16:45:25102 int* shader_version,
zmo88043c082014-10-09 20:38:55103 AttributeMap* attrib_map,
104 UniformMap* uniform_map,
105 VaryingMap* varying_map,
zmo576a0492014-09-13 01:12:32106 NameMap* name_map));
gman@chromium.orgef2e2ab2013-05-17 19:51:09107 MOCK_CONST_METHOD0(
shannonwoods@chromium.org0f4dffbf2014-05-21 20:05:40108 GetStringForOptionsThatWouldAffectCompilation, std::string());
dyen0ff9e4402015-02-12 22:27:43109 private:
110 ~MockShaderTranslator() override;
gman@chromium.orgf57bb282010-11-12 00:51:34111};
112
dmurph@chromium.org65dfc602012-07-23 20:39:39113class MockProgramCache : public ProgramCache {
114 public:
115 MockProgramCache();
116 virtual ~MockProgramCache();
117
bajones63ead732015-03-14 00:12:46118 MOCK_METHOD7(LoadLinkedProgram, ProgramLoadResult(
dmurph@chromium.org65dfc602012-07-23 20:39:39119 GLuint program,
gman@chromium.orged9f9cd2013-02-27 21:12:35120 Shader* shader_a,
gman@chromium.orged9f9cd2013-02-27 21:12:35121 Shader* shader_b,
dsinclair@chromium.orgf1f4dd5f2013-04-11 01:58:44122 const LocationMap* bind_attrib_location_map,
bajones63ead732015-03-14 00:12:46123 const std::vector<std::string>& transform_feedback_varyings,
124 GLenum transform_feedback_buffer_mode,
dsinclair@chromium.orgf1f4dd5f2013-04-11 01:58:44125 const ShaderCacheCallback& callback));
dmurph@chromium.org65dfc602012-07-23 20:39:39126
bajones63ead732015-03-14 00:12:46127 MOCK_METHOD7(SaveLinkedProgram, void(
dmurph@chromium.org65dfc602012-07-23 20:39:39128 GLuint program,
gman@chromium.orged9f9cd2013-02-27 21:12:35129 const Shader* shader_a,
gman@chromium.orged9f9cd2013-02-27 21:12:35130 const Shader* shader_b,
dsinclair@chromium.orge3932abb2013-03-13 00:01:37131 const LocationMap* bind_attrib_location_map,
bajones63ead732015-03-14 00:12:46132 const std::vector<std::string>& transform_feedback_varyings,
133 GLenum transform_feedback_buffer_mode,
dsinclair@chromium.orge3932abb2013-03-13 00:01:37134 const ShaderCacheCallback& callback));
135 MOCK_METHOD1(LoadProgram, void(const std::string&));
136
dmurph@chromium.org65dfc602012-07-23 20:39:39137 private:
138 MOCK_METHOD0(ClearBackend, void());
139};
140
gman@chromium.org739a06e2013-01-15 23:25:11141class MockMemoryTracker : public MemoryTracker {
142 public:
143 MockMemoryTracker();
144
145 MOCK_METHOD3(TrackMemoryAllocatedChange, void(
146 size_t old_size, size_t new_size, Pool pool));
gman@chromium.org7989c9e2013-01-23 06:39:26147 MOCK_METHOD1(EnsureGPUMemoryAvailable, bool(size_t size_needed));
ericrkf08855b42015-08-06 00:20:22148 MOCK_CONST_METHOD0(ClientTracingId, uint64_t());
149 MOCK_CONST_METHOD0(ClientId, int());
gman@chromium.org739a06e2013-01-15 23:25:11150
151 private:
152 friend class ::testing::StrictMock<MockMemoryTracker>;
153 friend class base::RefCounted< ::testing::StrictMock<MockMemoryTracker> >;
154 virtual ~MockMemoryTracker();
155};
156
gman@chromium.orgf57bb282010-11-12 00:51:34157} // namespace gles2
apatrick@google.coma7a27ace2009-12-12 00:11:25158} // namespace gpu
apatrick@google.com96449d2c2009-11-25 00:01:32159
apatrick@google.coma7a27ace2009-12-12 00:11:25160#endif // GPU_COMMAND_BUFFER_SERVICE_MOCKS_H_