Sfoglia il codice sorgente

Significant firefox perf improvement. Update TODOs.

Interesting. Enough has changed in the Canvas tile operations, that
Canvas.prefer_js=true is better for firefox/gecko too. Approximately
2X improvement in firefox for large hextile renders.
Joel Martin 15 anni fa
parent
commit
5235b29ddf
2 ha cambiato i file con 20 aggiunte e 10 eliminazioni
  1. 13 6
      docs/TODO
  2. 7 4
      include/canvas.js

+ 13 - 6
docs/TODO

@@ -2,21 +2,24 @@ Short Term:
 
 
 - Test on IE 9 preview 3.
 - Test on IE 9 preview 3.
 
 
-- Support Opera 10.60.
+- Support Opera 10.60 (WebSocket frames dropped).
 
 
-- Possibly support IE <= 8.0 using excanvas:
+- Possibly support IE <= 8.0 using excanvas of fxcanvas:
   http://excanvas.sourceforge.net/
   http://excanvas.sourceforge.net/
-
-
-Medium Term:
+  http://code.google.com/p/fxcanvas/
 
 
 - Timing delta between frames in proxy record log, for playback
 - Timing delta between frames in proxy record log, for playback
   support (for demo and test).
   support (for demo and test).
 
 
+
+Medium Term:
+
 - Implement Cursor pseudo-encoding (CSS cursor)
 - Implement Cursor pseudo-encoding (CSS cursor)
     http://en.wikipedia.org/wiki/ICO_(file_format)
     http://en.wikipedia.org/wiki/ICO_(file_format)
     https://developer.mozilla.org/en/Using_URL_values_for_the_cursor_property
     https://developer.mozilla.org/en/Using_URL_values_for_the_cursor_property
 
 
+- Viewport and/or scaling support.
+
 - Status bar buttons:
 - Status bar buttons:
     - Isolate menu UI in DefaultControls.js
     - Isolate menu UI in DefaultControls.js
     - Icons in status area upper left
     - Icons in status area upper left
@@ -56,7 +59,11 @@ Longer Term:
 
 
 - Get web-socket-js RFC2817 proxying working again.
 - Get web-socket-js RFC2817 proxying working again.
 
 
+- Implement tight and ZRLE encoding
+
 - Support for Spice protocol.
 - Support for Spice protocol.
 
 
-- Implement tight and ZRLE encoding
+- Consider RDP protocol.
+
+- Consider NX protocol.
 
 

+ 7 - 4
include/canvas.js

@@ -28,6 +28,7 @@ var Canvas, Canvas_native;
 Canvas = {
 Canvas = {
 
 
 prefer_js  : false,
 prefer_js  : false,
+force_canvas : false,
 
 
 true_color : false,
 true_color : false,
 colourMap  : [],
 colourMap  : [],
@@ -176,8 +177,7 @@ init: function (id) {
 
 
     if (Canvas.has_imageData) {
     if (Canvas.has_imageData) {
         console.log("Canvas supports imageData");
         console.log("Canvas supports imageData");
-        Canvas._rgbxImage = Canvas._rgbxImageData;
-        Canvas._cmapImage = Canvas._cmapImageData;
+        Canvas.force_canvas = false;
         if (Canvas.ctx.createImageData) {
         if (Canvas.ctx.createImageData) {
             // If it's there, it's faster
             // If it's there, it's faster
             console.log("Using Canvas createImageData");
             console.log("Using Canvas createImageData");
@@ -186,18 +186,21 @@ init: function (id) {
             console.log("Using Canvas getImageData");
             console.log("Using Canvas getImageData");
             Canvas._imageData = Canvas._imageDataGet;
             Canvas._imageData = Canvas._imageDataGet;
         }
         }
-        if (Util.Engine.webkit) {
+        if (Util.Engine.webkit || Util.Engine.gecko) {
             console.log("Prefering javascript operations");
             console.log("Prefering javascript operations");
             Canvas.prefer_js = true;
             Canvas.prefer_js = true;
         } else {
         } else {
             console.log("Prefering Canvas operations");
             console.log("Prefering Canvas operations");
             Canvas.prefer_js = false;
             Canvas.prefer_js = false;
         }
         }
+        Canvas._rgbxImage = Canvas._rgbxImageData;
+        Canvas._cmapImage = Canvas._cmapImageData;
     } else {
     } else {
         console.log("Canvas lacks imageData, using fillRect (slow)");
         console.log("Canvas lacks imageData, using fillRect (slow)");
+        Canvas.force_canvas = true;
+        Canvas.prefer_js = false;
         Canvas._rgbxImage = Canvas._rgbxImageFill;
         Canvas._rgbxImage = Canvas._rgbxImageFill;
         Canvas._cmapImage = Canvas._cmapImageFill;
         Canvas._cmapImage = Canvas._cmapImageFill;
-        Canvas.prefer_js = false;
     }
     }
 
 
     Canvas.colourMap = [];
     Canvas.colourMap = [];