Index: media/cast/transport/pacing/paced_sender.h |
diff --git a/media/cast/transport/pacing/paced_sender.h b/media/cast/transport/pacing/paced_sender.h |
deleted file mode 100644 |
index 9fc0c8b8b8582dcef7e239a213cd84879882c5fc..0000000000000000000000000000000000000000 |
--- a/media/cast/transport/pacing/paced_sender.h |
+++ /dev/null |
@@ -1,147 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_ |
-#define MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_ |
- |
-#include <list> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/threading/non_thread_safe.h" |
-#include "base/time/default_tick_clock.h" |
-#include "base/time/tick_clock.h" |
-#include "base/time/time.h" |
-#include "media/cast/transport/cast_transport_config.h" |
-#include "media/cast/transport/transport/udp_transport.h" |
- |
-namespace media { |
-namespace cast { |
- |
-class LoggingImpl; |
- |
-namespace transport { |
- |
-// Use std::pair for free comparison operators. |
-// { capture_time, ssrc, packet_id } |
-// The PacketKey is designed to meet two criteria: |
-// 1. When we re-send the same packet again, we can use the packet key |
-// to identify it so that we can de-duplicate packets in the queue. |
-// 2. The sort order of the PacketKey determines the order that packets |
-// are sent out. Using the capture_time as the first member basically |
-// means that older packets are sent first. |
-typedef std::pair<base::TimeTicks, std::pair<uint32, uint16> > PacketKey; |
-typedef std::vector<std::pair<PacketKey, PacketRef> > SendPacketVector; |
- |
-// We have this pure virtual class to enable mocking. |
-class PacedPacketSender { |
- public: |
- virtual bool SendPackets(const SendPacketVector& packets) = 0; |
- virtual bool ResendPackets(const SendPacketVector& packets, |
- base::TimeDelta dedupe_window) = 0; |
- virtual bool SendRtcpPacket(uint32 ssrc, PacketRef packet) = 0; |
- virtual void CancelSendingPacket(const PacketKey& packet_key) = 0; |
- |
- virtual ~PacedPacketSender() {} |
- |
- static PacketKey MakePacketKey(const base::TimeTicks& ticks, |
- uint32 ssrc, |
- uint16 packet_id); |
-}; |
- |
-class PacedSender : public PacedPacketSender, |
- public base::NonThreadSafe, |
- public base::SupportsWeakPtr<PacedSender> { |
- public: |
- // The |external_transport| should only be used by the Cast receiver and for |
- // testing. |
- PacedSender( |
- base::TickClock* clock, |
- LoggingImpl* logging, |
- PacketSender* external_transport, |
- const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner); |
- |
- virtual ~PacedSender(); |
- |
- // These must be called before non-RTCP packets are sent. |
- void RegisterAudioSsrc(uint32 audio_ssrc); |
- void RegisterVideoSsrc(uint32 video_ssrc); |
- |
- // PacedPacketSender implementation. |
- virtual bool SendPackets(const SendPacketVector& packets) OVERRIDE; |
- virtual bool ResendPackets(const SendPacketVector& packets, |
- base::TimeDelta dedupe_window) OVERRIDE; |
- virtual bool SendRtcpPacket(uint32 ssrc, PacketRef packet) OVERRIDE; |
- virtual void CancelSendingPacket(const PacketKey& packet_key) OVERRIDE; |
- |
- private: |
- // Actually sends the packets to the transport. |
- void SendStoredPackets(); |
- void LogPacketEvent(const Packet& packet, CastLoggingEvent event); |
- |
- enum PacketType { |
- PacketType_RTCP, |
- PacketType_Resend, |
- PacketType_Normal |
- }; |
- enum State { |
- // In an unblocked state, we can send more packets. |
- // We have to check the current time against |burst_end_| to see if we are |
- // appending to the current burst or if we can start a new one. |
- State_Unblocked, |
- // In this state, we are waiting for a callback from the udp transport. |
- // This happens when the OS-level buffer is full. Once we receive the |
- // callback, we go to State_Unblocked and see if we can write more packets |
- // to the current burst. (Or the next burst if enough time has passed.) |
- State_TransportBlocked, |
- // Once we've written enough packets for a time slice, we go into this |
- // state and PostDelayTask a call to ourselves to wake up when we can |
- // send more data. |
- State_BurstFull |
- }; |
- |
- bool empty() const; |
- size_t size() const; |
- |
- // Returns the next packet to send. RTCP packets have highest priority, |
- // resend packets have second highest priority and then comes everything |
- // else. |
- PacketRef GetNextPacket(PacketType* packet_type, |
- PacketKey* packet_key); |
- |
- base::TickClock* const clock_; // Not owned by this class. |
- LoggingImpl* const logging_; // Not owned by this class. |
- PacketSender* transport_; // Not owned by this class. |
- scoped_refptr<base::SingleThreadTaskRunner> transport_task_runner_; |
- uint32 audio_ssrc_; |
- uint32 video_ssrc_; |
- std::map<PacketKey, std::pair<PacketType, PacketRef> > packet_list_; |
- std::map<PacketKey, base::TimeTicks> sent_time_; |
- std::map<PacketKey, base::TimeTicks> sent_time_buffer_; |
- |
- // Maximum burst size for the next three bursts. |
- size_t max_burst_size_; |
- size_t next_max_burst_size_; |
- size_t next_next_max_burst_size_; |
- // Number of packets already sent in the current burst. |
- size_t current_burst_size_; |
- // This is when the current burst ends. |
- base::TimeTicks burst_end_; |
- |
- State state_; |
- |
- // NOTE: Weak pointers must be invalidated before all other member variables. |
- base::WeakPtrFactory<PacedSender> weak_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PacedSender); |
-}; |
- |
-} // namespace transport |
-} // namespace cast |
-} // namespace media |
- |
-#endif // MEDIA_CAST_TRANSPORT_PACING_PACED_SENDER_H_ |