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

Side by Side Diff: webrtc/test/direct_transport.cc

Issue 2998923002: Use SingleThreadedTaskQueue in DirectTransport (Closed)
Patch Set: . Created 3 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include "webrtc/test/direct_transport.h" 10 #include "webrtc/test/direct_transport.h"
11 11
12 #include "webrtc/call/call.h" 12 #include "webrtc/call/call.h"
13 #include "webrtc/system_wrappers/include/clock.h" 13 #include "webrtc/system_wrappers/include/clock.h"
14 #include "webrtc/test/single_threaded_task_queue.h"
14 15
15 namespace webrtc { 16 namespace webrtc {
16 namespace test { 17 namespace test {
17 18
18 DirectTransport::DirectTransport( 19 DirectTransport::DirectTransport(
20 SingleThreadedTaskQueueForTesting* task_queue,
19 Call* send_call, 21 Call* send_call,
20 const std::map<uint8_t, MediaType>& payload_type_map) 22 const std::map<uint8_t, MediaType>& payload_type_map)
21 : DirectTransport(FakeNetworkPipe::Config(), send_call, payload_type_map) {} 23 : DirectTransport(task_queue,
24 FakeNetworkPipe::Config(),
25 send_call,
26 payload_type_map) {
27 RTC_DCHECK(task_queue);
28 }
22 29
23 DirectTransport::DirectTransport( 30 DirectTransport::DirectTransport(
31 SingleThreadedTaskQueueForTesting* task_queue,
24 const FakeNetworkPipe::Config& config, 32 const FakeNetworkPipe::Config& config,
25 Call* send_call, 33 Call* send_call,
26 const std::map<uint8_t, MediaType>& payload_type_map) 34 const std::map<uint8_t, MediaType>& payload_type_map)
27 : DirectTransport( 35 : DirectTransport(
36 task_queue,
28 config, 37 config,
29 send_call, 38 send_call,
30 std::unique_ptr<Demuxer>(new DemuxerImpl(payload_type_map))) {} 39 std::unique_ptr<Demuxer>(new DemuxerImpl(payload_type_map))) {
40 RTC_DCHECK(task_queue);
41 }
31 42
32 DirectTransport::DirectTransport(const FakeNetworkPipe::Config& config, 43 DirectTransport::DirectTransport(SingleThreadedTaskQueueForTesting* task_queue,
44 const FakeNetworkPipe::Config& config,
33 Call* send_call, 45 Call* send_call,
34 std::unique_ptr<Demuxer> demuxer) 46 std::unique_ptr<Demuxer> demuxer)
35 : send_call_(send_call), 47 : send_call_(send_call),
36 packet_event_(false, false),
37 thread_(NetworkProcess, this, "NetworkProcess"),
38 clock_(Clock::GetRealTimeClock()), 48 clock_(Clock::GetRealTimeClock()),
39 shutting_down_(false), 49 task_queue_(task_queue),
40 fake_network_(clock_, config, std::move(demuxer)) { 50 fake_network_(clock_, config, std::move(demuxer)) {
41 thread_.Start();
42 if (send_call_) { 51 if (send_call_) {
43 send_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp); 52 send_call_->SignalChannelNetworkState(MediaType::AUDIO, kNetworkUp);
44 send_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp); 53 send_call_->SignalChannelNetworkState(MediaType::VIDEO, kNetworkUp);
45 } 54 }
55 SendPackets();
46 } 56 }
47 57
48 DirectTransport::~DirectTransport() { StopSending(); } 58 DirectTransport::~DirectTransport() {
59 RTC_DCHECK_RUN_ON(&thread_checker_);
60 // Constructor updates |next_scheduled_task_|, so it's guaranteed to
61 // be initialized.
62 task_queue_->CancelTask(next_scheduled_task_);
nisse-webrtc 2017/08/18 11:08:29 So we only need Cancel for tasks which were posted
eladalon 2017/08/18 12:12:37 The delay doesn't matter. What matters is that we
63 }
49 64
50 void DirectTransport::SetConfig(const FakeNetworkPipe::Config& config) { 65 void DirectTransport::SetConfig(const FakeNetworkPipe::Config& config) {
51 fake_network_.SetConfig(config); 66 fake_network_.SetConfig(config);
52 } 67 }
53 68
54 void DirectTransport::StopSending() {
55 {
56 rtc::CritScope crit(&lock_);
57 shutting_down_ = true;
58 }
59
60 packet_event_.Set();
61 thread_.Stop();
62 }
63
64 void DirectTransport::SetReceiver(PacketReceiver* receiver) { 69 void DirectTransport::SetReceiver(PacketReceiver* receiver) {
70 RTC_DCHECK_RUN_ON(&thread_checker_);
65 fake_network_.SetReceiver(receiver); 71 fake_network_.SetReceiver(receiver);
66 } 72 }
67 73
68 bool DirectTransport::SendRtp(const uint8_t* data, 74 bool DirectTransport::SendRtp(const uint8_t* data,
69 size_t length, 75 size_t length,
70 const PacketOptions& options) { 76 const PacketOptions& options) {
71 if (send_call_) { 77 if (send_call_) {
72 rtc::SentPacket sent_packet(options.packet_id, 78 rtc::SentPacket sent_packet(options.packet_id,
73 clock_->TimeInMilliseconds()); 79 clock_->TimeInMilliseconds());
74 send_call_->OnSentPacket(sent_packet); 80 send_call_->OnSentPacket(sent_packet);
75 } 81 }
76 fake_network_.SendPacket(data, length); 82 fake_network_.SendPacket(data, length);
77 packet_event_.Set();
78 return true; 83 return true;
79 } 84 }
80 85
81 bool DirectTransport::SendRtcp(const uint8_t* data, size_t length) { 86 bool DirectTransport::SendRtcp(const uint8_t* data, size_t length) {
82 fake_network_.SendPacket(data, length); 87 fake_network_.SendPacket(data, length);
83 packet_event_.Set();
84 return true; 88 return true;
85 } 89 }
86 90
87 int DirectTransport::GetAverageDelayMs() { 91 int DirectTransport::GetAverageDelayMs() {
88 return fake_network_.AverageDelay(); 92 return fake_network_.AverageDelay();
89 } 93 }
90 94
91 DirectTransport::ForceDemuxer::ForceDemuxer(MediaType media_type) 95 DirectTransport::ForceDemuxer::ForceDemuxer(MediaType media_type)
92 : media_type_(media_type) {} 96 : media_type_(media_type) {}
93 97
94 void DirectTransport::ForceDemuxer::SetReceiver(PacketReceiver* receiver) { 98 void DirectTransport::ForceDemuxer::SetReceiver(PacketReceiver* receiver) {
95 packet_receiver_ = receiver; 99 packet_receiver_ = receiver;
96 } 100 }
97 101
98 void DirectTransport::ForceDemuxer::DeliverPacket( 102 void DirectTransport::ForceDemuxer::DeliverPacket(
99 const NetworkPacket* packet, 103 const NetworkPacket* packet,
100 const PacketTime& packet_time) { 104 const PacketTime& packet_time) {
101 if (!packet_receiver_) 105 if (!packet_receiver_)
102 return; 106 return;
103 packet_receiver_->DeliverPacket(media_type_, packet->data(), 107 packet_receiver_->DeliverPacket(media_type_, packet->data(),
104 packet->data_length(), packet_time); 108 packet->data_length(), packet_time);
105 } 109 }
106 110
107 bool DirectTransport::NetworkProcess(void* transport) { 111 void DirectTransport::SendPackets() {
108 return static_cast<DirectTransport*>(transport)->SendPackets(); 112 RTC_DCHECK_RUN_ON(&thread_checker_);
109 }
110 113
111 bool DirectTransport::SendPackets() {
112 fake_network_.Process(); 114 fake_network_.Process();
113 int64_t wait_time_ms = fake_network_.TimeUntilNextProcess(); 115
114 if (wait_time_ms > 0) { 116 int64_t delay_ms = fake_network_.TimeUntilNextProcess();
115 packet_event_.Wait(static_cast<int>(wait_time_ms)); 117 next_scheduled_task_ = task_queue_->PostDelayedTask([this]() {
116 } 118 SendPackets();
117 rtc::CritScope crit(&lock_); 119 }, delay_ms);
118 return shutting_down_ ? false : true;
119 } 120 }
120 } // namespace test 121 } // namespace test
121 } // namespace webrtc 122 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698