Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 MEDIA_CAST_NET_PACING_PACED_SENDER_H_ | 5 #ifndef MEDIA_CAST_NET_PACING_PACED_SENDER_H_ |
| 6 #define MEDIA_CAST_NET_PACING_PACED_SENDER_H_ | 6 #define MEDIA_CAST_NET_PACING_PACED_SENDER_H_ |
| 7 | 7 |
| 8 #include <list> | 8 #include <map> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
| 14 #include "base/single_thread_task_runner.h" | 14 #include "base/single_thread_task_runner.h" |
| 15 #include "base/threading/non_thread_safe.h" | 15 #include "base/threading/non_thread_safe.h" |
| 16 #include "base/time/default_tick_clock.h" | 16 #include "base/time/default_tick_clock.h" |
| 17 #include "base/time/tick_clock.h" | 17 #include "base/time/tick_clock.h" |
| 18 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 LoggingImpl* logging, | 62 LoggingImpl* logging, |
| 63 PacketSender* external_transport, | 63 PacketSender* external_transport, |
| 64 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner); | 64 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner); |
| 65 | 65 |
| 66 virtual ~PacedSender(); | 66 virtual ~PacedSender(); |
| 67 | 67 |
| 68 // These must be called before non-RTCP packets are sent. | 68 // These must be called before non-RTCP packets are sent. |
| 69 void RegisterAudioSsrc(uint32 audio_ssrc); | 69 void RegisterAudioSsrc(uint32 audio_ssrc); |
| 70 void RegisterVideoSsrc(uint32 video_ssrc); | 70 void RegisterVideoSsrc(uint32 video_ssrc); |
| 71 | 71 |
| 72 // Register SSRC that has a higher priority for sending. Multiple SSRCs can | |
| 73 // be registered. | |
| 74 // Note that it is not expected to register many SSRCs with this method. | |
| 75 // Because IsHigherPriority() is done in linear time. | |
|
miu
2014/07/16 22:55:56
nit: s/done/determined/
Alpha Left Google
2014/07/17 00:12:56
Done.
| |
| 76 void RegisterPrioritySsrc(uint32 ssrc); | |
| 77 | |
| 72 // PacedPacketSender implementation. | 78 // PacedPacketSender implementation. |
| 73 virtual bool SendPackets(const SendPacketVector& packets) OVERRIDE; | 79 virtual bool SendPackets(const SendPacketVector& packets) OVERRIDE; |
| 74 virtual bool ResendPackets(const SendPacketVector& packets, | 80 virtual bool ResendPackets(const SendPacketVector& packets, |
| 75 base::TimeDelta dedupe_window) OVERRIDE; | 81 base::TimeDelta dedupe_window) OVERRIDE; |
| 76 virtual bool SendRtcpPacket(uint32 ssrc, PacketRef packet) OVERRIDE; | 82 virtual bool SendRtcpPacket(uint32 ssrc, PacketRef packet) OVERRIDE; |
| 77 virtual void CancelSendingPacket(const PacketKey& packet_key) OVERRIDE; | 83 virtual void CancelSendingPacket(const PacketKey& packet_key) OVERRIDE; |
| 78 | 84 |
| 79 private: | 85 private: |
| 80 // Actually sends the packets to the transport. | 86 // Actually sends the packets to the transport. |
| 81 void SendStoredPackets(); | 87 void SendStoredPackets(); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 104 | 110 |
| 105 bool empty() const; | 111 bool empty() const; |
| 106 size_t size() const; | 112 size_t size() const; |
| 107 | 113 |
| 108 // Returns the next packet to send. RTCP packets have highest priority, | 114 // Returns the next packet to send. RTCP packets have highest priority, |
| 109 // resend packets have second highest priority and then comes everything | 115 // resend packets have second highest priority and then comes everything |
| 110 // else. | 116 // else. |
| 111 PacketRef GetNextPacket(PacketType* packet_type, | 117 PacketRef GetNextPacket(PacketType* packet_type, |
| 112 PacketKey* packet_key); | 118 PacketKey* packet_key); |
| 113 | 119 |
| 120 // Returns true if the packet should have a higher priority. | |
| 121 bool IsHighPriority(const PacketKey& packet_key) const; | |
| 122 | |
| 114 base::TickClock* const clock_; // Not owned by this class. | 123 base::TickClock* const clock_; // Not owned by this class. |
| 115 LoggingImpl* const logging_; // Not owned by this class. | 124 LoggingImpl* const logging_; // Not owned by this class. |
| 116 PacketSender* transport_; // Not owned by this class. | 125 PacketSender* transport_; // Not owned by this class. |
| 117 scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_; | 126 scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_; |
| 118 uint32 audio_ssrc_; | 127 uint32 audio_ssrc_; |
| 119 uint32 video_ssrc_; | 128 uint32 video_ssrc_; |
| 120 std::map<PacketKey, std::pair<PacketType, PacketRef> > packet_list_; | 129 |
| 130 // Set of SSRCs that have higher priority. This is a vector instead of a | |
| 131 // set because there's only very few in it (most likely 1). | |
| 132 std::vector<uint32> priority_ssrcs_; | |
| 133 typedef std::map<PacketKey, std::pair<PacketType, PacketRef> > PacketList; | |
| 134 PacketList packet_list_; | |
| 135 PacketList priority_packet_list_; | |
| 121 std::map<PacketKey, base::TimeTicks> sent_time_; | 136 std::map<PacketKey, base::TimeTicks> sent_time_; |
| 122 std::map<PacketKey, base::TimeTicks> sent_time_buffer_; | 137 std::map<PacketKey, base::TimeTicks> sent_time_buffer_; |
| 123 | 138 |
| 124 // Maximum burst size for the next three bursts. | 139 // Maximum burst size for the next three bursts. |
| 125 size_t max_burst_size_; | 140 size_t max_burst_size_; |
| 126 size_t next_max_burst_size_; | 141 size_t next_max_burst_size_; |
| 127 size_t next_next_max_burst_size_; | 142 size_t next_next_max_burst_size_; |
| 128 // Number of packets already sent in the current burst. | 143 // Number of packets already sent in the current burst. |
| 129 size_t current_burst_size_; | 144 size_t current_burst_size_; |
| 130 // This is when the current burst ends. | 145 // This is when the current burst ends. |
| 131 base::TimeTicks burst_end_; | 146 base::TimeTicks burst_end_; |
| 132 | 147 |
| 133 State state_; | 148 State state_; |
| 134 | 149 |
| 135 // NOTE: Weak pointers must be invalidated before all other member variables. | 150 // NOTE: Weak pointers must be invalidated before all other member variables. |
| 136 base::WeakPtrFactory<PacedSender> weak_factory_; | 151 base::WeakPtrFactory<PacedSender> weak_factory_; |
| 137 | 152 |
| 138 DISALLOW_COPY_AND_ASSIGN(PacedSender); | 153 DISALLOW_COPY_AND_ASSIGN(PacedSender); |
| 139 }; | 154 }; |
| 140 | 155 |
| 141 } // namespace cast | 156 } // namespace cast |
| 142 } // namespace media | 157 } // namespace media |
| 143 | 158 |
| 144 #endif // MEDIA_CAST_NET_PACING_PACED_SENDER_H_ | 159 #endif // MEDIA_CAST_NET_PACING_PACED_SENDER_H_ |
| OLD | NEW |