Title: [273329] trunk/Source/WebCore
- Revision
- 273329
- Author
- [email protected]
- Date
- 2021-02-23 12:09:56 -0800 (Tue, 23 Feb 2021)
Log Message
Make system console logging synchronous
https://bugs.webkit.org/show_bug.cgi?id=222279
Reviewed by Alex Christensen.
Previously, the logging of messages to the system console was done in
PageConsoleClient::addMessage(), which was called by
Document::addConsoleMessage(). The latter was called in a TaskQueue
callback.
This had the unfortunate side effect of adding a delay from the time a
macro such as ALWAYS_LOG() is called and the text being printed to the
console. This is particularly a problem when logging 3rd party
libraries that don't use the WebKit logging API to log to stderr, such
as GStreamer, since it causes messages logged by WebKit to not be
synchronized with messages logged by 3rd party libraries or logging
systems. As a consequence the usefulness of WebKit logs is noticeably
reduced.
This patch fixes the issue by moving the code logging to the system
console to the synchronous part of Document::didLogMessage(), while
still handling the rest in the m_logMessageTaskQueue callback.
* dom/Document.cpp:
(WebCore::Document::didLogMessage):
* page/PageConsoleClient.cpp:
(WebCore::PageConsoleClient::addMessage):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (273328 => 273329)
--- trunk/Source/WebCore/ChangeLog 2021-02-23 20:04:05 UTC (rev 273328)
+++ trunk/Source/WebCore/ChangeLog 2021-02-23 20:09:56 UTC (rev 273329)
@@ -1,3 +1,33 @@
+2021-02-23 Alicia Boya GarcĂa <[email protected]>
+
+ Make system console logging synchronous
+ https://bugs.webkit.org/show_bug.cgi?id=222279
+
+ Reviewed by Alex Christensen.
+
+ Previously, the logging of messages to the system console was done in
+ PageConsoleClient::addMessage(), which was called by
+ Document::addConsoleMessage(). The latter was called in a TaskQueue
+ callback.
+
+ This had the unfortunate side effect of adding a delay from the time a
+ macro such as ALWAYS_LOG() is called and the text being printed to the
+ console. This is particularly a problem when logging 3rd party
+ libraries that don't use the WebKit logging API to log to stderr, such
+ as GStreamer, since it causes messages logged by WebKit to not be
+ synchronized with messages logged by 3rd party libraries or logging
+ systems. As a consequence the usefulness of WebKit logs is noticeably
+ reduced.
+
+ This patch fixes the issue by moving the code logging to the system
+ console to the synchronous part of Document::didLogMessage(), while
+ still handling the rest in the m_logMessageTaskQueue callback.
+
+ * dom/Document.cpp:
+ (WebCore::Document::didLogMessage):
+ * page/PageConsoleClient.cpp:
+ (WebCore::PageConsoleClient::addMessage):
+
2021-02-23 Chris Fleizach <[email protected]>
AX: VoiceOver incorrectly announces groups in ARIA tree instances as empty
Modified: trunk/Source/WebCore/dom/Document.cpp (273328 => 273329)
--- trunk/Source/WebCore/dom/Document.cpp 2021-02-23 20:04:05 UTC (rev 273328)
+++ trunk/Source/WebCore/dom/Document.cpp 2021-02-23 20:09:56 UTC (rev 273329)
@@ -249,8 +249,10 @@
#include "XPathExpression.h"
#include "XPathNSResolver.h"
#include "XPathResult.h"
+#include <_javascript_Core/ConsoleClient.h>
#include <_javascript_Core/ConsoleMessage.h>
#include <_javascript_Core/RegularExpression.h>
+#include <_javascript_Core/ScriptArguments.h>
#include <_javascript_Core/ScriptCallStack.h>
#include <_javascript_Core/VM.h>
#include <ctime>
@@ -8443,13 +8445,21 @@
if (messageSource == MessageSource::Other)
return;
- m_logMessageTaskQueue.enqueueTask([this, level, messageSource, logMessages = WTFMove(logMessages)]() mutable {
+ auto messageLevel = messageLevelFromWTFLogLevel(level);
+ auto message = makeUnique<Inspector::ConsoleMessage>(messageSource, MessageType::Log, messageLevel, WTFMove(logMessages), mainWorldExecState(frame()));
+
+ if (UNLIKELY(page->settings().logsPageMessagesToSystemConsoleEnabled() || PageConsoleClient::shouldPrintExceptions())) {
+ if (message->type() == MessageType::Image) {
+ ASSERT(message->arguments());
+ JSC::ConsoleClient::printConsoleMessageWithArguments(message->source(), message->type(), message->level(), message->arguments()->globalObject(), *message->arguments());
+ } else
+ JSC::ConsoleClient::printConsoleMessage(message->source(), message->type(), message->level(), message->toString(), message->url(), message->line(), message->column());
+ }
+
+ m_logMessageTaskQueue.enqueueTask([this, message = WTFMove(message)]() mutable {
if (!this->page())
return;
- auto messageLevel = messageLevelFromWTFLogLevel(level);
- auto message = makeUnique<Inspector::ConsoleMessage>(messageSource, MessageType::Log, messageLevel, WTFMove(logMessages), mainWorldExecState(frame()));
-
addConsoleMessage(WTFMove(message));
});
}
Modified: trunk/Source/WebCore/page/PageConsoleClient.cpp (273328 => 273329)
--- trunk/Source/WebCore/page/PageConsoleClient.cpp 2021-02-23 20:04:05 UTC (rev 273328)
+++ trunk/Source/WebCore/page/PageConsoleClient.cpp 2021-02-23 20:09:56 UTC (rev 273329)
@@ -127,14 +127,6 @@
} else
message = consoleMessage->message();
m_page.chrome().client().addMessageToConsole(consoleMessage->source(), consoleMessage->level(), message, consoleMessage->line(), consoleMessage->column(), consoleMessage->url());
-
- if (UNLIKELY(m_page.settings().logsPageMessagesToSystemConsoleEnabled() || shouldPrintExceptions())) {
- if (consoleMessage->type() == MessageType::Image) {
- ASSERT(consoleMessage->arguments());
- ConsoleClient::printConsoleMessageWithArguments(consoleMessage->source(), consoleMessage->type(), consoleMessage->level(), consoleMessage->arguments()->globalObject(), *consoleMessage->arguments());
- } else
- ConsoleClient::printConsoleMessage(consoleMessage->source(), consoleMessage->type(), consoleMessage->level(), consoleMessage->toString(), consoleMessage->url(), consoleMessage->line(), consoleMessage->column());
- }
}
InspectorInstrumentation::addMessageToConsole(m_page, WTFMove(consoleMessage));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes