mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
61 lines
2.0 KiB
C++
61 lines
2.0 KiB
C++
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "net/tools/quic/test_tools/mock_epoll_server.h"
|
|
|
|
namespace net {
|
|
namespace test {
|
|
|
|
FakeTimeEpollServer::FakeTimeEpollServer() : now_in_usec_(0) {}
|
|
|
|
FakeTimeEpollServer::~FakeTimeEpollServer() = default;
|
|
|
|
int64_t FakeTimeEpollServer::NowInUsec() const {
|
|
return now_in_usec_;
|
|
}
|
|
|
|
MockEpollServer::MockEpollServer() : until_in_usec_(-1) {}
|
|
|
|
MockEpollServer::~MockEpollServer() = default;
|
|
|
|
int MockEpollServer::epoll_wait_impl(int epfd,
|
|
struct epoll_event* events,
|
|
int max_events,
|
|
int timeout_in_ms) {
|
|
int num_events = 0;
|
|
while (!event_queue_.empty() && num_events < max_events &&
|
|
event_queue_.begin()->first <= NowInUsec() &&
|
|
((until_in_usec_ == -1) ||
|
|
(event_queue_.begin()->first < until_in_usec_))) {
|
|
int64_t event_time_in_usec = event_queue_.begin()->first;
|
|
events[num_events] = event_queue_.begin()->second;
|
|
if (event_time_in_usec > NowInUsec()) {
|
|
set_now_in_usec(event_time_in_usec);
|
|
}
|
|
event_queue_.erase(event_queue_.begin());
|
|
++num_events;
|
|
}
|
|
if (num_events == 0) { // then we'd have waited 'till the timeout.
|
|
if (until_in_usec_ < 0) { // then we don't care what the final time is.
|
|
if (timeout_in_ms > 0) {
|
|
AdvanceBy(timeout_in_ms * 1000);
|
|
}
|
|
} else { // except we assume that we don't wait for the timeout
|
|
// period if until_in_usec_ is a positive number.
|
|
set_now_in_usec(until_in_usec_);
|
|
// And reset until_in_usec_ to signal no waiting (as
|
|
// the AdvanceByExactly* stuff is meant to be one-shot,
|
|
// as are all similar EpollServer functions)
|
|
until_in_usec_ = -1;
|
|
}
|
|
}
|
|
if (until_in_usec_ >= 0) {
|
|
CHECK(until_in_usec_ >= NowInUsec());
|
|
}
|
|
return num_events;
|
|
}
|
|
|
|
} // namespace test
|
|
} // namespace net
|