Title: [260168] trunk/Source/WebCore
Revision
260168
Author
andresg...@apple.com
Date
2020-04-15 19:19:13 -0700 (Wed, 15 Apr 2020)

Log Message

Add logging to core accessibility.
https://bugs.webkit.org/show_bug.cgi?id=210564

Reviewed by Chris Fleizach.

Added AXLogger class and AXTRACE macro. Used them in AXIsolatedTree.

* Headers.cmake:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* accessibility/AXLogger.cpp: Added.
(WebCore::AXLogger::AXLogger):
(WebCore::AXLogger::~AXLogger):
* accessibility/AXLogger.h: Added.
* accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::AXIsolatedTree):
(WebCore::AXIsolatedTree::~AXIsolatedTree):
(WebCore::AXIsolatedTree::create):
(WebCore::AXIsolatedTree::nodeInTreeForID):
(WebCore::AXIsolatedTree::treeForID):
(WebCore::AXIsolatedTree::createTreeForPageID):
(WebCore::AXIsolatedTree::removeTreeForPageID):
(WebCore::AXIsolatedTree::treeForPageID):
(WebCore::AXIsolatedTree::nodeForID const):
(WebCore::AXIsolatedTree::objectsForIDs const):
(WebCore::AXIsolatedTree::generateSubtree):
(WebCore::AXIsolatedTree::createSubtree):
(WebCore::AXIsolatedTree::updateNode):
(WebCore::AXIsolatedTree::updateSubtree):
(WebCore::AXIsolatedTree::updateChildren):
(WebCore::AXIsolatedTree::focusedUIElement):
(WebCore::AXIsolatedTree::rootNode):
(WebCore::AXIsolatedTree::setRootNode):
(WebCore::AXIsolatedTree::setFocusedNode):
(WebCore::AXIsolatedTree::setFocusedNodeID):
(WebCore::AXIsolatedTree::removeNode):
(WebCore::AXIsolatedTree::removeSubtree):
(WebCore::AXIsolatedTree::appendNodeChanges):
(WebCore::AXIsolatedTree::applyPendingChanges):
* platform/Logging.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (260167 => 260168)


--- trunk/Source/WebCore/ChangeLog	2020-04-16 02:18:09 UTC (rev 260167)
+++ trunk/Source/WebCore/ChangeLog	2020-04-16 02:19:13 UTC (rev 260168)
@@ -1,3 +1,46 @@
+2020-04-15  Andres Gonzalez  <andresg...@apple.com>
+
+        Add logging to core accessibility.
+        https://bugs.webkit.org/show_bug.cgi?id=210564
+
+        Reviewed by Chris Fleizach.
+
+        Added AXLogger class and AXTRACE macro. Used them in AXIsolatedTree.
+
+        * Headers.cmake:
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * accessibility/AXLogger.cpp: Added.
+        (WebCore::AXLogger::AXLogger):
+        (WebCore::AXLogger::~AXLogger):
+        * accessibility/AXLogger.h: Added.
+        * accessibility/isolatedtree/AXIsolatedTree.cpp:
+        (WebCore::AXIsolatedTree::AXIsolatedTree):
+        (WebCore::AXIsolatedTree::~AXIsolatedTree):
+        (WebCore::AXIsolatedTree::create):
+        (WebCore::AXIsolatedTree::nodeInTreeForID):
+        (WebCore::AXIsolatedTree::treeForID):
+        (WebCore::AXIsolatedTree::createTreeForPageID):
+        (WebCore::AXIsolatedTree::removeTreeForPageID):
+        (WebCore::AXIsolatedTree::treeForPageID):
+        (WebCore::AXIsolatedTree::nodeForID const):
+        (WebCore::AXIsolatedTree::objectsForIDs const):
+        (WebCore::AXIsolatedTree::generateSubtree):
+        (WebCore::AXIsolatedTree::createSubtree):
+        (WebCore::AXIsolatedTree::updateNode):
+        (WebCore::AXIsolatedTree::updateSubtree):
+        (WebCore::AXIsolatedTree::updateChildren):
+        (WebCore::AXIsolatedTree::focusedUIElement):
+        (WebCore::AXIsolatedTree::rootNode):
+        (WebCore::AXIsolatedTree::setRootNode):
+        (WebCore::AXIsolatedTree::setFocusedNode):
+        (WebCore::AXIsolatedTree::setFocusedNodeID):
+        (WebCore::AXIsolatedTree::removeNode):
+        (WebCore::AXIsolatedTree::removeSubtree):
+        (WebCore::AXIsolatedTree::appendNodeChanges):
+        (WebCore::AXIsolatedTree::applyPendingChanges):
+        * platform/Logging.h:
+
 2020-04-15  Simon Fraser  <simon.fra...@apple.com>
 
         Lay the groundwork for SynchronousScrollingReason on overflow nodes

Modified: trunk/Source/WebCore/Headers.cmake (260167 => 260168)


--- trunk/Source/WebCore/Headers.cmake	2020-04-16 02:18:09 UTC (rev 260167)
+++ trunk/Source/WebCore/Headers.cmake	2020-04-16 02:19:13 UTC (rev 260168)
@@ -163,6 +163,7 @@
     Modules/websockets/WebSocketFrame.h
     Modules/websockets/WebSocketHandshake.h
 
+    accessibility/AXLogger.h
     accessibility/AXObjectCache.h
     accessibility/AXTextStateChangeIntent.h
     accessibility/AccessibilityListBox.h

Modified: trunk/Source/WebCore/Sources.txt (260167 => 260168)


--- trunk/Source/WebCore/Sources.txt	2020-04-16 02:18:09 UTC (rev 260167)
+++ trunk/Source/WebCore/Sources.txt	2020-04-16 02:19:13 UTC (rev 260168)
@@ -436,6 +436,7 @@
 
 #endif
 
+accessibility/AXLogger.cpp
 accessibility/AXObjectCache.cpp
 accessibility/AccessibilityARIAGrid.cpp
 accessibility/AccessibilityARIAGridCell.cpp

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (260167 => 260168)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-04-16 02:18:09 UTC (rev 260167)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2020-04-16 02:19:13 UTC (rev 260168)
@@ -13586,7 +13586,9 @@
 		BEF29EE91715DD0900C4B4C9 /* AudioTrackPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivate.h; sourceTree = "<group>"; };
 		BEF29EEA1715DD0900C4B4C9 /* VideoTrackPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoTrackPrivate.h; sourceTree = "<group>"; };
 		C046E1AB1208A9FE00BA2CF7 /* LocalizedStrings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LocalizedStrings.cpp; sourceTree = "<group>"; };
+		C0493EB7244699E4009AAC80 /* AXLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AXLogger.h; sourceTree = "<group>"; };
 		C078376023DF253E00C9C5C8 /* AXIsolatedObjectMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = AXIsolatedObjectMac.mm; path = mac/AXIsolatedObjectMac.mm; sourceTree = "<group>"; };
+		C08F13A1244766DC00AB989F /* AXLogger.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AXLogger.cpp; sourceTree = "<group>"; };
 		C0E2F3252412BF29009C73EC /* libAccessibility.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libAccessibility.tbd; path = usr/lib/libAccessibility.tbd; sourceTree = SDKROOT; };
 		C0F2A43F13869A280066C534 /* preprocessor.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = preprocessor.pm; path = scripts/preprocessor.pm; sourceTree = "<group>"; };
 		C105DA610F3AA68F001DD44F /* TextEncodingDetectorICU.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextEncodingDetectorICU.cpp; sourceTree = "<group>"; };
@@ -18011,6 +18013,8 @@
 				A91C9FC01B659A6700AFFD54 /* AccessibilityTreeItem.cpp */,
 				A91C9FC11B659A6700AFFD54 /* AccessibilityTreeItem.h */,
 				A9EE448C210FC9AD00B6EAE6 /* AriaAttributes.idl */,
+				C08F13A1244766DC00AB989F /* AXLogger.cpp */,
+				C0493EB7244699E4009AAC80 /* AXLogger.h */,
 				2981CAAF131822EC00D12F2A /* AXObjectCache.cpp */,
 				29A8121A0FBB9C1D00510293 /* AXObjectCache.h */,
 				91C9F2F81AE3BE240095B61C /* AXTextStateChangeIntent.h */,

Added: trunk/Source/WebCore/accessibility/AXLogger.cpp (0 => 260168)


--- trunk/Source/WebCore/accessibility/AXLogger.cpp	                        (rev 0)
+++ trunk/Source/WebCore/accessibility/AXLogger.cpp	2020-04-16 02:19:13 UTC (rev 260168)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "AXLogger.h"
+
+#include "Logging.h"
+
+namespace WebCore {
+
+AXLogger::AXLogger(const char* methodName)
+    : m_logger(Logger::create(this))
+    , m_channel(*getLogChannel("Accessibility"))
+    , m_methodName(methodName)
+{
+    m_channel.state = WTFLogChannelState::On;
+    m_channel.level = WTFLogLevel::Debug;
+
+    if (!m_methodName.isEmpty())
+        m_logger->debug(m_channel, m_methodName, " {");
+}
+
+AXLogger::~AXLogger()
+{
+    if (!m_methodName.isEmpty())
+        m_logger->debug(m_channel, "} ", m_methodName);
+}
+
+} // namespace WebCore

Added: trunk/Source/WebCore/accessibility/AXLogger.h (0 => 260168)


--- trunk/Source/WebCore/accessibility/AXLogger.h	                        (rev 0)
+++ trunk/Source/WebCore/accessibility/AXLogger.h	2020-04-16 02:19:13 UTC (rev 260168)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/Logger.h>
+
+namespace WebCore {
+
+class AXLogger {
+public:
+    AXLogger(const char* methodName);
+    ~AXLogger();
+private:
+    RefPtr<Logger> m_logger;
+    WTFLogChannel& m_channel;
+    String m_methodName;
+};
+
+#ifndef NDEBUG
+#define AXTRACE(methodName) AXLogger axLogger(methodName)
+#else
+#define AXTRACE(methodName)
+#endif // ifndef NDEBUG
+
+} // namespace WebCore

Modified: trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp (260167 => 260168)


--- trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2020-04-16 02:18:09 UTC (rev 260167)
+++ trunk/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp	2020-04-16 02:19:13 UTC (rev 260168)
@@ -29,6 +29,7 @@
 #include "AXIsolatedTree.h"
 
 #include "AXIsolatedObject.h"
+#include "AXLogger.h"
 #include "Page.h"
 #include <wtf/NeverDestroyed.h>
 
@@ -69,12 +70,17 @@
 AXIsolatedTree::AXIsolatedTree()
     : m_treeID(newTreeID())
 {
+    AXTRACE("AXIsolatedTree::AXIsolatedTree");
 }
 
-AXIsolatedTree::~AXIsolatedTree() = default;
+AXIsolatedTree::~AXIsolatedTree()
+{
+    AXTRACE("AXIsolatedTree::~AXIsolatedTree");
+}
 
 Ref<AXIsolatedTree> AXIsolatedTree::create()
 {
+    AXTRACE("AXIsolatedTree::create");
     ASSERT(isMainThread());
     return adoptRef(*new AXIsolatedTree());
 }
@@ -81,16 +87,19 @@
 
 RefPtr<AXIsolatedObject> AXIsolatedTree::nodeInTreeForID(AXIsolatedTreeID treeID, AXID axID)
 {
+    AXTRACE("AXIsolatedTree::nodeInTreeForID");
     return treeForID(treeID)->nodeForID(axID);
 }
 
 RefPtr<AXIsolatedTree> AXIsolatedTree::treeForID(AXIsolatedTreeID treeID)
 {
+    AXTRACE("AXIsolatedTree::treeForID");
     return treeIDCache().get(treeID);
 }
 
 Ref<AXIsolatedTree> AXIsolatedTree::createTreeForPageID(PageIdentifier pageID)
 {
+    AXTRACE("AXIsolatedTree::createTreeForPageID");
     LockHolder locker(s_cacheLock);
     ASSERT(!treePageCache().contains(pageID));
 
@@ -102,6 +111,7 @@
 
 void AXIsolatedTree::removeTreeForPageID(PageIdentifier pageID)
 {
+    AXTRACE("AXIsolatedTree::removeTreeForPageID");
     ASSERT(isMainThread());
     LockHolder locker(s_cacheLock);
 
@@ -119,6 +129,7 @@
 
 RefPtr<AXIsolatedTree> AXIsolatedTree::treeForPageID(PageIdentifier pageID)
 {
+    AXTRACE("AXIsolatedTree::treeForPageID");
     LockHolder locker(s_cacheLock);
 
     if (auto tree = treePageCache().get(pageID))
@@ -129,11 +140,13 @@
 
 RefPtr<AXIsolatedObject> AXIsolatedTree::nodeForID(AXID axID) const
 {
+    AXTRACE("AXIsolatedTree::nodeForID");
     return axID != InvalidAXID ? m_readerThreadNodeMap.get(axID) : nullptr;
 }
 
 Vector<RefPtr<AXCoreObject>> AXIsolatedTree::objectsForIDs(Vector<AXID> axIDs) const
 {
+    AXTRACE("AXIsolatedTree::objectsForIDs");
     Vector<RefPtr<AXCoreObject>> result;
     result.reserveCapacity(axIDs.size());
 
@@ -147,6 +160,7 @@
 
 void AXIsolatedTree::generateSubtree(AXCoreObject& axObject, AXID parentID, bool attachWrapper)
 {
+    AXTRACE("AXIsolatedTree::generateSubtree");
     ASSERT(isMainThread());
     Vector<NodeChange> nodeChanges;
     auto object = createSubtree(axObject, parentID, attachWrapper, nodeChanges);
@@ -159,6 +173,7 @@
 
 Ref<AXIsolatedObject> AXIsolatedTree::createSubtree(AXCoreObject& axObject, AXID parentID, bool attachWrapper, Vector<NodeChange>& nodeChanges)
 {
+    AXTRACE("AXIsolatedTree::createSubtree");
     ASSERT(isMainThread());
     auto object = AXIsolatedObject::create(axObject, m_treeID, parentID);
     if (attachWrapper) {
@@ -181,6 +196,7 @@
 
 void AXIsolatedTree::updateNode(AXCoreObject& axObject)
 {
+    AXTRACE("AXIsolatedTree::updateNode");
     ASSERT(isMainThread());
     AXID axID = axObject.objectID();
     auto* axParent = axObject.parentObject();
@@ -201,6 +217,7 @@
 
 void AXIsolatedTree::updateSubtree(AXCoreObject& axObject)
 {
+    AXTRACE("AXIsolatedTree::updateSubtree");
     ASSERT(isMainThread());
     removeSubtree(axObject.objectID());
     auto* axParent = axObject.parentObject();
@@ -210,6 +227,7 @@
 
 void AXIsolatedTree::updateChildren(AXCoreObject& axObject)
 {
+    AXTRACE("AXIsolatedTree::updateChildren");
     ASSERT(isMainThread());
     AXID axObjectID = axObject.objectID();
 
@@ -248,16 +266,19 @@
 
 RefPtr<AXIsolatedObject> AXIsolatedTree::focusedUIElement()
 {
+    AXTRACE("AXIsolatedTree::focusedUIElement");
     return nodeForID(m_focusedNodeID);
 }
     
 RefPtr<AXIsolatedObject> AXIsolatedTree::rootNode()
 {
+    AXTRACE("AXIsolatedTree::rootNode");
     return nodeForID(m_rootNodeID);
 }
 
 void AXIsolatedTree::setRootNode(Ref<AXIsolatedObject>& root)
 {
+    AXTRACE("AXIsolatedTree::setRootNode");
     LockHolder locker { m_changeLogLock };
     m_rootNodeID = root->objectID();
     m_readerThreadNodeMap.add(root->objectID(), WTFMove(root));
@@ -265,6 +286,7 @@
     
 void AXIsolatedTree::setFocusedNode(AXID axID)
 {
+    AXTRACE("AXIsolatedTree::setFocusedNode");
     ASSERT(isMainThread());
     LockHolder locker { m_changeLogLock };
     m_focusedNodeID = axID;
@@ -286,6 +308,7 @@
 
 void AXIsolatedTree::setFocusedNodeID(AXID axID)
 {
+    AXTRACE("AXIsolatedTree::setFocusedNodeID");
     LockHolder locker { m_changeLogLock };
     m_pendingFocusedNodeID = axID;
 }
@@ -292,6 +315,7 @@
 
 void AXIsolatedTree::removeNode(AXID axID)
 {
+    AXTRACE("AXIsolatedTree::removeNode");
     LockHolder locker { m_changeLogLock };
     m_pendingNodeRemovals.append(axID);
 }
@@ -298,6 +322,7 @@
 
 void AXIsolatedTree::removeSubtree(AXID axID)
 {
+    AXTRACE("AXIsolatedTree::removeSubtree");
     LockHolder locker { m_changeLogLock };
     m_pendingSubtreeRemovals.append(axID);
 }
@@ -304,6 +329,7 @@
 
 void AXIsolatedTree::appendNodeChanges(const Vector<NodeChange>& changes)
 {
+    AXTRACE("AXIsolatedTree::appendNodeChanges");
     ASSERT(isMainThread());
     m_pendingAppends.appendVector(changes);
 }
@@ -310,6 +336,7 @@
 
 void AXIsolatedTree::applyPendingChanges()
 {
+    AXTRACE("AXIsolatedTree::applyPendingChanges");
     RELEASE_ASSERT(!isMainThread());
     LockHolder locker { m_changeLogLock };
 

Modified: trunk/Source/WebCore/platform/Logging.h (260167 => 260168)


--- trunk/Source/WebCore/platform/Logging.h	2020-04-16 02:18:09 UTC (rev 260167)
+++ trunk/Source/WebCore/platform/Logging.h	2020-04-16 02:19:13 UTC (rev 260168)
@@ -38,6 +38,7 @@
 #endif
 
 #define WEBCORE_LOG_CHANNELS(M) \
+    M(Accessibility) \
     M(AdClickAttribution) \
     M(Animations) \
     M(ApplePay) \
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to