120 likes | 229 Views
Palantir. http://www.csuglab.cornell.edu/Info/People/livshits/Palantir.html A window-sharing system for Windows NT Max Feingold, Vladimir Livshits, and Yevgeniy Rozenfeld. General Description.
E N D
Palantir http://www.csuglab.cornell.edu/Info/People/livshits/Palantir.html A window-sharing system for Windows NT Max Feingold, Vladimir Livshits, and Yevgeniy Rozenfeld
General Description • Palantir is a window sharing system. It allows one to view windows opened on a different machine on the network. • We implemented the system as a client/server application, in which both the client and the server are implemented in the same Windows executable. Upon startup, the program places itself into the system tray and provides a convenient MFC interface for opening client connections, sharing server windows, changing communication and program settings, etc. Palantir
Client-Server Organization • When you run Palantir, it is automatically configured to run as both a client and a server. • All program functionality is accessible from an icon that sits in your Windows system tray. • When you use Palantir as a client, you can connect to a server by providing its ip-address. The program will query and display the list of available widows on that server for you. • You can select certain application windows running on your computer to be shared out • There is server authentication -- you need to supply a valid user name and password for when you are trying to connect. Palantir
Technology • We are using win32 API bitmap functions to grab client area of application windows. • Bitmaps are created on the server. Since it may take a considerable amount of memory and CPU time to grab a window bitmap, server is put to sleep between subsequent updates. The update frequency (refresh late on the picture below) can be configured along with many other parameters. • Bitmaps sent over the network to the the client(s) through Windows sockets. Palantir
Bitmap Processing • Clearly, it can take a lot of network bandwidth to transfer big bitmaps to multiple clients. The screenshot saved as a bitmap can take as much as 1.5Mb with 1024x768 screen resolution. To minimize the network load we use the following techniques • Image sampling • The basic idea is that we don’t need to send the whole bitmaps -- it is sufficient to only send the differences. • The server maintains the previous bitmap it sent to the client in a cache and determines the smallest rectangle containing the difference difference between the current bitmap and the previous one. • To find this rectangle, we pass over the image twice finding the leftmost and rightmost column and topmost and bottommost row containing changes. • One of the drawbacks of this approach is that in the worst case (i.e., when the two bitmaps we are comparing are absolutely identical) we need to pass over the image twice, which can be quite CPU-intensive for large images. • To alleviate this problem, we can set up the server to look only on each n-th point. Effectively, we set up a grid of points we will look at. This can considerably reduce the CPU load, but this can also affect precision with which bitmaps are updated. Palantir
We discovered that approach with a grip can significantly reduce CPU utilization at the same time yielding reasonably precise results with many applications. • However, for applications that require high precision (for instance, if you are typing in notepad and only every other letter you type gets updated on the client) we may end up with a pretty distorted image, so we send full window updates every so often (the frequency of these updates can be configured). • Another technique we use to reduce network utilization is run length compression • It turns out that typical images we need to process have lots of horizontal and vertical lines of the same color. Clearly, this is an opportunity for run length compression. • It practice, run length compression performs quite well. The compression ratio depends on the type of data being transferring: for example, a 2.8MB bitmap of an Explorer window was compressed to only 800KB of data (72% compression), while much smaller gains were achieved with colorful images such as digitized paintings. • To reduce the CPU overhead of this compression technique, it was build directly into the socket class. All data that is sent through the socket is compressed on the fly. • Generally, you would want to use some combination of these two compression techniques to achieve the best CPU/network utilization tradeoffs for your situation. • The program allows you to set various compression parameters on a window-per-window basis. Palantir
Possible Applications • Sharing of browser windows, images, and documents over the network. • Monitoring student activities. • Lab administrators monitoring desktop windows on many computers from a single workstation. • Corporations monitoring their employees’ desktop activities. • Professors demonstrating the use of a particular program to students across the network. • Communication with shared images between graphics designers. • Graphics-based talk applications -- two notepad windows open side-by-side. • Gaining access to resources available on one machine, such as a camera installed on a remote computer. In one of our experiments, we ran a Palantir server on a machine equipped with a camera and viewed the output on a computer in a different lab. Palantir