Index: neercs/trunk/src/main.c
===================================================================
--- neercs/trunk/src/main.c	(revision 3456)
+++ neercs/trunk/src/main.c	(revision 3457)
@@ -180,4 +180,5 @@
                 char * buf2;
                 size_t l = 0;
+                int dt;
                 /* 0 means we have valid data but incomplete, so read the rest */
                 while(l == 0)
@@ -206,5 +207,18 @@
                 fcntl(screen_list->socket[SOCK_CLIENT], F_SETFL, O_NONBLOCK);
                 caca_refresh_display(screen_list->dp);
-                debug("refreshtime=%d", caca_get_display_time(screen_list->dp));
+                dt = caca_get_display_time(screen_list->dp);
+                debug("refreshtime=%dms (limit %d, requested %d)", dt/1000, screen_list->delay, screen_list->requested_delay);
+                /* Adjust refresh delay so that the server do not compute useless things */
+                if(dt > 2*1000*screen_list->delay)
+                {
+                    screen_list->delay*=2;
+                    send_delay(screen_list);
+                }
+                else if(dt < screen_list->delay*1000/2 &&
+                        screen_list->delay >= 2*screen_list->requested_delay)
+                {
+                    screen_list->delay/=2;
+                    send_delay(screen_list);
+                }
             }
             else if(!strncmp("CURSOR ", buf, 7))
