Skip to content

Commit d515d9d

Browse files
philnaperezdc
authored andcommitted
[GStreamer][WebRTC] Improve DataChannel logs https://bugs.webkit.org/show_bug.cgi?id=253954 Reviewed by Xabier Rodriguez-Calvar. The logs now mention one unique identifier per data-channel. This works only when building against GStreamer 1.22 though because it requires new macros. * Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp: (WebCore::GStreamerDataChannelHandler::GStreamerDataChannelHandler): (WebCore::GStreamerDataChannelHandler::~GStreamerDataChannelHandler): (WebCore::GStreamerDataChannelHandler::setClient): (WebCore::GStreamerDataChannelHandler::sendStringData): (WebCore::GStreamerDataChannelHandler::sendRawData): (WebCore::GStreamerDataChannelHandler::close): (WebCore::GStreamerDataChannelHandler::checkState): (WebCore::GStreamerDataChannelHandler::bufferedAmountChanged): (WebCore::GStreamerDataChannelHandler::onMessageData): (WebCore::GStreamerDataChannelHandler::onMessageString): (WebCore::GStreamerDataChannelHandler::onError): (WebCore::GStreamerDataChannelHandler::onClose): * Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h: Canonical link: https://commits.webkit.org/261683@main
1 parent dbe13ed commit d515d9d

File tree

2 files changed

+48
-25
lines changed

2 files changed

+48
-25
lines changed

Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@
3434
GST_DEBUG_CATEGORY(webkit_webrtc_data_channel_debug);
3535
#define GST_CAT_DEFAULT webkit_webrtc_data_channel_debug
3636

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+
3747
namespace WebCore {
3848

3949
GUniquePtr<GstStructure> GStreamerDataChannelHandler::fromRTCDataChannelInit(const RTCDataChannelInit& options)
@@ -74,12 +84,15 @@ GUniquePtr<GstStructure> GStreamerDataChannelHandler::fromRTCDataChannelInit(con
7484
GStreamerDataChannelHandler::GStreamerDataChannelHandler(GRefPtr<GstWebRTCDataChannel>&& channel)
7585
: m_channel(WTFMove(channel))
7686
{
87+
static Atomic<uint64_t> nChannel = 0;
88+
m_channelId = makeString("webkit-webrtc-data-channel-", nChannel.exchangeAdd(1));
89+
7790
ASSERT(m_channel);
7891
static std::once_flag debugRegisteredFlag;
7992
std::call_once(debugRegisteredFlag, [] {
8093
GST_DEBUG_CATEGORY_INIT(webkit_webrtc_data_channel_debug, "webkitwebrtcdatachannel", 0, "WebKit WebRTC data-channel");
8194
});
82-
GST_DEBUG("New GStreamerDataChannelHandler for channel %p", m_channel.get());
95+
DC_DEBUG("New GStreamerDataChannelHandler for channel %p", m_channel.get());
8396

8497
{
8598
Locker locker { m_clientLock };
@@ -108,7 +121,7 @@ GStreamerDataChannelHandler::GStreamerDataChannelHandler(GRefPtr<GstWebRTCDataCh
108121

109122
GStreamerDataChannelHandler::~GStreamerDataChannelHandler()
110123
{
111-
GST_DEBUG("Deleting GStreamerDataChannelHandler for channel %p", m_channel.get());
124+
DC_DEBUG("Deleting GStreamerDataChannelHandler for channel %p", m_channel.get());
112125
if (m_channel)
113126
g_signal_handlers_disconnect_by_data(m_channel.get(), this);
114127
}
@@ -142,26 +155,26 @@ void GStreamerDataChannelHandler::setClient(RTCDataChannelHandlerClient& client,
142155
{
143156
Locker locker { m_clientLock };
144157
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());
146159
m_client = client;
147160
m_contextIdentifier = contextIdentifier;
148161

149162
checkState();
150163

151164
for (auto& message : m_pendingMessages) {
152165
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());
154167
client.didReceiveRawData(data->makeContiguous()->data(), data->size());
155168
}, [&](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());
158171
client.didReceiveStringData(text);
159172
}, [&](StateChange stateChange) {
160173
if (stateChange.error) {
161174
if (auto rtcError = toRTCError(*stateChange.error))
162175
client.didDetectError(rtcError.releaseNonNull());
163176
}
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());
165178
client.didChangeReadyState(stateChange.state);
166179
});
167180
}
@@ -170,23 +183,23 @@ void GStreamerDataChannelHandler::setClient(RTCDataChannelHandlerClient& client,
170183

171184
bool GStreamerDataChannelHandler::sendStringData(const CString& text)
172185
{
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());
175188
g_signal_emit_by_name(m_channel.get(), "send-string", text.data());
176189
return true;
177190
}
178191

179192
bool GStreamerDataChannelHandler::sendRawData(const uint8_t* data, size_t length)
180193
{
181-
GST_DEBUG("Sending raw data of length: %zu", length);
194+
DC_DEBUG("Sending raw data of length: %zu", length);
182195
auto bytes = adoptGRef(g_bytes_new(data, length));
183196
g_signal_emit_by_name(m_channel.get(), "send-data", bytes.get());
184197
return true;
185198
}
186199

187200
void GStreamerDataChannelHandler::close()
188201
{
189-
GST_DEBUG("Closing channel %p", m_channel.get());
202+
DC_DEBUG("Closing channel %p", m_channel.get());
190203
m_closing = true;
191204

192205
GstWebRTCDataChannelState channelState;
@@ -207,8 +220,11 @@ void GStreamerDataChannelHandler::checkState()
207220
{
208221
ASSERT(m_clientLock.isHeld());
209222

210-
if (!m_channel)
223+
DC_DEBUG("Checking state.");
224+
if (!m_channel) {
225+
DC_DEBUG("No channel.");
211226
return;
227+
}
212228

213229
GstWebRTCDataChannelState channelState;
214230
g_object_get(m_channel.get(), "ready-state", &channelState, nullptr);
@@ -234,20 +250,25 @@ void GStreamerDataChannelHandler::checkState()
234250
}
235251

236252
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());
238254
m_pendingMessages.append(StateChange { state, { } });
239255
return;
240256
}
241257

242258
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());
244260
return;
245261
}
246262

247-
if (!*m_client)
263+
if (!*m_client) {
264+
DC_DEBUG("Client is empty.");
248265
return;
266+
}
249267

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
251272
postTask([client = m_client, state] {
252273
if (!*client) {
253274
GST_DEBUG("No client");
@@ -271,12 +292,12 @@ void GStreamerDataChannelHandler::bufferedAmountChanged()
271292
g_object_get(m_channel.get(), "buffered-amount", &currentBufferedAmount, nullptr);
272293

273294
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);
275296

276297
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());
278299
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());
280301
return;
281302
}
282303

@@ -296,7 +317,7 @@ void GStreamerDataChannelHandler::bufferedAmountChanged()
296317
void GStreamerDataChannelHandler::onMessageData(GBytes* bytes)
297318
{
298319
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);
300321
Locker locker { m_clientLock };
301322

302323
if (!m_client) {
@@ -320,17 +341,17 @@ void GStreamerDataChannelHandler::onMessageString(const char* message)
320341
{
321342
Locker locker { m_clientLock };
322343

323-
GST_TRACE("Incoming string: %s", message);
344+
DC_TRACE("Incoming string: %s", message);
324345
if (!m_client) {
325-
GST_DEBUG("No client yet, keeping as buffered message");
346+
DC_DEBUG("No client yet, keeping as buffered message");
326347
m_pendingMessages.append(String::fromUTF8(message));
327348
return;
328349
}
329350

330351
if (!*m_client)
331352
return;
332353

333-
GST_DEBUG("Dispatching string of size %zu", strlen(message));
354+
DC_DEBUG("Dispatching string of size %zu", strlen(message));
334355
postTask([client = m_client, string = String::fromUTF8(message)] {
335356
if (!*client)
336357
return;
@@ -345,7 +366,7 @@ void GStreamerDataChannelHandler::onError(GError* error)
345366
if (!m_client)
346367
return;
347368

348-
GST_WARNING("Got data-channel error %s", error->message);
369+
DC_WARNING("Got data-channel error %s", error->message);
349370
GUniquePtr<GError> errorCopy(g_error_copy(error));
350371
postTask([client = m_client, error = WTFMove(errorCopy)] {
351372
if (!client || !error)
@@ -361,7 +382,7 @@ void GStreamerDataChannelHandler::onError(GError* error)
361382
void GStreamerDataChannelHandler::onClose()
362383
{
363384
Locker locker { m_clientLock };
364-
GST_DEBUG("Channel %p closed!", m_channel.get());
385+
DC_DEBUG("Channel %p closed!", m_channel.get());
365386
checkState();
366387
}
367388

Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ class GStreamerDataChannelHandler final : public RTCDataChannelHandler {
8484

8585
std::optional<size_t> m_cachedBufferedAmount;
8686
bool m_closing { false };
87+
88+
String m_channelId;
8789
};
8890

8991
} // namespace WebCore

0 commit comments

Comments
 (0)