diff --git a/quic/api/QuicTransportBase.cpp b/quic/api/QuicTransportBase.cpp index 29f7bc9f4..6976b8efc 100644 --- a/quic/api/QuicTransportBase.cpp +++ b/quic/api/QuicTransportBase.cpp @@ -2365,7 +2365,7 @@ void QuicTransportBase::cancelDeliveryCallbacks( } void QuicTransportBase::cancelDeliveryCallbacks( - const std::unordered_map< + const folly::F14FastMap< StreamId, std::deque>>& deliveryCallbacks) { diff --git a/quic/api/QuicTransportBase.h b/quic/api/QuicTransportBase.h index 93247c46f..f75518dbc 100644 --- a/quic/api/QuicTransportBase.h +++ b/quic/api/QuicTransportBase.h @@ -246,7 +246,7 @@ class QuicTransportBase : public QuicSocket { * callbacks of the transport, so there is no need to erase anything from it. */ static void cancelDeliveryCallbacks( - const std::unordered_map< + const folly::F14FastMap< StreamId, std::deque>>& deliveryCallbacks); @@ -588,15 +588,13 @@ class QuicTransportBase : public QuicSocket { DataRejectedCallbackData(DataRejectedCallback* cb) : dataRejectedCb(cb) {} }; - // Map of streamID to tupl - std::unordered_map readCallbacks_; - std::unordered_map peekCallbacks_; - std::unordered_map< - StreamId, - std::deque>> - deliveryCallbacks_; - std::unordered_map dataExpiredCallbacks_; - std::unordered_map dataRejectedCallbacks_; + folly::F14FastMap readCallbacks_; + folly::F14FastMap peekCallbacks_; + folly:: + F14FastMap>> + deliveryCallbacks_; + folly::F14FastMap dataExpiredCallbacks_; + folly::F14FastMap dataRejectedCallbacks_; PingCallback* pingCallback_; WriteCallback* connWriteCallback_{nullptr}; diff --git a/quic/api/test/QuicTransportBaseTest.cpp b/quic/api/test/QuicTransportBaseTest.cpp index 26f6c68df..bfa7ceff1 100644 --- a/quic/api/test/QuicTransportBaseTest.cpp +++ b/quic/api/test/QuicTransportBaseTest.cpp @@ -1077,7 +1077,7 @@ TEST_F(QuicTransportImplTest, CancelAllDeliveryCallbacksDeque) { TEST_F(QuicTransportImplTest, CancelAllDeliveryCallbacksMap) { MockDeliveryCallback mockedDeliveryCallback1, mockedDeliveryCallback2; - std::unordered_map< + folly::F14FastMap< StreamId, std::deque>> callbacks; @@ -1137,8 +1137,6 @@ TEST_F(QuicTransportImplTest, DeliveryCallbackUnsetOne) { } TEST_F(QuicTransportImplTest, DeliveryCallbackOnSendDataExpire) { - InSequence enforceOrder; - transport->transportConn->partialReliabilityEnabled = true; auto stream1 = transport->createBidirectionalStream().value(); @@ -1165,8 +1163,6 @@ TEST_F(QuicTransportImplTest, DeliveryCallbackOnSendDataExpire) { } TEST_F(QuicTransportImplTest, DeliveryCallbackOnSendDataExpireCallbacksLeft) { - InSequence enforceOrder; - transport->transportConn->partialReliabilityEnabled = true; auto stream1 = transport->createBidirectionalStream().value(); @@ -1645,8 +1641,6 @@ TEST_F(QuicTransportImplTest, IsBidirectionalStream) { } TEST_F(QuicTransportImplTest, PeekCallbackDataAvailable) { - InSequence enforceOrder; - auto stream1 = transport->createBidirectionalStream().value(); auto stream2 = transport->createBidirectionalStream().value(); @@ -2282,8 +2276,6 @@ TEST_F(QuicTransportImplTest, DataRejecteddCallbackDataAvailable) { } TEST_F(QuicTransportImplTest, DataRejecteddCallbackWithDeliveryCallbacks) { - InSequence enforceOrder; - transport->transportConn->partialReliabilityEnabled = true; auto stream1 = transport->createBidirectionalStream().value(); @@ -2328,8 +2320,6 @@ TEST_F(QuicTransportImplTest, DataRejecteddCallbackWithDeliveryCallbacks) { TEST_F( QuicTransportImplTest, DataRejecteddCallbackWithDeliveryCallbacksSomeLeft) { - InSequence enforceOrder; - transport->transportConn->partialReliabilityEnabled = true; auto stream1 = transport->createBidirectionalStream().value(); @@ -2368,8 +2358,8 @@ TEST_F( Mock::VerifyAndClearExpectations(&dcb2); Mock::VerifyAndClearExpectations(&dataRejectedCb2); - EXPECT_CALL(dcb2, onCanceled(stream2, 29)).Times(1); EXPECT_CALL(dcb1, onCanceled(stream1, 25)).Times(1); + EXPECT_CALL(dcb2, onCanceled(stream2, 29)).Times(1); transport->close(folly::none); } diff --git a/quic/client/test/QuicClientTransportTest.cpp b/quic/client/test/QuicClientTransportTest.cpp index d2e3b7765..f30d38fe4 100644 --- a/quic/client/test/QuicClientTransportTest.cpp +++ b/quic/client/test/QuicClientTransportTest.cpp @@ -95,15 +95,11 @@ class TestingQuicClientTransport : public QuicClientTransport { return *dynamic_cast(conn_.get()); } - const std::unordered_map& getReadCallbacks() - const { + const auto& getReadCallbacks() const { return readCallbacks_; } - const std::unordered_map< - StreamId, - std::deque>>& - getDeliveryCallbacks() const { + const auto& getDeliveryCallbacks() const { return deliveryCallbacks_; } diff --git a/quic/state/QuicStreamManager.cpp b/quic/state/QuicStreamManager.cpp index 50fe644ff..c8e632238 100644 --- a/quic/state/QuicStreamManager.cpp +++ b/quic/state/QuicStreamManager.cpp @@ -432,10 +432,10 @@ void QuicStreamManager::removeClosedStream(StreamId streamId) { } void QuicStreamManager::updateLossStreams(QuicStreamState& stream) { - auto it = std::find(lossStreams_.begin(), lossStreams_.end(), stream.id); + auto it = lossStreams_.find(stream.id); if (!stream.lossBuffer.empty()) { if (it == lossStreams_.end()) { - lossStreams_.push_back(stream.id); + lossStreams_.insert(stream.id); } } else if (it != lossStreams_.end()) { lossStreams_.erase(it); diff --git a/quic/state/QuicStreamManager.h b/quic/state/QuicStreamManager.h index d3f8a53b1..1f9e93989 100644 --- a/quic/state/QuicStreamManager.h +++ b/quic/state/QuicStreamManager.h @@ -202,7 +202,7 @@ class QuicStreamManager { } void addLoss(StreamId streamId) { - lossStreams_.push_back(streamId); + lossStreams_.insert(streamId); } bool hasLoss() const { @@ -750,47 +750,47 @@ class QuicStreamManager { // A map of streams that are active. folly::F14NodeMap streams_; - std::deque newPeerStreams_; + std::vector newPeerStreams_; - // List of streams that have pending reads - std::set readableStreams_; + // Map of streams that were blocked + folly::F14FastMap blockedStreams_; - // List of streams that have pending peeks - std::set peekableStreams_; + // Map of streams where the peer was asked to stop sending + folly::F14FastMap stopSendingStreams_; - // List of !control streams that have writable data - std::set writableStreams_; + // Set of streams that have expired data + folly::F14FastSet dataExpiredStreams_; - // List of control streams that have writable data - std::set writableControlStreams_; - - // List of streams that were blocked - std::unordered_map blockedStreams_; - - // List of streams where the peer was asked to stop sending - std::unordered_map stopSendingStreams_; - - // List of streams that have expired data - std::set dataExpiredStreams_; - - // List of streams that have rejected data - std::set dataRejectedStreams_; - - // Streams that may be able to callback DeliveryCallback - std::set deliverableStreams_; + // Set of streams that have rejected data + folly::F14FastSet dataRejectedStreams_; // Streams that had their stream window change and potentially need a window // update sent - std::unordered_set windowUpdates_; + folly::F14FastSet windowUpdates_; // Streams that had their flow control updated - std::set flowControlUpdated_; - - // Streams that are closed but we still have state for - std::set closedStreams_; + folly::F14FastSet flowControlUpdated_; // Data structure to keep track of stream that have detected lost data - std::vector lossStreams_; + folly::F14FastSet lossStreams_; + + // Set of streams that have pending reads + folly::F14FastSet readableStreams_; + + // Set of streams that have pending peeks + folly::F14FastSet peekableStreams_; + + // Set of !control streams that have writable data + std::set writableStreams_; + + // Set of control streams that have writable data + std::set writableControlStreams_; + + // Streams that may be able to callback DeliveryCallback + folly::F14FastSet deliverableStreams_; + + // Streams that are closed but we still have state for + folly::F14FastSet closedStreams_; // Record whether or not we are app-idle. bool isAppIdle_{false}; diff --git a/quic/state/StateData.h b/quic/state/StateData.h index 98686a408..a4ea721ad 100644 --- a/quic/state/StateData.h +++ b/quic/state/StateData.h @@ -29,11 +29,8 @@ #include #include #include -#include #include #include -#include -#include namespace quic { @@ -375,7 +372,7 @@ struct RstStreamEvent { ApplicationErrorCode errorCode; }; -using Resets = std::unordered_map; +using Resets = folly::F14FastMap; using FrameList = std::vector; @@ -489,7 +486,7 @@ struct QuicConnectionStateBase { // associatedEvent or if it's not in this set, there is no need to process its // frames upon ack or loss. // TODO: Enforce only AppTraffic packets to be clonable - std::set outstandingPacketEvents; + folly::F14FastSet outstandingPacketEvents; // Number of pure ack packets outstanding. uint64_t outstandingPureAckPacketsCount{0}; diff --git a/quic/state/test/QuicStreamFunctionsTest.cpp b/quic/state/test/QuicStreamFunctionsTest.cpp index 014509299..e10b0c58b 100644 --- a/quic/state/test/QuicStreamFunctionsTest.cpp +++ b/quic/state/test/QuicStreamFunctionsTest.cpp @@ -1540,7 +1540,7 @@ TEST_F(QuicStreamFunctionsTest, RemovedClosedState) { TEST_F(QuicServerStreamFunctionsTest, ServerGetClientQuicStream) { StreamId clientStream = 0x10; - std::deque newStreams = {0x0, 0x4, 0x8, 0xc, 0x10}; + std::vector newStreams = {0x0, 0x4, 0x8, 0xc, 0x10}; EXPECT_EQ(conn.streamManager->getStream(clientStream)->id, clientStream); EXPECT_EQ(conn.streamManager->streamCount(), 1); EXPECT_EQ(conn.streamManager->openBidirectionalPeerStreams().size(), 5);