Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(344)

Side by Side Diff: media/cast/net/pacing/paced_sender.h

Issue 399743002: Cast: Implement priority packets in PacedSender (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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_
OLDNEW
« no previous file with comments | « no previous file | media/cast/net/pacing/paced_sender.cc » ('j') | media/cast/net/pacing/paced_sender.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698