1. 26 Aug, 2010 2 commits
    • Joel Martin's avatar
      Test both builtin and base64.js functions. · 4ff85f49
      Joel Martin authored
      4ff85f49
    • Joel Martin's avatar
      Indexed receive queue. Up to 2X speedup in Chrome. · 67b4e987
      Joel Martin authored
      Generally, most servers send hextile updates as single updates
      containing many rects. Some servers send hextile updates as many small
      framebuffer updates with a few rects each (such as QEMU). This latter
      cases revealed that shifting off the beginning of the receive queue
      (which happens after each hextile FBU) performs poorly.
      
      This change switches to using an indexed receive queue (instead of
      actually shifting off the array). When the receive queue has grown to
      a certain size, then it is compacted all at once.
      
      The code is not as clean, but this change results in more than 2X
      speedup under Chrome for the pessimal case and 10-20% in firefox.
      67b4e987
  2. 12 Aug, 2010 1 commit
  3. 11 Aug, 2010 1 commit
    • Joel Martin's avatar
      Treat RFB 3.6 as 3.3. · 1a5dd77d
      Joel Martin authored
      Apparently there are versions of UltraVNC that report version 3.6.
      This is not a legal version according to the spec, but we'll just
      force version 3.3 if we receive it. Thanks to Larry Rowe for the info.
      1a5dd77d
  4. 06 Aug, 2010 1 commit
    • Joel Martin's avatar
      Scroll render test and perf speedup. · 4ed717ad
      Joel Martin authored
      Turns out when Windows is running in QEMU and a window scroll happens,
      there are lots of little hextile rects sent. This is slow in noVNC.
      
      - Some recording/playback improvement.
      - Add test harness to drive playback of recordings.
      - By pulling off the rect header in one chunk we get a 3X speedup in
        Chrome and a 20% speedup in firefox (specifically for the scroll
        test).
      - Also, get rid of some noise from creating timers for handle_message.
        Check to make sure there isn't already a pending timer first.
      4ed717ad
  5. 04 Aug, 2010 6 commits
  6. 03 Aug, 2010 2 commits
  7. 02 Aug, 2010 2 commits
    • Joel Martin's avatar
      New API. Refactor Canvas and RFB objects. · 8db09746
      Joel Martin authored
      New API:
      
      To use the RFB object, you now must instantiate it (this allows more
      than one instance of it on the same page).
      
          rfb = new RFB(settings);
      
      The 'settings' variable is a namespace that contains initial default
      settings. These can also be set and read using 'rfb.set_FOO()' and
      'rfb.get_FOO()' where FOO is the setting name. The current settings
      are (and defaults) are:
          - target: the DOM Canvas element to use ('VNC_canvas').
          - encrypt: whether to encrypt the connection (false)
          - true_color: true_color or palette (true)
          - b64encode: base64 encode the WebSockets data (true)
          - local_cursor: use local cursor rendering (true if supported)
          - connectTimeout: milliseconds to wait for connect (2000)
          - updateState: callback when RFB state changes (none)
          - clipboardReceive: callback when clipboard data received (none)
      
      The parameters to the updateState callback have also changed. The
      function spec is now updateState(rfb, state, oldstate, msg):
          - rfb: the RFB object that this state change is for.
          - state: the new state
          - oldstate: the previous state
          - msg: a message associate with the state (not always set).
      
      The clipboardReceive spec is clipboardReceive(rfb, text):
          - rfb: the RFB object that this text is from.
          - text: the clipboard text received.
      
      Changes:
      
      - The RFB and Canvas namespaces are now more proper objects. Private
        implementation is no longer exposed and the public API has been made
        explicit. Also, instantiation allows more than one VNC connection
        on the same page (to complete this, DefaultControls will also need
        this same refactoring).
      
      - Added 'none' logging level.
      
      - Removed automatic stylesheet selection workaround in util.js and
        move it to defaultcontrols so that it doesn't interfere with
        intergration.
      
      - Also, some major JSLinting.
      
      - Fix input, canvas, and cursor tests to work with new model.
      8db09746
    • Joel Martin's avatar
      Catch exceptions in cursor detection. · 8171f4d8
      Joel Martin authored
      If cursor Data URI scheme detection threw an exception, it would cause
      canvas initialization to fail. cursor detection exceptions should just
      disable local cursor change support, not cause canvas init to fail.
      8171f4d8
  8. 30 Jul, 2010 1 commit
    • Joel Martin's avatar
      Preliminary scaling code (deactivated). · 125d8bbb
      Joel Martin authored
      Uses the CSS "scale()" operation. The main problem is that the DOM
      container is not rescaled, only the size of the displayed content
      within it so there will need to be some sort of mechanism to handle
      this better so other elements reflow to the new size. Or it might just
      not work and be removed later. The zoom property seems to do the right
      behavior, but it's not widely supported. Worth exploring though.
      125d8bbb
  9. 29 Jul, 2010 2 commits
    • Joel Martin's avatar
      Give other events chance to fire. · 29ad96c5
      Joel Martin authored
      After each complete framebufferUpdate, set a short timer to continue
      processing the receive queue. This gives other events a chance to
      fire. Especially important when noVNC is integrated into another
      website.
      29ad96c5
    • Joel Martin's avatar
      Update TODO. · a867de16
      Joel Martin authored
      a867de16
  10. 26 Jul, 2010 1 commit
  11. 23 Jul, 2010 4 commits
  12. 22 Jul, 2010 6 commits
  13. 20 Jul, 2010 2 commits
    • Joel Martin's avatar
      Fail if initial server connection fails. · f55b6b41
      Joel Martin authored
      f55b6b41
    • Joel Martin's avatar
      Add Cursor pseudo-encoding support (disabled for now). · 2c2b492c
      Joel Martin authored
      To change the appearance of the cursor, we use the CSS cursor style
      and set the url to a data URI scheme. The image data sent via the
      cursor pseudo-encoding has to be encoded to a CUR format file before
      being used in the data URI.
      
      During Canvas initialization we try and set a simple cursor to see if
      the browser has support. Opera is missing support for data URI scheme
      in cursor URLs.
      
      Disabled for now until we have a better way of specifying settings
      overall (too many settings for control bar now).
      2c2b492c
  14. 17 Jul, 2010 2 commits
    • Joel Martin's avatar
      Fix listen_port check. · 1656b1b9
      Joel Martin authored
      Interestingly, the bug depends on compiler behavior. If local
      variables are automatically initialized to 0, then this always caused
      the program to error out indicating a failure to parse the listen
      port. Otherwise, the test was a no-op (except the rare case where the
      memory happened to be zero anyways).
      
      Thanks to Eugen Melnikoff for finding this.
      1656b1b9
    • Joel Martin's avatar
      Issue #11: daemonize after opening listen port. · 31407abc
      Joel Martin authored
      The listen port should be opened before daemonizing otherwise if
      opening the port fails, the user will get no feedback. The only
      complication was that the listen socket needs to not be closed as part
      of daemonizing.
      
      Thanks to http://github.com/rickr for finding it.
      31407abc
  15. 16 Jul, 2010 5 commits
  16. 15 Jul, 2010 1 commit
  17. 14 Jul, 2010 1 commit