Implement buffered disk_mock_t mode, extract ringloop_mock.cpp
This commit is contained in:
+1
-48
@@ -14,6 +14,7 @@
|
||||
#include <string>
|
||||
#include <functional>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <mutex>
|
||||
|
||||
#define RINGLOOP_DEFAULT_SIZE 1024
|
||||
@@ -104,51 +105,3 @@ public:
|
||||
unsigned save();
|
||||
void restore(unsigned sqe_tail);
|
||||
};
|
||||
|
||||
class ring_loop_mock_t: public ring_loop_i
|
||||
{
|
||||
std::vector<std::function<void()>> immediate_queue, immediate_queue2;
|
||||
std::vector<ring_consumer_t*> consumers;
|
||||
std::vector<io_uring_sqe> sqes;
|
||||
std::vector<ring_data_t> ring_datas;
|
||||
std::vector<ring_data_t *> free_ring_datas;
|
||||
std::vector<ring_data_t *> submit_ring_datas;
|
||||
std::vector<ring_data_t *> completed_ring_datas;
|
||||
std::function<void(io_uring_sqe *)> submit_cb;
|
||||
bool in_loop;
|
||||
bool loop_again;
|
||||
bool support_zc = false;
|
||||
|
||||
public:
|
||||
ring_loop_mock_t(int qd, std::function<void(io_uring_sqe *)> submit_cb);
|
||||
|
||||
void register_consumer(ring_consumer_t *consumer);
|
||||
void unregister_consumer(ring_consumer_t *consumer);
|
||||
void wakeup();
|
||||
void set_immediate(const std::function<void()> & cb);
|
||||
unsigned space_left();
|
||||
bool has_work();
|
||||
bool has_sendmsg_zc();
|
||||
|
||||
int register_eventfd();
|
||||
io_uring_sqe* get_sqe();
|
||||
int submit();
|
||||
int wait();
|
||||
void loop();
|
||||
unsigned save();
|
||||
void restore(unsigned sqe_tail);
|
||||
|
||||
void mark_completed(ring_data_t *data);
|
||||
};
|
||||
|
||||
class disk_mock_t
|
||||
{
|
||||
uint8_t *data = NULL;
|
||||
size_t size = 0;
|
||||
ring_loop_mock_t *loop = NULL;
|
||||
public:
|
||||
bool trace = false;
|
||||
disk_mock_t(ring_loop_mock_t *loop, size_t size);
|
||||
~disk_mock_t();
|
||||
bool submit(io_uring_sqe *sqe);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user