[orca] Web: Eliminate some more unnecessary calls to _getDocumentsEmbeddedBy()



commit dfa0c66de23f4de0bd0f3c326cd9bc4c0d69e39d
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Jun 8 17:05:26 2021 +0200

    Web: Eliminate some more unnecessary calls to _getDocumentsEmbeddedBy()
    
    This is ongoing performance work being done in small chunks so that we
    can catch unexpected side effects.

 src/orca/scripts/web/braille_generator.py |  3 ++-
 src/orca/scripts/web/script.py            | 41 +++++++++++++++++++------------
 src/orca/scripts/web/script_utilities.py  |  6 ++---
 src/orca/scripts/web/speech_generator.py  |  3 ++-
 4 files changed, 31 insertions(+), 22 deletions(-)
---
diff --git a/src/orca/scripts/web/braille_generator.py b/src/orca/scripts/web/braille_generator.py
index fda12b1b8..3d028af4b 100644
--- a/src/orca/scripts/web/braille_generator.py
+++ b/src/orca/scripts/web/braille_generator.py
@@ -266,7 +266,8 @@ class BrailleGenerator(braille_generator.BrailleGenerator):
         result = []
         contents = self._script.utilities.filterContentsForPresentation(contents, True)
 
-        obj, offset = self._script.utilities.getCaretContext(documentFrame=None)
+        document = args.get("documentFrame")
+        obj, offset = self._script.utilities.getCaretContext(documentFrame=document)
         index = self._script.utilities.findObjectInContents(obj, offset, contents)
 
         lastRegion = None
diff --git a/src/orca/scripts/web/script.py b/src/orca/scripts/web/script.py
index 62f948458..9dfea04e2 100644
--- a/src/orca/scripts/web/script.py
+++ b/src/orca/scripts/web/script.py
@@ -892,7 +892,8 @@ class Script(default.Script):
             super().sayCharacter(obj)
             return
 
-        obj, offset = self.utilities.getCaretContext(documentFrame=None)
+        document = self.utilities.getTopLevelDocumentForObject(obj)
+        obj, offset = self.utilities.getCaretContext(documentFrame=document)
         if not obj:
             return
 
@@ -928,7 +929,8 @@ class Script(default.Script):
             super().sayWord(obj)
             return
 
-        obj, offset = self.utilities.getCaretContext(documentFrame=None)
+        document = self.utilities.getTopLevelDocumentForObject(obj)
+        obj, offset = self.utilities.getCaretContext(documentFrame=document)
         keyString, mods = self.utilities.lastKeyAndModifiers()
         if keyString == "Right":
             offset -= 1
@@ -947,11 +949,12 @@ class Script(default.Script):
             super().sayLine(obj)
             return
 
+        document = self.utilities.getTopLevelDocumentForObject(obj)
         priorObj = None
         if self._lastCommandWasCaretNav or isEditable:
-            priorObj, priorOffset = self.utilities.getPriorContext()
+            priorObj, priorOffset = self.utilities.getPriorContext(documentFrame=document)
 
-        obj, offset = self.utilities.getCaretContext(documentFrame=None)
+        obj, offset = self.utilities.getCaretContext(documentFrame=document)
         contents = self.utilities.getLineContentsAtOffset(obj, offset, useCache=True)
         self.speakContents(contents, priorObj=priorObj)
         self.pointOfReference["lastTextUnitSpoken"] = "line"
@@ -1003,7 +1006,8 @@ class Script(default.Script):
             debug.println(debug.LEVEL_INFO, "BRAILLE: disabled", True)
             return
 
-        if not self.utilities.inDocumentContent(obj):
+        document = args.get("documentFrame", self.utilities.getTopLevelDocumentForObject(obj))
+        if not document:
             msg = "WEB: updating braille for non-document object %s" % obj
             debug.println(debug.LEVEL_INFO, msg, True)
             super().updateBraille(obj, **args)
@@ -1021,16 +1025,16 @@ class Script(default.Script):
             super().updateBraille(obj, **args)
             return
 
-        obj, offset = self.utilities.getCaretContext(documentFrame=None, getZombieReplicant=True)
+        obj, offset = self.utilities.getCaretContext(documentFrame=document, getZombieReplicant=True)
         if offset > 0 and isContentEditable:
             text = self.utilities.queryNonEmptyText(obj)
             if text:
                 offset = min(offset, text.characterCount)
 
         contents = self.utilities.getLineContentsAtOffset(obj, offset)
-        self.displayContents(contents)
+        self.displayContents(contents, documentFrame=document)
 
-    def displayContents(self, contents):
+    def displayContents(self, contents, **args):
         """Displays contents in braille."""
 
         if not _settingsManager.getSetting('enableBraille') \
@@ -1039,7 +1043,8 @@ class Script(default.Script):
             return
 
         line = self.getNewBrailleLine(clearBraille=True, addLine=True)
-        contents = self.brailleGenerator.generateContents(contents)
+        document = args.get("documentFrame")
+        contents = self.brailleGenerator.generateContents(contents, documentFrame=document)
         if not contents:
             return
 
@@ -1229,8 +1234,8 @@ class Script(default.Script):
             self.presentMessage(messages.MODE_OBJECT)
         _settingsManager.setSetting('layoutMode', layoutMode)
 
-    def togglePresentationMode(self, inputEvent):
-        [obj, characterOffset] = self.utilities.getCaretContext()
+    def togglePresentationMode(self, inputEvent, documentFrame=None):
+        [obj, characterOffset] = self.utilities.getCaretContext(documentFrame)
         if self._inFocusMode:
             try:
                 parentRole = obj.parent.getRole()
@@ -1262,7 +1267,11 @@ class Script(default.Script):
             debug.println(debug.LEVEL_INFO, msg, True)
             return True
 
-        if not self.utilities.inDocumentContent(newFocus):
+        document = self.utilities.getTopLevelDocumentForObject(newFocus)
+        if not document and self.utilities.isDocument(newFocus):
+            document = newFocus
+
+        if not document:
             msg = "WEB: Locus of focus changed to non-document obj"
             self._madeFindAnnouncement = False
             self._inFocusMode = False
@@ -1275,7 +1284,7 @@ class Script(default.Script):
         caretOffset = 0
         if self.utilities.inFindContainer(oldFocus) \
            or (self.utilities.isDocument(newFocus) and oldFocus == orca_state.activeWindow):
-            contextObj, contextOffset = self.utilities.getCaretContext()
+            contextObj, contextOffset = self.utilities.getCaretContext(documentFrame=document)
             if contextObj and not self.utilities.isZombie(contextObj):
                 newFocus, caretOffset = contextObj, contextOffset
 
@@ -1288,8 +1297,8 @@ class Script(default.Script):
         if text and (0 <= text.caretOffset <= text.characterCount):
             caretOffset = text.caretOffset
 
-        self.utilities.setCaretContext(newFocus, caretOffset)
-        self.updateBraille(newFocus)
+        self.utilities.setCaretContext(newFocus, caretOffset, document)
+        self.updateBraille(newFocus, documentFrame=document)
         orca.emitRegionChanged(newFocus, caretOffset)
 
         if self._lastCommandWasMouseButton and event \
@@ -1357,7 +1366,7 @@ class Script(default.Script):
         if not self._focusModeIsSticky \
            and not self._browseModeIsSticky \
            and self.useFocusMode(newFocus, oldFocus) != self._inFocusMode:
-            self.togglePresentationMode(None)
+            self.togglePresentationMode(None, document)
 
         return True
 
diff --git a/src/orca/scripts/web/script_utilities.py b/src/orca/scripts/web/script_utilities.py
index be5ad6aae..0d1c832fb 100644
--- a/src/orca/scripts/web/script_utilities.py
+++ b/src/orca/scripts/web/script_utilities.py
@@ -5089,8 +5089,7 @@ class Utilities(script_utilities.Utilities):
                 return obj, 0
 
         # If we're here, start looking up the tree, up to the document.
-        documentFrame = self.documentFrame()
-        if self.isSameObject(obj, documentFrame):
+        if self.isTopLevelDocument(obj):
             return None, -1
 
         while obj and obj.parent:
@@ -5155,8 +5154,7 @@ class Utilities(script_utilities.Utilities):
                 return obj, 0
 
         # If we're here, start looking up the tree, up to the document.
-        documentFrame = self.documentFrame()
-        if self.isSameObject(obj, documentFrame):
+        if self.isTopLevelDocument(obj):
             return None, -1
 
         while obj and obj.parent:
diff --git a/src/orca/scripts/web/speech_generator.py b/src/orca/scripts/web/speech_generator.py
index 2fe6aed32..0134078a9 100644
--- a/src/orca/scripts/web/speech_generator.py
+++ b/src/orca/scripts/web/speech_generator.py
@@ -782,7 +782,8 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
             oldRole = self._overrideRole(self._getAlternativeRole(obj, **args), args)
 
         if not 'priorObj' in args:
-            args['priorObj'] = self._script.utilities.getPriorContext()[0]
+            document = self._script.utilities.getTopLevelDocumentForObject(obj)
+            args['priorObj'] = self._script.utilities.getPriorContext(document)[0]
 
         if not result:
             result = list(filter(lambda x: x, super().generateSpeech(obj, **args)))


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