3
3
// found in the LICENSE file.
4
4
5
5
#include " impeller/renderer/backend/vulkan/test/mock_vulkan.h"
6
+ #include < vector>
7
+ #include " fml/macros.h"
8
+ #include " impeller/base/thread_safety.h"
6
9
7
10
namespace impeller {
8
11
namespace testing {
@@ -16,17 +19,37 @@ struct MockCommandBuffer {
16
19
std::shared_ptr<std::vector<std::string>> called_functions_;
17
20
};
18
21
19
- struct MockDevice {
20
- MockDevice () : called_functions_(new std::vector<std::string>()) {}
22
+ class MockDevice final {
23
+ public:
24
+ explicit MockDevice () : called_functions_(new std::vector<std::string>()) {}
25
+
21
26
MockCommandBuffer* NewCommandBuffer () {
22
- std::unique_ptr<MockCommandBuffer> buffer =
23
- std::make_unique<MockCommandBuffer>(called_functions_);
27
+ auto buffer = std::make_unique<MockCommandBuffer>(called_functions_);
24
28
MockCommandBuffer* result = buffer.get ();
29
+ Lock lock (command_buffers_mutex_);
25
30
command_buffers_.emplace_back (std::move (buffer));
26
31
return result;
27
32
}
28
- std::shared_ptr<std::vector<std::string>> called_functions_;
29
- std::vector<std::unique_ptr<MockCommandBuffer>> command_buffers_;
33
+
34
+ const std::shared_ptr<std::vector<std::string>>& GetCalledFunctions () {
35
+ return called_functions_;
36
+ }
37
+
38
+ void AddCalledFunction (const std::string& function) {
39
+ Lock lock (called_functions_mutex_);
40
+ called_functions_->push_back (function);
41
+ }
42
+
43
+ private:
44
+ FML_DISALLOW_COPY_AND_ASSIGN (MockDevice);
45
+
46
+ Mutex called_functions_mutex_;
47
+ std::shared_ptr<std::vector<std::string>> called_functions_
48
+ IPLR_GUARDED_BY (called_functions_mutex_);
49
+
50
+ Mutex command_buffers_mutex_;
51
+ std::vector<std::unique_ptr<MockCommandBuffer>> command_buffers_
52
+ IPLR_GUARDED_BY (command_buffers_mutex_);
30
53
};
31
54
32
55
void noop () {}
@@ -147,7 +170,7 @@ VkResult vkCreatePipelineCache(VkDevice device,
147
170
const VkAllocationCallbacks* pAllocator,
148
171
VkPipelineCache* pPipelineCache) {
149
172
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
150
- mock_device->called_functions_ -> push_back (" vkCreatePipelineCache" );
173
+ mock_device->AddCalledFunction (" vkCreatePipelineCache" );
151
174
*pPipelineCache = reinterpret_cast <VkPipelineCache>(0xb000dead );
152
175
return VK_SUCCESS;
153
176
}
@@ -270,30 +293,30 @@ VkResult vkCreateGraphicsPipelines(
270
293
const VkAllocationCallbacks* pAllocator,
271
294
VkPipeline* pPipelines) {
272
295
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
273
- mock_device->called_functions_ -> push_back (" vkCreateGraphicsPipelines" );
296
+ mock_device->AddCalledFunction (" vkCreateGraphicsPipelines" );
274
297
*pPipelines = reinterpret_cast <VkPipeline>(0x99999999 );
275
298
return VK_SUCCESS;
276
299
}
277
300
278
301
void vkDestroyDevice (VkDevice device, const VkAllocationCallbacks* pAllocator) {
279
302
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
280
- mock_device->called_functions_ -> push_back (" vkDestroyDevice" );
303
+ mock_device->AddCalledFunction (" vkDestroyDevice" );
281
304
delete reinterpret_cast <MockDevice*>(device);
282
305
}
283
306
284
307
void vkDestroyPipeline (VkDevice device,
285
308
VkPipeline pipeline,
286
309
const VkAllocationCallbacks* pAllocator) {
287
310
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
288
- mock_device->called_functions_ -> push_back (" vkDestroyPipeline" );
311
+ mock_device->AddCalledFunction (" vkDestroyPipeline" );
289
312
}
290
313
291
314
VkResult vkCreateShaderModule (VkDevice device,
292
315
const VkShaderModuleCreateInfo* pCreateInfo,
293
316
const VkAllocationCallbacks* pAllocator,
294
317
VkShaderModule* pShaderModule) {
295
318
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
296
- mock_device->called_functions_ -> push_back (" vkCreateShaderModule" );
319
+ mock_device->AddCalledFunction (" vkCreateShaderModule" );
297
320
*pShaderModule = reinterpret_cast <VkShaderModule>(0x11111111 );
298
321
return VK_SUCCESS;
299
322
}
@@ -302,14 +325,14 @@ void vkDestroyShaderModule(VkDevice device,
302
325
VkShaderModule shaderModule,
303
326
const VkAllocationCallbacks* pAllocator) {
304
327
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
305
- mock_device->called_functions_ -> push_back (" vkDestroyShaderModule" );
328
+ mock_device->AddCalledFunction (" vkDestroyShaderModule" );
306
329
}
307
330
308
331
void vkDestroyPipelineCache (VkDevice device,
309
332
VkPipelineCache pipelineCache,
310
333
const VkAllocationCallbacks* pAllocator) {
311
334
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
312
- mock_device->called_functions_ -> push_back (" vkDestroyPipelineCache" );
335
+ mock_device->AddCalledFunction (" vkDestroyPipelineCache" );
313
336
}
314
337
315
338
void vkCmdBindPipeline (VkCommandBuffer commandBuffer,
@@ -351,14 +374,14 @@ void vkFreeCommandBuffers(VkDevice device,
351
374
uint32_t commandBufferCount,
352
375
const VkCommandBuffer* pCommandBuffers) {
353
376
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
354
- mock_device->called_functions_ -> push_back (" vkFreeCommandBuffers" );
377
+ mock_device->AddCalledFunction (" vkFreeCommandBuffers" );
355
378
}
356
379
357
380
void vkDestroyCommandPool (VkDevice device,
358
381
VkCommandPool commandPool,
359
382
const VkAllocationCallbacks* pAllocator) {
360
383
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
361
- mock_device->called_functions_ -> push_back (" vkDestroyCommandPool" );
384
+ mock_device->AddCalledFunction (" vkDestroyCommandPool" );
362
385
}
363
386
364
387
VkResult vkEndCommandBuffer (VkCommandBuffer commandBuffer) {
@@ -500,7 +523,7 @@ std::shared_ptr<ContextVK> CreateMockVulkanContext(void) {
500
523
std::shared_ptr<std::vector<std::string>> GetMockVulkanFunctions (
501
524
VkDevice device) {
502
525
MockDevice* mock_device = reinterpret_cast <MockDevice*>(device);
503
- return mock_device->called_functions_ ;
526
+ return mock_device->GetCalledFunctions () ;
504
527
}
505
528
506
529
} // namespace testing
0 commit comments