diff options
| author | Stephen Blott | 2016-04-08 07:55:13 +0100 | 
|---|---|---|
| committer | Stephen Blott | 2016-04-08 07:55:16 +0100 | 
| commit | d1c230cabb051a5429242c98e67d37b65edc58b8 (patch) | |
| tree | cd7daec940a9a77041a1955ae7133d54148a7db8 /background_scripts/main.coffee | |
| parent | bee5ee8416be776f379beb1bf772665a19cd3fa4 (diff) | |
| download | vimium-d1c230cabb051a5429242c98e67d37b65edc58b8.tar.bz2 | |
Do not post hint descriptors back to the frame itself.
When distributing hint descriptors, do not post a frame's own hint
descriptors back to the frame itself.  It already has them.
With regard to the message-passing cost only, this represents a speedup
of approximately 3/2 for link-busy sites like reddit -- several tens of
milliseconds for me.  There are other costs too (such as processing the
hint descriptors) bu these are not affected.
Diffstat (limited to 'background_scripts/main.coffee')
| -rw-r--r-- | background_scripts/main.coffee | 36 | 
1 files changed, 23 insertions, 13 deletions
| diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee index 829b0abb..cac35100 100644 --- a/background_scripts/main.coffee +++ b/background_scripts/main.coffee @@ -355,35 +355,45 @@ HintCoordinator =        # If there's no handler here, then the message is forwarded to all frames in the sender's tab.        @sendMessage request.messageType, tabId, request +  # Post a link-hints message to a particular frame's port. We catch errors in case the frame has gone away. +  postMessage: (tabId, frameId, messageType, port, request = {}) -> +    try +      port.postMessage extend request, {handler: "linkHintsMessage", messageType} +    catch +      @unregisterFrame tabId, frameId + +  # Post a link-hints message to all participating frames.    sendMessage: (messageType, tabId, request = {}) -> -    extend request, {handler: "linkHintsMessage", messageType}      for own frameId, port of @tabState[tabId].ports -      try -        port.postMessage request -      catch -        @unregisterFrame tabId, parseInt frameId +      @postMessage tabId, parseInt(frameId), messageType, port, request    prepareToActivateMode: (tabId, originatingFrameId, {modeIndex}) -> -    @tabState[tabId] = {frameIds: frameIdsForTab[tabId][..], hintDescriptors: [], originatingFrameId, modeIndex} +    @tabState[tabId] = {frameIds: frameIdsForTab[tabId][..], hintDescriptors: {}, originatingFrameId, modeIndex}      @tabState[tabId].ports = extend {}, portsForTab[tabId]      @sendMessage "getHintDescriptors", tabId, {modeIndex}    # Receive hint descriptors from all frames and activate link-hints mode when we have them all.    postHintDescriptors: (tabId, frameId, {hintDescriptors}) ->      if frameId in @tabState[tabId].frameIds -      @tabState[tabId].hintDescriptors.push hintDescriptors... +      @tabState[tabId].hintDescriptors[frameId] = hintDescriptors        @tabState[tabId].frameIds = @tabState[tabId].frameIds.filter (fId) -> fId != frameId        if @tabState[tabId].frameIds.length == 0 -        @sendMessage "activateMode", tabId, -          originatingFrameId: @tabState[tabId].originatingFrameId -          hintDescriptors: @tabState[tabId].hintDescriptors -          modeIndex: @tabState[tabId].modeIndex +        for own frameId, port of @tabState[tabId].ports +          if frameId of @tabState[tabId].hintDescriptors +            hintDescriptors = extend {}, @tabState[tabId].hintDescriptors +            # We do not send back the frame's own hint descriptors.  This is faster (approx. speedup 3/2) for +            # link-busy sites like reddit. +            delete hintDescriptors[frameId] +            @postMessage tabId, parseInt(frameId), "activateMode", port, +              originatingFrameId: @tabState[tabId].originatingFrameId +              hintDescriptors: hintDescriptors +              modeIndex: @tabState[tabId].modeIndex    # If an unregistering frame is participating in link-hints mode, then we need to tidy up after it.    unregisterFrame: (tabId, frameId) ->      delete @tabState[tabId]?.ports?[frameId] -    # We fake "postHintDescriptors" for an unregistering frame, if necessary. -    @postHintDescriptors tabId, frameId, hintDescriptors: [] if @tabState[tabId]?.frameIds +    # We fake "postHintDescriptors" for an unregistering frame. +    @postHintDescriptors tabId, frameId, hintDescriptors: []  # Port handler mapping  portHandlers = | 
