34
34
GST_DEBUG_CATEGORY (webkit_webrtc_data_channel_debug);
35
35
#define GST_CAT_DEFAULT webkit_webrtc_data_channel_debug
36
36
37
+ #if GST_CHECK_VERSION(1, 22, 0)
38
+ #define DC_DEBUG (...) GST_DEBUG_ID(m_channelId.ascii().data(), __VA_ARGS__)
39
+ #define DC_TRACE (...) GST_TRACE_ID(m_channelId.ascii().data(), __VA_ARGS__)
40
+ #define DC_WARNING (...) GST_WARNING_ID(m_channelId.ascii().data(), __VA_ARGS__)
41
+ #else
42
+ #define DC_DEBUG (...) GST_DEBUG(__VA_ARGS__)
43
+ #define DC_TRACE (...) GST_TRACE(__VA_ARGS__)
44
+ #define DC_WARNING (...) GST_WARNING(__VA_ARGS__)
45
+ #endif
46
+
37
47
namespace WebCore {
38
48
39
49
GUniquePtr<GstStructure> GStreamerDataChannelHandler::fromRTCDataChannelInit (const RTCDataChannelInit& options)
@@ -74,12 +84,15 @@ GUniquePtr<GstStructure> GStreamerDataChannelHandler::fromRTCDataChannelInit(con
74
84
GStreamerDataChannelHandler::GStreamerDataChannelHandler (GRefPtr<GstWebRTCDataChannel>&& channel)
75
85
: m_channel(WTFMove(channel))
76
86
{
87
+ static Atomic<uint64_t > nChannel = 0 ;
88
+ m_channelId = makeString (" webkit-webrtc-data-channel-" , nChannel.exchangeAdd (1 ));
89
+
77
90
ASSERT (m_channel);
78
91
static std::once_flag debugRegisteredFlag;
79
92
std::call_once (debugRegisteredFlag, [] {
80
93
GST_DEBUG_CATEGORY_INIT (webkit_webrtc_data_channel_debug, " webkitwebrtcdatachannel" , 0 , " WebKit WebRTC data-channel" );
81
94
});
82
- GST_DEBUG (" New GStreamerDataChannelHandler for channel %p" , m_channel.get ());
95
+ DC_DEBUG (" New GStreamerDataChannelHandler for channel %p" , m_channel.get ());
83
96
84
97
{
85
98
Locker locker { m_clientLock };
@@ -108,7 +121,7 @@ GStreamerDataChannelHandler::GStreamerDataChannelHandler(GRefPtr<GstWebRTCDataCh
108
121
109
122
GStreamerDataChannelHandler::~GStreamerDataChannelHandler ()
110
123
{
111
- GST_DEBUG (" Deleting GStreamerDataChannelHandler for channel %p" , m_channel.get ());
124
+ DC_DEBUG (" Deleting GStreamerDataChannelHandler for channel %p" , m_channel.get ());
112
125
if (m_channel)
113
126
g_signal_handlers_disconnect_by_data (m_channel.get (), this );
114
127
}
@@ -142,26 +155,26 @@ void GStreamerDataChannelHandler::setClient(RTCDataChannelHandlerClient& client,
142
155
{
143
156
Locker locker { m_clientLock };
144
157
ASSERT (!m_client);
145
- GST_DEBUG (" Setting client on channel %p" , m_channel.get ());
158
+ DC_DEBUG (" Setting client on channel %p" , m_channel.get ());
146
159
m_client = client;
147
160
m_contextIdentifier = contextIdentifier;
148
161
149
162
checkState ();
150
163
151
164
for (auto & message : m_pendingMessages) {
152
165
switchOn (message, [&](Ref<FragmentedSharedBuffer>& data) {
153
- GST_DEBUG (" Notifying queued raw data (size: %zu)" , data->size ());
166
+ DC_DEBUG (" Notifying queued raw data (size: %zu)" , data->size ());
154
167
client.didReceiveRawData (data->makeContiguous ()->data (), data->size ());
155
168
}, [&](String& text) {
156
- GST_DEBUG (" Notifying queued string of size %d" , text.sizeInBytes ());
157
- GST_TRACE (" Notifying queued string %s" , text.ascii ().data ());
169
+ DC_DEBUG (" Notifying queued string of size %d" , text.sizeInBytes ());
170
+ DC_TRACE (" Notifying queued string %s" , text.ascii ().data ());
158
171
client.didReceiveStringData (text);
159
172
}, [&](StateChange stateChange) {
160
173
if (stateChange.error ) {
161
174
if (auto rtcError = toRTCError (*stateChange.error ))
162
175
client.didDetectError (rtcError.releaseNonNull ());
163
176
}
164
- GST_DEBUG (" Dispatching state change to %d on channel %p" , static_cast <int >(stateChange.state ), m_channel.get ());
177
+ DC_DEBUG (" Dispatching state change to %d on channel %p" , static_cast <int >(stateChange.state ), m_channel.get ());
165
178
client.didChangeReadyState (stateChange.state );
166
179
});
167
180
}
@@ -170,23 +183,23 @@ void GStreamerDataChannelHandler::setClient(RTCDataChannelHandlerClient& client,
170
183
171
184
bool GStreamerDataChannelHandler::sendStringData (const CString& text)
172
185
{
173
- GST_DEBUG (" Sending string of length: %zu" , text.length ());
174
- GST_TRACE (" Sending string %s" , text.data ());
186
+ DC_DEBUG (" Sending string of length: %zu" , text.length ());
187
+ DC_TRACE (" Sending string %s" , text.data ());
175
188
g_signal_emit_by_name (m_channel.get (), " send-string" , text.data ());
176
189
return true ;
177
190
}
178
191
179
192
bool GStreamerDataChannelHandler::sendRawData (const uint8_t * data, size_t length)
180
193
{
181
- GST_DEBUG (" Sending raw data of length: %zu" , length);
194
+ DC_DEBUG (" Sending raw data of length: %zu" , length);
182
195
auto bytes = adoptGRef (g_bytes_new (data, length));
183
196
g_signal_emit_by_name (m_channel.get (), " send-data" , bytes.get ());
184
197
return true ;
185
198
}
186
199
187
200
void GStreamerDataChannelHandler::close ()
188
201
{
189
- GST_DEBUG (" Closing channel %p" , m_channel.get ());
202
+ DC_DEBUG (" Closing channel %p" , m_channel.get ());
190
203
m_closing = true ;
191
204
192
205
GstWebRTCDataChannelState channelState;
@@ -207,8 +220,11 @@ void GStreamerDataChannelHandler::checkState()
207
220
{
208
221
ASSERT (m_clientLock.isHeld ());
209
222
210
- if (!m_channel)
223
+ DC_DEBUG (" Checking state." );
224
+ if (!m_channel) {
225
+ DC_DEBUG (" No channel." );
211
226
return ;
227
+ }
212
228
213
229
GstWebRTCDataChannelState channelState;
214
230
g_object_get (m_channel.get (), " ready-state" , &channelState, nullptr );
@@ -234,20 +250,25 @@ void GStreamerDataChannelHandler::checkState()
234
250
}
235
251
236
252
if (!m_client) {
237
- GST_DEBUG (" No client yet on channel %p, queueing state" , m_channel.get ());
253
+ DC_DEBUG (" No client yet on channel %p, queueing state" , m_channel.get ());
238
254
m_pendingMessages.append (StateChange { state, { } });
239
255
return ;
240
256
}
241
257
242
258
if (channelState == GST_WEBRTC_DATA_CHANNEL_STATE_OPEN && m_closing) {
243
- GST_DEBUG (" Ignoring open state notification on channel %p because it was pending to be closed" , m_channel.get ());
259
+ DC_DEBUG (" Ignoring open state notification on channel %p because it was pending to be closed" , m_channel.get ());
244
260
return ;
245
261
}
246
262
247
- if (!*m_client)
263
+ if (!*m_client) {
264
+ DC_DEBUG (" Client is empty." );
248
265
return ;
266
+ }
249
267
250
- GST_DEBUG (" Dispatching state change to %d on channel %p" , static_cast <int >(state), m_channel.get ());
268
+ #ifndef GST_DISABLE_GST_DEBUG
269
+ GUniquePtr<char > stateString (g_enum_to_string (GST_TYPE_WEBRTC_DATA_CHANNEL_STATE, channelState));
270
+ DC_DEBUG (" Dispatching state change to %s on channel %p" , stateString.get (), m_channel.get ());
271
+ #endif
251
272
postTask ([client = m_client, state] {
252
273
if (!*client) {
253
274
GST_DEBUG (" No client" );
@@ -271,12 +292,12 @@ void GStreamerDataChannelHandler::bufferedAmountChanged()
271
292
g_object_get (m_channel.get (), " buffered-amount" , ¤tBufferedAmount, nullptr );
272
293
273
294
auto bufferedAmount = static_cast <size_t >(currentBufferedAmount);
274
- GST_DEBUG (" New buffered amount on channel %p: %" G_GSIZE_FORMAT " old: %" G_GSIZE_FORMAT, m_channel.get (), bufferedAmount, m_cachedBufferedAmount ? *m_cachedBufferedAmount : -1 );
295
+ DC_DEBUG (" New buffered amount on channel %p: %" G_GSIZE_FORMAT " old: %" G_GSIZE_FORMAT, m_channel.get (), bufferedAmount, m_cachedBufferedAmount ? *m_cachedBufferedAmount : -1 );
275
296
276
297
if (m_cachedBufferedAmount && (*m_cachedBufferedAmount >= bufferedAmount)) {
277
- GST_DEBUG (" Buffered amount getting low on channel %p" , m_channel.get ());
298
+ DC_DEBUG (" Buffered amount getting low on channel %p" , m_channel.get ());
278
299
if (!m_client) {
279
- GST_DEBUG (" No client yet on channel %p" , m_channel.get ());
300
+ DC_DEBUG (" No client yet on channel %p" , m_channel.get ());
280
301
return ;
281
302
}
282
303
@@ -296,7 +317,7 @@ void GStreamerDataChannelHandler::bufferedAmountChanged()
296
317
void GStreamerDataChannelHandler::onMessageData (GBytes* bytes)
297
318
{
298
319
auto size = g_bytes_get_size (bytes);
299
- GST_DEBUG (" Incoming data of size: %zu" , size);
320
+ DC_DEBUG (" Incoming data of size: %zu" , size);
300
321
Locker locker { m_clientLock };
301
322
302
323
if (!m_client) {
@@ -320,17 +341,17 @@ void GStreamerDataChannelHandler::onMessageString(const char* message)
320
341
{
321
342
Locker locker { m_clientLock };
322
343
323
- GST_TRACE (" Incoming string: %s" , message);
344
+ DC_TRACE (" Incoming string: %s" , message);
324
345
if (!m_client) {
325
- GST_DEBUG (" No client yet, keeping as buffered message" );
346
+ DC_DEBUG (" No client yet, keeping as buffered message" );
326
347
m_pendingMessages.append (String::fromUTF8 (message));
327
348
return ;
328
349
}
329
350
330
351
if (!*m_client)
331
352
return ;
332
353
333
- GST_DEBUG (" Dispatching string of size %zu" , strlen (message));
354
+ DC_DEBUG (" Dispatching string of size %zu" , strlen (message));
334
355
postTask ([client = m_client, string = String::fromUTF8 (message)] {
335
356
if (!*client)
336
357
return ;
@@ -345,7 +366,7 @@ void GStreamerDataChannelHandler::onError(GError* error)
345
366
if (!m_client)
346
367
return ;
347
368
348
- GST_WARNING (" Got data-channel error %s" , error->message );
369
+ DC_WARNING (" Got data-channel error %s" , error->message );
349
370
GUniquePtr<GError> errorCopy (g_error_copy (error));
350
371
postTask ([client = m_client, error = WTFMove (errorCopy)] {
351
372
if (!client || !error)
@@ -361,7 +382,7 @@ void GStreamerDataChannelHandler::onError(GError* error)
361
382
void GStreamerDataChannelHandler::onClose ()
362
383
{
363
384
Locker locker { m_clientLock };
364
- GST_DEBUG (" Channel %p closed!" , m_channel.get ());
385
+ DC_DEBUG (" Channel %p closed!" , m_channel.get ());
365
386
checkState ();
366
387
}
367
388
0 commit comments