Index: net/quic/quic_connection.h |
diff --git a/net/quic/quic_connection.h b/net/quic/quic_connection.h |
index 8a69f77c9474486693ef98449125f4ad16b3f051..1217ed005735c60eb3bedbc451cc98ef8761d598 100644 |
--- a/net/quic/quic_connection.h |
+++ b/net/quic/quic_connection.h |
@@ -36,6 +36,7 @@ |
#include "net/quic/quic_blocked_writer_interface.h" |
#include "net/quic/quic_fec_group.h" |
#include "net/quic/quic_framer.h" |
+#include "net/quic/quic_one_block_arena.h" |
#include "net/quic/quic_packet_creator.h" |
#include "net/quic/quic_packet_generator.h" |
#include "net/quic/quic_packet_writer.h" |
@@ -250,6 +251,10 @@ class NET_EXPORT_PRIVATE QuicConnectionDebugVisitor |
virtual void OnRttChanged(QuicTime::Delta rtt) const {} |
}; |
+// QuicConnections currently use around 1KB of polymorphic types which would |
+// ordinarily be on the heap. Instead, store them inline in an arena. |
+using QuicConnectionArena = QuicOneBlockArena<1024>; |
+ |
class NET_EXPORT_PRIVATE QuicConnectionHelperInterface { |
public: |
virtual ~QuicConnectionHelperInterface() {} |
@@ -260,11 +265,20 @@ class NET_EXPORT_PRIVATE QuicConnectionHelperInterface { |
// Returns a QuicRandom to be used for all random number related functions. |
virtual QuicRandom* GetRandomGenerator() = 0; |
- // Creates a new platform-specific alarm which will be configured to |
- // notify |delegate| when the alarm fires. Caller takes ownership |
- // of the new alarm, which will not yet be "set" to fire. |
+ // Creates a new platform-specific alarm which will be configured to notify |
+ // |delegate| when the alarm fires. Returns an alarm allocated on the heap. |
+ // Caller takes ownership of the new alarm, which will not yet be "set" to |
+ // fire. |
virtual QuicAlarm* CreateAlarm(QuicAlarm::Delegate* delegate) = 0; |
+ // Creates a new platform-specific alarm which will be configured to notify |
+ // |delegate| when the alarm fires. Caller takes ownership of the new alarm, |
+ // which will not yet be "set" to fire. If |arena| is null, then the alarm |
+ // will be created on the heap. Otherwise, it will be created in |arena|. |
+ virtual QuicArenaScopedPtr<QuicAlarm> CreateAlarm( |
+ QuicArenaScopedPtr<QuicAlarm::Delegate> delegate, |
+ QuicConnectionArena* arena) = 0; |
+ |
// Returns a QuicBufferAllocator to be used for all stream frame buffers. |
virtual QuicBufferAllocator* GetBufferAllocator() = 0; |
}; |
@@ -870,22 +884,25 @@ class NET_EXPORT_PRIVATE QuicConnection |
// Indicates the retransmission alarm needs to be set. |
bool pending_retransmission_alarm_; |
+ // Arena to store class implementations within the QuicConnection. |
+ QuicConnectionArena arena_; |
+ |
// An alarm that fires when an ACK should be sent to the peer. |
- scoped_ptr<QuicAlarm> ack_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> ack_alarm_; |
// An alarm that fires when a packet needs to be retransmitted. |
- scoped_ptr<QuicAlarm> retransmission_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> retransmission_alarm_; |
// An alarm that is scheduled when the SentPacketManager requires a delay |
// before sending packets and fires when the packet may be sent. |
- scoped_ptr<QuicAlarm> send_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> send_alarm_; |
// An alarm that is scheduled when the connection can still write and there |
// may be more data to send. |
- scoped_ptr<QuicAlarm> resume_writes_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> resume_writes_alarm_; |
// An alarm that fires when the connection may have timed out. |
- scoped_ptr<QuicAlarm> timeout_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> timeout_alarm_; |
// An alarm that fires when a ping should be sent. |
- scoped_ptr<QuicAlarm> ping_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> ping_alarm_; |
// An alarm that fires when an MTU probe should be sent. |
- scoped_ptr<QuicAlarm> mtu_discovery_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> mtu_discovery_alarm_; |
// Neither visitor is owned by this class. |
QuicConnectionVisitorInterface* visitor_; |
@@ -894,7 +911,7 @@ class NET_EXPORT_PRIVATE QuicConnection |
QuicPacketGenerator packet_generator_; |
// An alarm that fires when an FEC packet should be sent. |
- scoped_ptr<QuicAlarm> fec_alarm_; |
+ QuicArenaScopedPtr<QuicAlarm> fec_alarm_; |
// Network idle time before we kill of this connection. |
QuicTime::Delta idle_network_timeout_; |