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

Side by Side Diff: webrtc/base/messagequeue.h

Issue 2019423006: Adding more detail to MessageQueue::Dispatch logging. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: 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
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 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 10
11 #ifndef WEBRTC_BASE_MESSAGEQUEUE_H_ 11 #ifndef WEBRTC_BASE_MESSAGEQUEUE_H_
12 #define WEBRTC_BASE_MESSAGEQUEUE_H_ 12 #define WEBRTC_BASE_MESSAGEQUEUE_H_
13 13
14 #include <string.h> 14 #include <string.h>
15 15
16 #include <algorithm> 16 #include <algorithm>
17 #include <list> 17 #include <list>
18 #include <memory> 18 #include <memory>
19 #include <queue> 19 #include <queue>
20 #include <vector> 20 #include <vector>
21 21
22 #include "webrtc/base/basictypes.h" 22 #include "webrtc/base/basictypes.h"
23 #include "webrtc/base/constructormagic.h" 23 #include "webrtc/base/constructormagic.h"
24 #include "webrtc/base/criticalsection.h" 24 #include "webrtc/base/criticalsection.h"
25 #include "webrtc/base/location.h"
25 #include "webrtc/base/messagehandler.h" 26 #include "webrtc/base/messagehandler.h"
26 #include "webrtc/base/scoped_ref_ptr.h" 27 #include "webrtc/base/scoped_ref_ptr.h"
27 #include "webrtc/base/sharedexclusivelock.h" 28 #include "webrtc/base/sharedexclusivelock.h"
28 #include "webrtc/base/sigslot.h" 29 #include "webrtc/base/sigslot.h"
29 #include "webrtc/base/socketserver.h" 30 #include "webrtc/base/socketserver.h"
30 #include "webrtc/base/timeutils.h" 31 #include "webrtc/base/timeutils.h"
31 #include "webrtc/base/thread_annotations.h" 32 #include "webrtc/base/thread_annotations.h"
32 33
33 namespace rtc { 34 namespace rtc {
34 35
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 private: 126 private:
126 T* data_; 127 T* data_;
127 }; 128 };
128 129
129 const uint32_t MQID_ANY = static_cast<uint32_t>(-1); 130 const uint32_t MQID_ANY = static_cast<uint32_t>(-1);
130 const uint32_t MQID_DISPOSE = static_cast<uint32_t>(-2); 131 const uint32_t MQID_DISPOSE = static_cast<uint32_t>(-2);
131 132
132 // No destructor 133 // No destructor
133 134
134 struct Message { 135 struct Message {
135 Message() { 136 Message()
136 memset(this, 0, sizeof(*this)); 137 : phandler(nullptr), message_id(0), pdata(nullptr), ts_sensitive(0) {}
137 }
138 inline bool Match(MessageHandler* handler, uint32_t id) const { 138 inline bool Match(MessageHandler* handler, uint32_t id) const {
139 return (handler == NULL || handler == phandler) 139 return (handler == NULL || handler == phandler)
140 && (id == MQID_ANY || id == message_id); 140 && (id == MQID_ANY || id == message_id);
141 } 141 }
142 Location posted_from;
142 MessageHandler *phandler; 143 MessageHandler *phandler;
143 uint32_t message_id; 144 uint32_t message_id;
144 MessageData *pdata; 145 MessageData *pdata;
145 int64_t ts_sensitive; 146 int64_t ts_sensitive;
146 }; 147 };
147 148
148 typedef std::list<Message> MessageList; 149 typedef std::list<Message> MessageList;
149 150
150 // DelayedMessage goes into a priority queue, sorted by trigger time. Messages 151 // DelayedMessage goes into a priority queue, sorted by trigger time. Messages
151 // with the same trigger time are processed in num_ (FIFO) order. 152 // with the same trigger time are processed in num_ (FIFO) order.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 virtual bool IsQuitting(); 198 virtual bool IsQuitting();
198 virtual void Restart(); 199 virtual void Restart();
199 200
200 // Get() will process I/O until: 201 // Get() will process I/O until:
201 // 1) A message is available (returns true) 202 // 1) A message is available (returns true)
202 // 2) cmsWait seconds have elapsed (returns false) 203 // 2) cmsWait seconds have elapsed (returns false)
203 // 3) Stop() is called (returns false) 204 // 3) Stop() is called (returns false)
204 virtual bool Get(Message *pmsg, int cmsWait = kForever, 205 virtual bool Get(Message *pmsg, int cmsWait = kForever,
205 bool process_io = true); 206 bool process_io = true);
206 virtual bool Peek(Message *pmsg, int cmsWait = 0); 207 virtual bool Peek(Message *pmsg, int cmsWait = 0);
207 virtual void Post(MessageHandler* phandler, 208 virtual void Post(const Location& posted_from,
209 MessageHandler* phandler,
208 uint32_t id = 0, 210 uint32_t id = 0,
209 MessageData* pdata = NULL, 211 MessageData* pdata = NULL,
210 bool time_sensitive = false); 212 bool time_sensitive = false);
211 virtual void PostDelayed(int cmsDelay, 213 virtual void PostDelayed(const Location& posted_from,
214 int cmsDelay,
212 MessageHandler* phandler, 215 MessageHandler* phandler,
213 uint32_t id = 0, 216 uint32_t id = 0,
214 MessageData* pdata = NULL); 217 MessageData* pdata = NULL);
215 virtual void PostAt(int64_t tstamp, 218 virtual void PostAt(const Location& posted_from,
219 int64_t tstamp,
216 MessageHandler* phandler, 220 MessageHandler* phandler,
217 uint32_t id = 0, 221 uint32_t id = 0,
218 MessageData* pdata = NULL); 222 MessageData* pdata = NULL);
219 // TODO(honghaiz): Remove this when all the dependencies are removed. 223 // TODO(honghaiz): Remove this when all the dependencies are removed.
220 virtual void PostAt(uint32_t tstamp, 224 virtual void PostAt(const Location& posted_from,
225 uint32_t tstamp,
221 MessageHandler* phandler, 226 MessageHandler* phandler,
222 uint32_t id = 0, 227 uint32_t id = 0,
223 MessageData* pdata = NULL); 228 MessageData* pdata = NULL);
224 virtual void Clear(MessageHandler* phandler, 229 virtual void Clear(MessageHandler* phandler,
225 uint32_t id = MQID_ANY, 230 uint32_t id = MQID_ANY,
226 MessageList* removed = NULL); 231 MessageList* removed = NULL);
227 virtual void Dispatch(Message *pmsg); 232 virtual void Dispatch(Message *pmsg);
228 virtual void ReceiveSends(); 233 virtual void ReceiveSends();
229 234
230 // Amount of time until the next message can be retrieved 235 // Amount of time until the next message can be retrieved
231 virtual int GetDelay(); 236 virtual int GetDelay();
232 237
233 bool empty() const { return size() == 0u; } 238 bool empty() const { return size() == 0u; }
234 size_t size() const { 239 size_t size() const {
235 CritScope cs(&crit_); // msgq_.size() is not thread safe. 240 CritScope cs(&crit_); // msgq_.size() is not thread safe.
236 return msgq_.size() + dmsgq_.size() + (fPeekKeep_ ? 1u : 0u); 241 return msgq_.size() + dmsgq_.size() + (fPeekKeep_ ? 1u : 0u);
237 } 242 }
238 243
239 // Internally posts a message which causes the doomed object to be deleted 244 // Internally posts a message which causes the doomed object to be deleted
240 template<class T> void Dispose(T* doomed) { 245 template<class T> void Dispose(T* doomed) {
241 if (doomed) { 246 if (doomed) {
242 Post(NULL, MQID_DISPOSE, new DisposeData<T>(doomed)); 247 Post(FROM_HERE, NULL, MQID_DISPOSE, new DisposeData<T>(doomed));
243 } 248 }
244 } 249 }
245 250
246 // When this signal is sent out, any references to this queue should 251 // When this signal is sent out, any references to this queue should
247 // no longer be used. 252 // no longer be used.
248 sigslot::signal0<> SignalQueueDestroyed; 253 sigslot::signal0<> SignalQueueDestroyed;
249 254
250 protected: 255 protected:
251 class PriorityQueue : public std::priority_queue<DelayedMessage> { 256 class PriorityQueue : public std::priority_queue<DelayedMessage> {
252 public: 257 public:
253 container_type& container() { return c; } 258 container_type& container() { return c; }
254 void reheap() { make_heap(c.begin(), c.end(), comp); } 259 void reheap() { make_heap(c.begin(), c.end(), comp); }
255 }; 260 };
256 261
257 void DoDelayPost(int cmsDelay, 262 void DoDelayPost(const Location& posted_from,
263 int cmsDelay,
258 int64_t tstamp, 264 int64_t tstamp,
259 MessageHandler* phandler, 265 MessageHandler* phandler,
260 uint32_t id, 266 uint32_t id,
261 MessageData* pdata); 267 MessageData* pdata);
262 268
263 // Perform initialization, subclasses must call this from their constructor 269 // Perform initialization, subclasses must call this from their constructor
264 // if false was passed as init_queue to the MessageQueue constructor. 270 // if false was passed as init_queue to the MessageQueue constructor.
265 void DoInit(); 271 void DoInit();
266 272
267 // Perform cleanup, subclasses that override Clear must call this from the 273 // Perform cleanup, subclasses that override Clear must call this from the
(...skipping 18 matching lines...) Expand all
286 // Used if SocketServer ownership lies with |this|. 292 // Used if SocketServer ownership lies with |this|.
287 std::unique_ptr<SocketServer> own_ss_; 293 std::unique_ptr<SocketServer> own_ss_;
288 SharedExclusiveLock ss_lock_; 294 SharedExclusiveLock ss_lock_;
289 295
290 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(MessageQueue); 296 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(MessageQueue);
291 }; 297 };
292 298
293 } // namespace rtc 299 } // namespace rtc
294 300
295 #endif // WEBRTC_BASE_MESSAGEQUEUE_H_ 301 #endif // WEBRTC_BASE_MESSAGEQUEUE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698