[orca/gnome-42] Web: Cache decision regarding objects which can have the caret context



commit 77ab93f00a6aaa1940f43356faf9f85e3cf77b92
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Mon May 2 14:05:00 2022 +0200

    Web: Cache decision regarding objects which can have the caret context
    
    Sometimes we do this check multiple times during caret navigation and
    object presentation. Caching the decision improves performance.

 src/orca/scripts/web/script_utilities.py | 7 +++++++
 1 file changed, 7 insertions(+)
---
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index 26fc157b2..d1fb1dd5a 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -55,6 +55,7 @@ class Utilities(script_utilities.Utilities):
         self._currentTextAttrs = {}
         self._caretContexts = {}
         self._priorContexts = {}
+        self._canHaveCaretContextDecision = {}
         self._contextPathsRolesAndNames = {}
         self._paths = {}
         self._inDocumentContent = {}
@@ -209,6 +210,7 @@ class Utilities(script_utilities.Utilities):
         self._treatAsDiv = {}
         self._paths = {}
         self._contextPathsRolesAndNames = {}
+        self._canHaveCaretContextDecision = {}
         self._cleanupContexts()
         self._priorContexts = {}
         self._lastQueuedLiveRegionEvent = None
@@ -4772,6 +4774,10 @@ class Utilities(script_utilities.Utilities):
         return rv
 
     def _canHaveCaretContext(self, obj):
+        rv = self._canHaveCaretContextDecision.get(hash(obj))
+        if rv is not None:
+            return rv
+
         startTime = time.time()
         if not obj:
             return False
@@ -4838,6 +4844,7 @@ class Utilities(script_utilities.Utilities):
 
         msg = "INFO: Verified %s can have caret context. (%.4fs)" % (obj, time.time() - startTime)
         debug.println(debug.LEVEL_INFO, msg, True)
+        self._canHaveCaretContextDecision[hash(obj)] = True
         return True
 
     def isPseudoElement(self, obj):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]