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

Side by Side Diff: jingle/glue/thread_wrapper.cc

Issue 2037873003: Roll WebRTC 13098:13104 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Roll WebRTC Created 4 years, 6 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
« no previous file with comments | « jingle/glue/thread_wrapper.h ('k') | jingle/glue/thread_wrapper_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "jingle/glue/thread_wrapper.h" 5 #include "jingle/glue/thread_wrapper.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/lazy_instance.h" 12 #include "base/lazy_instance.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/threading/thread_local.h" 14 #include "base/threading/thread_local.h"
15 #include "base/trace_event/trace_event.h"
15 #include "third_party/webrtc/base/nullsocketserver.h" 16 #include "third_party/webrtc/base/nullsocketserver.h"
16 17
17 namespace jingle_glue { 18 namespace jingle_glue {
18 19
19 struct JingleThreadWrapper::PendingSend { 20 struct JingleThreadWrapper::PendingSend {
20 PendingSend(const rtc::Message& message_value) 21 PendingSend(const rtc::Message& message_value)
21 : sending_thread(JingleThreadWrapper::current()), 22 : sending_thread(JingleThreadWrapper::current()),
22 message(message_value), 23 message(message_value),
23 done_event(base::WaitableEvent::ResetPolicy::MANUAL, 24 done_event(base::WaitableEvent::ResetPolicy::MANUAL,
24 base::WaitableEvent::InitialState::NOT_SIGNALED) { 25 base::WaitableEvent::InitialState::NOT_SIGNALED) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 rtc::MessageQueueManager::Remove(this); 86 rtc::MessageQueueManager::Remove(this);
86 g_jingle_thread_wrapper.Get().Set(nullptr); 87 g_jingle_thread_wrapper.Get().Set(nullptr);
87 88
88 Clear(nullptr, rtc::MQID_ANY, nullptr); 89 Clear(nullptr, rtc::MQID_ANY, nullptr);
89 } 90 }
90 91
91 void JingleThreadWrapper::WillDestroyCurrentMessageLoop() { 92 void JingleThreadWrapper::WillDestroyCurrentMessageLoop() {
92 delete this; 93 delete this;
93 } 94 }
94 95
95 void JingleThreadWrapper::Post(rtc::MessageHandler* handler, 96 void JingleThreadWrapper::Post(const rtc::Location& posted_from,
97 rtc::MessageHandler* handler,
96 uint32_t message_id, 98 uint32_t message_id,
97 rtc::MessageData* data, 99 rtc::MessageData* data,
98 bool time_sensitive) { 100 bool time_sensitive) {
99 PostTaskInternal(0, handler, message_id, data); 101 PostTaskInternal(posted_from, 0, handler, message_id, data);
100 } 102 }
101 103
102 void JingleThreadWrapper::PostDelayed(int delay_ms, 104 void JingleThreadWrapper::PostDelayed(const rtc::Location& posted_from,
105 int delay_ms,
103 rtc::MessageHandler* handler, 106 rtc::MessageHandler* handler,
104 uint32_t message_id, 107 uint32_t message_id,
105 rtc::MessageData* data) { 108 rtc::MessageData* data) {
106 PostTaskInternal(delay_ms, handler, message_id, data); 109 PostTaskInternal(posted_from, delay_ms, handler, message_id, data);
107 } 110 }
108 111
109 void JingleThreadWrapper::Clear(rtc::MessageHandler* handler, 112 void JingleThreadWrapper::Clear(rtc::MessageHandler* handler,
110 uint32_t id, 113 uint32_t id,
111 rtc::MessageList* removed) { 114 rtc::MessageList* removed) {
112 base::AutoLock auto_lock(lock_); 115 base::AutoLock auto_lock(lock_);
113 116
114 for (MessagesQueue::iterator it = messages_.begin(); 117 for (MessagesQueue::iterator it = messages_.begin();
115 it != messages_.end();) { 118 it != messages_.end();) {
116 MessagesQueue::iterator next = it; 119 MessagesQueue::iterator next = it;
(...skipping 23 matching lines...) Expand all
140 delete (*it)->message.pdata; 143 delete (*it)->message.pdata;
141 } 144 }
142 (*it)->done_event.Signal(); 145 (*it)->done_event.Signal();
143 pending_send_messages_.erase(it); 146 pending_send_messages_.erase(it);
144 } 147 }
145 148
146 it = next; 149 it = next;
147 } 150 }
148 } 151 }
149 152
150 void JingleThreadWrapper::Send(rtc::MessageHandler* handler, 153 void JingleThreadWrapper::Dispatch(rtc::Message* message) {
154 TRACE_EVENT2("webrtc", "JingleThreadWrapper::Dispatch", "src_file_and_line",
155 message->posted_from.file_and_line(), "src_func",
156 message->posted_from.function_name());
157 message->phandler->OnMessage(message);
158 }
159
160 void JingleThreadWrapper::Send(const rtc::Location& posted_from,
161 rtc::MessageHandler* handler,
151 uint32_t id, 162 uint32_t id,
152 rtc::MessageData* data) { 163 rtc::MessageData* data) {
153 if (fStop_) 164 if (fStop_)
154 return; 165 return;
155 166
156 JingleThreadWrapper* current_thread = JingleThreadWrapper::current(); 167 JingleThreadWrapper* current_thread = JingleThreadWrapper::current();
157 DCHECK(current_thread != nullptr) << "Send() can be called only from a " 168 DCHECK(current_thread != nullptr) << "Send() can be called only from a "
158 "thread that has JingleThreadWrapper."; 169 "thread that has JingleThreadWrapper.";
159 170
160 rtc::Message message; 171 rtc::Message message;
172 message.posted_from = posted_from;
161 message.phandler = handler; 173 message.phandler = handler;
162 message.message_id = id; 174 message.message_id = id;
163 message.pdata = data; 175 message.pdata = data;
164 176
165 if (current_thread == this) { 177 if (current_thread == this) {
166 handler->OnMessage(&message); 178 Dispatch(&message);
167 return; 179 return;
168 } 180 }
169 181
170 // Send message from a thread different than |this|. 182 // Send message from a thread different than |this|.
171 183
172 // Allow inter-thread send only from threads that have 184 // Allow inter-thread send only from threads that have
173 // |send_allowed_| flag set. 185 // |send_allowed_| flag set.
174 DCHECK(current_thread->send_allowed_) << "Send()'ing synchronous " 186 DCHECK(current_thread->send_allowed_) << "Send()'ing synchronous "
175 "messages is not allowed from the current thread."; 187 "messages is not allowed from the current thread.";
176 188
(...skipping 30 matching lines...) Expand all
207 if (!pending_send_messages_.empty()) { 219 if (!pending_send_messages_.empty()) {
208 pending_send = pending_send_messages_.front(); 220 pending_send = pending_send_messages_.front();
209 pending_send_messages_.pop_front(); 221 pending_send_messages_.pop_front();
210 } else { 222 } else {
211 // Reset the event while |lock_| is still locked. 223 // Reset the event while |lock_| is still locked.
212 pending_send_event_.Reset(); 224 pending_send_event_.Reset();
213 break; 225 break;
214 } 226 }
215 } 227 }
216 if (pending_send) { 228 if (pending_send) {
217 pending_send->message.phandler->OnMessage(&pending_send->message); 229 Dispatch(&pending_send->message);
218 pending_send->done_event.Signal(); 230 pending_send->done_event.Signal();
219 } 231 }
220 } 232 }
221 } 233 }
222 234
223 void JingleThreadWrapper::PostTaskInternal(int delay_ms, 235 void JingleThreadWrapper::PostTaskInternal(const rtc::Location& posted_from,
236 int delay_ms,
224 rtc::MessageHandler* handler, 237 rtc::MessageHandler* handler,
225 uint32_t message_id, 238 uint32_t message_id,
226 rtc::MessageData* data) { 239 rtc::MessageData* data) {
227 int task_id; 240 int task_id;
228 rtc::Message message; 241 rtc::Message message;
242 message.posted_from = posted_from;
229 message.phandler = handler; 243 message.phandler = handler;
230 message.message_id = message_id; 244 message.message_id = message_id;
231 message.pdata = data; 245 message.pdata = data;
232 { 246 {
233 base::AutoLock auto_lock(lock_); 247 base::AutoLock auto_lock(lock_);
234 task_id = ++last_task_id_; 248 task_id = ++last_task_id_;
235 messages_.insert(std::pair<int, rtc::Message>(task_id, message)); 249 messages_.insert(std::pair<int, rtc::Message>(task_id, message));
236 } 250 }
237 251
238 if (delay_ms <= 0) { 252 if (delay_ms <= 0) {
(...skipping 19 matching lines...) Expand all
258 message = it->second; 272 message = it->second;
259 messages_.erase(it); 273 messages_.erase(it);
260 } 274 }
261 } 275 }
262 276
263 if (have_message) { 277 if (have_message) {
264 if (message.message_id == rtc::MQID_DISPOSE) { 278 if (message.message_id == rtc::MQID_DISPOSE) {
265 DCHECK(message.phandler == nullptr); 279 DCHECK(message.phandler == nullptr);
266 delete message.pdata; 280 delete message.pdata;
267 } else { 281 } else {
268 message.phandler->OnMessage(&message); 282 Dispatch(&message);
269 } 283 }
270 } 284 }
271 } 285 }
272 286
273 // All methods below are marked as not reached. See comments in the 287 // All methods below are marked as not reached. See comments in the
274 // header for more details. 288 // header for more details.
275 void JingleThreadWrapper::Quit() { 289 void JingleThreadWrapper::Quit() {
276 NOTREACHED(); 290 NOTREACHED();
277 } 291 }
278 292
279 bool JingleThreadWrapper::IsQuitting() { 293 bool JingleThreadWrapper::IsQuitting() {
280 NOTREACHED(); 294 NOTREACHED();
281 return false; 295 return false;
282 } 296 }
283 297
284 void JingleThreadWrapper::Restart() { 298 void JingleThreadWrapper::Restart() {
285 NOTREACHED(); 299 NOTREACHED();
286 } 300 }
287 301
288 bool JingleThreadWrapper::Get(rtc::Message*, int, bool) { 302 bool JingleThreadWrapper::Get(rtc::Message*, int, bool) {
289 NOTREACHED(); 303 NOTREACHED();
290 return false; 304 return false;
291 } 305 }
292 306
293 bool JingleThreadWrapper::Peek(rtc::Message*, int) { 307 bool JingleThreadWrapper::Peek(rtc::Message*, int) {
294 NOTREACHED(); 308 NOTREACHED();
295 return false; 309 return false;
296 } 310 }
297 311
298 void JingleThreadWrapper::PostAt(uint32_t, 312 void JingleThreadWrapper::PostAt(const rtc::Location& posted_from,
313 uint32_t,
299 rtc::MessageHandler*, 314 rtc::MessageHandler*,
300 uint32_t, 315 uint32_t,
301 rtc::MessageData*) { 316 rtc::MessageData*) {
302 NOTREACHED(); 317 NOTREACHED();
303 } 318 }
304 319
305 void JingleThreadWrapper::Dispatch(rtc::Message* message) {
306 NOTREACHED();
307 }
308
309 void JingleThreadWrapper::ReceiveSends() { 320 void JingleThreadWrapper::ReceiveSends() {
310 NOTREACHED(); 321 NOTREACHED();
311 } 322 }
312 323
313 int JingleThreadWrapper::GetDelay() { 324 int JingleThreadWrapper::GetDelay() {
314 NOTREACHED(); 325 NOTREACHED();
315 return 0; 326 return 0;
316 } 327 }
317 328
318 void JingleThreadWrapper::Stop() { 329 void JingleThreadWrapper::Stop() {
319 NOTREACHED(); 330 NOTREACHED();
320 } 331 }
321 332
322 void JingleThreadWrapper::Run() { 333 void JingleThreadWrapper::Run() {
323 NOTREACHED(); 334 NOTREACHED();
324 } 335 }
325 336
326 } // namespace jingle_glue 337 } // namespace jingle_glue
OLDNEW
« no previous file with comments | « jingle/glue/thread_wrapper.h ('k') | jingle/glue/thread_wrapper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698