| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_TOOLS_QUIC_TEST_TOOLS_PACKET_DROPPING_TEST_WRITER_H_ | 5 #ifndef NET_TOOLS_QUIC_TEST_TOOLS_PACKET_DROPPING_TEST_WRITER_H_ |
| 6 #define NET_TOOLS_QUIC_TEST_TOOLS_PACKET_DROPPING_TEST_WRITER_H_ | 6 #define NET_TOOLS_QUIC_TEST_TOOLS_PACKET_DROPPING_TEST_WRITER_H_ |
| 7 | 7 |
| 8 #include <list> | 8 #include <list> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 | 36 |
| 37 virtual ~PacketDroppingTestWriter(); | 37 virtual ~PacketDroppingTestWriter(); |
| 38 | 38 |
| 39 // Must be called before blocking, reordering or delaying (loss is OK). May be | 39 // Must be called before blocking, reordering or delaying (loss is OK). May be |
| 40 // called after connecting if the helper is not available before. | 40 // called after connecting if the helper is not available before. |
| 41 // |on_can_write| will be triggered when fake-unblocking; ownership will be | 41 // |on_can_write| will be triggered when fake-unblocking; ownership will be |
| 42 // assumed. | 42 // assumed. |
| 43 void Initialize(QuicEpollConnectionHelper* helper, Delegate* on_can_write); | 43 void Initialize(QuicEpollConnectionHelper* helper, Delegate* on_can_write); |
| 44 | 44 |
| 45 // QuicPacketWriter methods: | 45 // QuicPacketWriter methods: |
| 46 virtual WriteResult WritePacket( | 46 virtual WriteResult WritePacket(const char* buffer, |
| 47 const char* buffer, | 47 size_t buf_len, |
| 48 size_t buf_len, | 48 const IPAddressNumber& self_address, |
| 49 const IPAddressNumber& self_address, | 49 const IPEndPoint& peer_address) OVERRIDE; |
| 50 const IPEndPoint& peer_address) OVERRIDE; | |
| 51 | 50 |
| 52 virtual bool IsWriteBlocked() const OVERRIDE; | 51 virtual bool IsWriteBlocked() const OVERRIDE; |
| 53 | 52 |
| 54 virtual void SetWritable() OVERRIDE; | 53 virtual void SetWritable() OVERRIDE; |
| 55 | 54 |
| 56 // Writes out any packet which should have been sent by now | 55 // Writes out any packet which should have been sent by now |
| 57 // to the contained writer and returns the time | 56 // to the contained writer and returns the time |
| 58 // for the next delayed packet to be written. | 57 // for the next delayed packet to be written. |
| 59 QuicTime ReleaseOldPackets(); | 58 QuicTime ReleaseOldPackets(); |
| 60 | 59 |
| 61 void OnCanWrite(); | 60 void OnCanWrite(); |
| 62 | 61 |
| 63 // The percent of time a packet is simulated as being lost. | 62 // The percent of time a packet is simulated as being lost. |
| 64 void set_fake_packet_loss_percentage(int32 fake_packet_loss_percentage) { | 63 void set_fake_packet_loss_percentage(int32 fake_packet_loss_percentage) { |
| 65 base::AutoLock locked(config_mutex_); | 64 base::AutoLock locked(config_mutex_); |
| 66 fake_packet_loss_percentage_ = fake_packet_loss_percentage; | 65 fake_packet_loss_percentage_ = fake_packet_loss_percentage; |
| 67 } | 66 } |
| 68 | 67 |
| 69 // The percent of time WritePacket will block and set WriteResult's status | 68 // The percent of time WritePacket will block and set WriteResult's status |
| 70 // to WRITE_STATUS_BLOCKED. | 69 // to WRITE_STATUS_BLOCKED. |
| 71 void set_fake_blocked_socket_percentage( | 70 void set_fake_blocked_socket_percentage( |
| 72 int32 fake_blocked_socket_percentage) { | 71 int32 fake_blocked_socket_percentage) { |
| 73 DCHECK(clock_); | 72 DCHECK(clock_); |
| 74 base::AutoLock locked(config_mutex_); | 73 base::AutoLock locked(config_mutex_); |
| 75 fake_blocked_socket_percentage_ = fake_blocked_socket_percentage; | 74 fake_blocked_socket_percentage_ = fake_blocked_socket_percentage; |
| 76 } | 75 } |
| 77 | 76 |
| 78 // The percent of time a packet is simulated as being reordered. | 77 // The percent of time a packet is simulated as being reordered. |
| 79 void set_fake_reorder_percentage(int32 fake_packet_reorder_percentage) { | 78 void set_fake_reorder_percentage(int32 fake_packet_reorder_percentage) { |
| 80 DCHECK(clock_); | 79 DCHECK(clock_); |
| 81 base::AutoLock locked(config_mutex_); | 80 base::AutoLock locked(config_mutex_); |
| 82 DCHECK(!fake_packet_delay_.IsZero()); | 81 DCHECK(!fake_packet_delay_.IsZero()); |
| 83 fake_packet_reorder_percentage_ = fake_packet_reorder_percentage; | 82 fake_packet_reorder_percentage_ = fake_packet_reorder_percentage; |
| 84 } | 83 } |
| 85 | 84 |
| 86 // The percent of time WritePacket will block and set WriteResult's status | 85 // The percent of time WritePacket will block and set WriteResult's status |
| 87 // to WRITE_STATUS_BLOCKED. | 86 // to WRITE_STATUS_BLOCKED. |
| 88 void set_fake_packet_delay(QuicTime::Delta fake_packet_delay) { | 87 void set_fake_packet_delay(QuicTime::Delta fake_packet_delay) { |
| 89 DCHECK(clock_); | 88 DCHECK(clock_); |
| 90 base::AutoLock locked(config_mutex_); | 89 base::AutoLock locked(config_mutex_); |
| 91 fake_packet_delay_ = fake_packet_delay; | 90 fake_packet_delay_ = fake_packet_delay; |
| 92 } | 91 } |
| 93 | 92 |
| 94 // The maximum bandwidth and buffer size of the connection. When these are | 93 // The maximum bandwidth and buffer size of the connection. When these are |
| 95 // set, packets will be delayed until a connection with that bandwidth would | 94 // set, packets will be delayed until a connection with that bandwidth would |
| 96 // transmit it. Once the |buffer_size| is reached, all new packets are | 95 // transmit it. Once the |buffer_size| is reached, all new packets are |
| 97 // dropped. | 96 // dropped. |
| 98 void set_max_bandwidth_and_buffer_size(QuicBandwidth fake_bandwidth, | 97 void set_max_bandwidth_and_buffer_size(QuicBandwidth fake_bandwidth, |
| 99 QuicByteCount buffer_size) { | 98 QuicByteCount buffer_size) { |
| 100 DCHECK(clock_); | 99 DCHECK(clock_); |
| 101 base::AutoLock locked(config_mutex_); | 100 base::AutoLock locked(config_mutex_); |
| 102 fake_bandwidth_ = fake_bandwidth; | 101 fake_bandwidth_ = fake_bandwidth; |
| 103 buffer_size_ = buffer_size; | 102 buffer_size_ = buffer_size; |
| 104 } | 103 } |
| 105 | 104 |
| 106 void set_seed(uint64 seed) { | 105 void set_seed(uint64 seed) { simple_random_.set_seed(seed); } |
| 107 simple_random_.set_seed(seed); | |
| 108 } | |
| 109 | 106 |
| 110 private: | 107 private: |
| 111 // Writes out the next packet to the contained writer and returns the time | 108 // Writes out the next packet to the contained writer and returns the time |
| 112 // for the next delayed packet to be written. | 109 // for the next delayed packet to be written. |
| 113 QuicTime ReleaseNextPacket(); | 110 QuicTime ReleaseNextPacket(); |
| 114 | 111 |
| 115 // A single packet which will be sent at the supplied send_time. | 112 // A single packet which will be sent at the supplied send_time. |
| 116 struct DelayedWrite { | 113 struct DelayedWrite { |
| 117 public: | 114 public: |
| 118 DelayedWrite(const char* buffer, | 115 DelayedWrite(const char* buffer, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 148 QuicByteCount buffer_size_; | 145 QuicByteCount buffer_size_; |
| 149 | 146 |
| 150 DISALLOW_COPY_AND_ASSIGN(PacketDroppingTestWriter); | 147 DISALLOW_COPY_AND_ASSIGN(PacketDroppingTestWriter); |
| 151 }; | 148 }; |
| 152 | 149 |
| 153 } // namespace test | 150 } // namespace test |
| 154 } // namespace tools | 151 } // namespace tools |
| 155 } // namespace net | 152 } // namespace net |
| 156 | 153 |
| 157 #endif // NET_TOOLS_QUIC_TEST_TOOLS_PACKET_DROPPING_TEST_WRITER_H_ | 154 #endif // NET_TOOLS_QUIC_TEST_TOOLS_PACKET_DROPPING_TEST_WRITER_H_ |
| OLD | NEW |