Commit Graph

48 Commits

Author SHA1 Message Date
Stephen Heumann
5c1fc77f9b Don't request another FBUpdate in NextRect if one is already coming.
This helps avoid issues where the GS may be unable to "catch up" with the stream of FBUpdates, resulting in it continually drawing out-of-date screen data.
2016-09-21 18:30:03 -05:00
Stephen Heumann
a6a34dd080 Don't block waiting for large clipboard transfers. 2016-09-21 17:52:47 -05:00
Stephen Heumann
f4c403d8d8 Translate character sets on clipboard send/receive, so non-ASCII text can be exchanged.
The RFB spec says the clipboard data should be in the ISO 8859-1 character set, but we follow several other VNC implementations in actually using Windows-1252 (which is a superset of ISO 8859-1).
2016-09-17 18:01:31 -05:00
Stephen Heumann
aa868d6ff6 Move TCP read routines to a separate file.
Also, clean up some of the includes in various files.
2016-09-17 17:06:53 -05:00
Stephen Heumann
ceeaeb7767 Access data in read buffer using pointer instead of handle.
This is a prelude to revamping the read routines.
2016-09-15 21:40:39 -05:00
Stephen Heumann
e8a4d86f6b Remove old version number in README 2016-09-06 18:29:00 -05:00
Stephen Heumann
9e5dc390a5 Update version and copyright year 2016-09-05 22:58:50 -05:00
Stephen Heumann
0bf868147c Update README 2016-09-05 22:56:55 -05:00
Stephen Heumann
462b351425 Report zero-length reads as successful.
I've encountered a server that sometimes sends zero-size cursor updates, which can trigger this case.
2016-09-05 21:52:24 -05:00
Stephen Heumann
af7b5b8119 Do raw drawing incrementally while data is being received.
This currently disables the support for skipping invisible pixels. It is generally not very important, since raw drawing speed usually is not the bottleneck.
2016-09-05 17:22:10 -05:00
Stephen Heumann
ec3cbc6748 Implement option to tune Marinetti for high throughput.
This sets the tcpTUNEIPUSERPOLLCT and tcpTUNEIPRUNQCT tuning parameters to 10 (the maximum) instead of the default of 2. This makes Marinetti process more incoming data at once and significantly increases throughput. (Actually, current versions of Marinetti only seem to use tcpTUNEIPUSERPOLLCT, but we set both for compatibility with any future versions that actually use tcpTUNEIPRUNQCT.)
2016-09-02 19:08:45 -05:00
Stephen Heumann
3f9fadd8cb Add check box to tune Marinetti for high throughput.
This is a precursor to a patch to actually implement the tuning.
2016-08-31 23:37:18 -05:00
Stephen Heumann
d281a30f98 Use less ugly (and faster) code for content origin calculations.
Specifically, use a union rather than pointer-based type punning to convert the Long value returned by GetContentOrigin() to a Point. This makes for more readable code and should also generate somewhat better assembly code.
2016-05-28 23:58:04 -05:00
Stephen Heumann
aa15c60672 Have Marinetti return a new handle in ReadFixup.
This should be faster, as in DoReadTCP, and it simplifies the code a little.

Also, check for returned data size of 0 in DoReadTCP. I don't think this should happen, but in case it did, the returned handle could be invalid.
2016-05-28 23:19:13 -05:00
Stephen Heumann
e1288f7e1b Small refactoring to reduce boilerplate code
DoReadTCP automatically disposes the old read buffer handle before doing the read, and then locks the new read buffer handle before returning. This removes the need for most explicit locking/unlocking of the handle. A macro is provided to dispose of the handle earlier (useful in a few cases where it may be big, and another read isn't immediately performed).

Also, set displayInProgress to FALSE in NextRect, rather than in code for each encoding.
2016-05-28 21:59:35 -05:00
Stephen Heumann
3a175f9b02 Have Marinetti return read data in a new handle.
This should be faster than the other options (reusing an existing handle or using a pointer) because it avoids an extra copy of the data inside Marinetti. For the other options, Marinetti will create a new handle and copy the data to it anyway, but then copy it again into the requested destination.
2016-05-28 20:41:43 -05:00
Stephen Heumann
46a1657580 Properly set up for next rectangle after out-of-bounds CopyRect. 2016-05-28 18:33:31 -05:00
Stephen Heumann
bb65891a4a Use shadowing and fast port optimizations for QuickDraw.
This should cause a bit of a speedup, although it wasn't really noticeable in my tests.
2016-05-21 12:35:51 -05:00
Stephen Heumann
d1b2e10489 Don't duplicatively regenerate color table entries.
The logic for making sure the color table was complete before connecting was slightly broken due to wraparound, so it would cause all entries to be generated, re-generating any that already had been. This fixes it, which should make the initial connection process slightly faster on slow systems.
2016-05-21 00:23:48 -05:00
Stephen Heumann
1b4d47b690 Speed up raw drawing by calling EventAvail and SystemTask less often.
They are now called only every 16 lines, instead of every line. This is enough to maintain reasonable responsiveness, while providing a measurable speedup.
2016-05-20 23:09:40 -05:00
Stephen Heumann
aa38f6d209 Use faster assembly routine for 320-mode raw pixel decoding too.
The assembly code for the 640-mode and 320-mode routines is moved to a macro so it can be shared between them.
2016-05-20 22:08:05 -05:00
Stephen Heumann
9e401f4a83 Switch to using faster assembly routine (instead of C) for 640-mode pixel decoding loop. 2016-05-14 17:30:44 -05:00
Stephen Heumann
12999358b5 Use a static (instead of dynamically allocated) buffer for SHR pixels generated from raw decoding.
The program code is moved to a separate segment to make room for the buffer.
2016-05-13 21:44:12 -05:00
Stephen Heumann
141739c985 Clean up headers and make things static where appropriate.
Also include a few missing prototypes, which could possibly fix bugs.
2016-05-13 20:19:27 -05:00
Stephen Heumann
b8bdc81eda Statically allocate space for color tables in an assembly file.
This is a prelude to rewriting the raw decoding logic in more efficient assembly code.
2016-05-13 18:34:23 -05:00
Stephen Heumann
b9699111da Add link to binary releases. 2015-09-29 18:00:32 -05:00
Stephen Heumann
e0044468e3 Fix a memory leak in ReadFixup.
The buffer from the last read is still left around until the next one, but this should usually be fairly small, and it's the same behavior as the main DoReadTCP routine.
2015-09-29 17:21:37 -05:00
Stephen Heumann
c6389c9925 Optimize 640 mode raw decoding for case where consecutive blocks of 4 pixels are the same.
This is also a win provided it can use the optimized case over ~40% of the time.
2015-09-28 22:48:23 -05:00
Stephen Heumann
2f13669a2f Optimize 320-mode raw pixel decoding for the case where two consecutive pairs of pixels are the same.
This is only a win if we can use the optimized case a reasonable proportion of the time (~40% or more), but that should be the case for most real screen images.

The equality comparisons are written with XORs because that produces better assembly code.
2015-09-28 20:53:45 -05:00
Stephen Heumann
13cd339277 Add a README.md file.
This is a slightly reformatted version of the existing README.
2015-09-26 23:58:19 -05:00
Stephen Heumann
3c069bc35d Raw decoding optimization: Do operations using 16 bits where possible.
This saves a few instructions that were being used to switch to 8-bit mode or mask values down to 8 bits.
2015-09-26 22:16:04 -05:00
Stephen Heumann
f810cb3799 Optimize the core loops for decoding raw pixels a little, in particular deferring increments to the end. 2015-09-26 14:26:05 -05:00
Stephen Heumann
59a3bf938c Use 16-bit computations for shifts, where possible.
This causes ORCA/C to generate better code, using shift instructions rather than function calls.
2015-09-26 01:24:58 -05:00
Stephen Heumann
8861cb4a3a Replace a few mod-by-power-of-2 operations with bit masking, since ORCA/C wasn't optimizing them 2015-09-26 00:33:08 -05:00
Stephen Heumann
8ee57096d2 Fix bug where the rightmost few pixels of a cursor could sometimes be corrupted 2015-09-25 23:47:09 -05:00
Stephen Heumann
8cdef04732 Terminate blocking reads on TCP errors, instead of waiting for timer to expire.
This should avoid most cases where the program seems to hang for 15 seconds.
2015-09-25 19:02:52 -05:00
Stephen Heumann
50a273440a Update README for version 1.0b2.
Use a standard open source license (two-clause BSD license).
2015-09-24 22:33:24 -05:00
Stephen Heumann
a44940a468 Flip the mapping of OA (Command) and Option keys.
This matches the de facto standard of Mac VNC implementations, although it's inconsistent with the labeling of Option as "Alt."
2015-09-24 19:25:08 -05:00
Stephen Heumann
8c18d44109 Improved error handling in local cursor code 2015-09-24 18:33:27 -05:00
Stephen Heumann
60c976dda6 Update version number and copyright dates 2015-09-24 01:37:21 -05:00
Stephen Heumann
b9dba4ac26 Fix issues with local cursor code. It seems to work OK now. 2015-09-24 01:33:01 -05:00
Stephen Heumann
ebf5297779 Switch to standard indentation of closing braces 2015-09-23 20:56:33 -05:00
Stephen Heumann
ab3210adb0 Consistently use spaces for indentation 2015-09-23 20:26:03 -05:00
Stephen Heumann
f44c7089d2 Remove non-source files, out-of-date build scripts, and unused header 2015-09-23 20:03:30 -05:00
Stephen Heumann
31ff375570 Post-1.0b1 work in progress from 2004.
This contains partial code for displaying the cursor locally.
2015-09-23 19:40:17 -05:00
Stephen Heumann
fb43622db7 VNCview GS 1.0b1 sources 2015-09-23 19:06:46 -05:00
Stephen Heumann
48972d5a9c VNCview GS 1.0a2 sources 2015-09-23 19:02:23 -05:00
Stephen Heumann
16f792352e VNCview GS 1.0a1 sources 2015-09-23 18:46:47 -05:00