xpra icon
Bug tracker and wiki

Ticket #1685: debug-categories.patch

File debug-categories.patch, 17.5 KB (added by Antoine Martin, 3 years ago)

choose logging categories to debug

  • html5/connect.html

     
    240240                                        <input type="checkbox" id="video"> <span>Video (experimental) <input type="checkbox" id="mediasource_video"> Native decoding</span>
    241241                                  </li>
    242242                                  <li class="list-group-item">
    243                                         <input type="checkbox" id="debug"> <span>Debugging</span>
     243                                        <span>Debugging</span>:
     244                                        <input type="checkbox" id="debug_main"> <span>Main</span>,
     245                                        <input type="checkbox" id="debug_keyboard"> <span>keyboard</span>,
     246                                        <input type="checkbox" id="debug_clipboard"> <span>clipboard</span>
     247                                        <input type="checkbox" id="debug_draw"> <span>draw</span>,
     248                                        <input type="checkbox" id="debug_audio"> <span>audio</span>,
     249                                        <input type="checkbox" id="debug_network"> <span>network</span>
    244250                                  </li>
    245251                                </ul>
    246252                          </div>
     
    307313                "exit_with_children", "exit_with_client",
    308314                "sharing", "steal", "reconnect", "swap_keys",
    309315                "video", "mediasource_video",
    310                 "debug", "insecure"];
     316                "insecure",
     317                "debug_main", "debug_keyboard", "debug_clipboard", "debug_draw", "debug_audio", "debug_network",
     318                ];
    311319        for (var i = 0; i < bool_props.length; i++) {
    312320                var prop = bool_props[i];
    313321                add_prop(prop, document.getElementById(prop).checked);
     
    505513                        "exit_with_children", "exit_with_client",
    506514                        "sharing", "steal", "reconnect", "swap_keys",
    507515                        "video", "mediasource_video",
    508                         "debug", "insecure"];
     516                        "debug_main", "debug_keyboard", "debug_clipboard", "debug_draw", "debug_audio", "debug_network",
     517                        "insecure"];
    509518        var default_on = ["steal", "clipboard", "printing", "file_transfer", "reconnect", "exit_with_children", "exit_with_client"];
    510519        if (Utilities.isMacOS()) {
    511520                default_on.push("swap_keys");
  • html5/index.html

     
    103103                                var video = getboolparam("video", false);
    104104                                var mediasource_video = getboolparam("mediasource_video", false);
    105105                                var remote_logging = getboolparam("remote_logging", true);
    106                                 var debug = getboolparam("debug", false);
    107106                                var insecure = getboolparam("insecure", false);
    108107                                var ignore_audio_blacklist = getboolparam("ignore_audio_blacklist", false);
    109108                                var clipboard = getboolparam("clipboard", true);
     
    155154                                        }
    156155                                }
    157156
     157                                var debug_categories = [];
     158                                for (var category in ["main", "keyboard", "clipboard", "draw", "audio", "network"]) {
     159                                        var debug = getboolparam("debug_"+category, false);
     160                                        if (debug) {
     161                                                debug_categories.push(category);
     162                                        }
     163                                }
     164
    158165                                // create the client
    159166                                var client = new XpraClient('screen');
    160                                 client.debug = debug;
     167                                client.debug_categories = debug_categories;
    161168                                client.remote_logging = remote_logging;
    162169                                client.sharing = sharing;
    163170                        client.insecure = insecure;
     
    178185                        if (debug) {
    179186                                //example of client event hooks:
    180187                                client.on_open = function() {
    181                                         cdebug("connection open");
     188                                        cdebug("network", "connection open");
    182189                                };
    183190                                client.on_connect = function() {
    184                                         cdebug("connection established");
     191                                        cdebug("network", "connection established");
    185192                                };
    186193                                client.on_first_ui_event = function() {
    187                                         cdebug("first ui event");
     194                                        cdebug("network", "first ui event");
    188195                                };
    189196                                client.on_last_window = function() {
    190                                         cdebug("last window disappeared");
     197                                        cdebug("network", "last window disappeared");
    191198                                };
    192199                        }
    193200
     
    255262                            }
    256263
    257264                            // attach a callback for when client closes
    258                             if(!debug) {
     265                            var debug_main = getboolparam("debug_main", false);
     266                            if(!debug_main) {
    259267                                    client.callback_close = function(reason) {
    260268                                        if(submit) {
    261269                                                var message = "Connection closed (socket closed)";
     
    297305                                                                "steal"                         : steal,
    298306                                                                "video"                         : video,
    299307                                                                "mediasource_video"     : mediasource_video,
    300                                                                 "debug"                         : debug,
    301308                                                                "remote_logging"        : remote_logging,
    302309                                                                "insecure"                      : insecure,
    303310                                                                "ignore_audio_blacklist" : ignore_audio_blacklist,
    304311                                                                }
     312                                                        for (var category in client.debug_categories) {
     313                                                                props["debug_"+category] = true;
     314                                                        }
    305315                                                if (insecure || sessionStorage) {
    306316                                                        props["password"] = password;
    307317                                                }
     
    335345                                pasteboard.on("input", function(e) {
    336346                                        var txt = pasteboard.val();
    337347                                        pasteboard.val("");
    338                                         cdebug("oninput:", txt);
     348                                        cdebug("keyboard", "oninput:", txt);
    339349                                        if (!client.topwindow) {
    340350                                                return;
    341351                                        }
     
    347357                                                        keyval = keycode;
    348358                                                        group = 0;
    349359                                                        packet = ["key-action", client.topwindow, str, true, modifiers, keyval, str, keycode, group];
    350                                                         cdebug(packet);
     360                                                        cdebug("keyboard", packet);
    351361                                                        client.send(packet);
    352362                                                        packet = ["key-action", client.topwindow, str, false, modifiers, keyval, str, keycode, group];
    353                                                         cdebug(packet);
     363                                                        cdebug("keyboard", packet);
    354364                                                        client.send(packet);
    355365                                                }
    356366                                                catch (e) {
     
    365375                            //clipboard hooks:
    366376                                pasteboard.on('paste', function (e) {
    367377                                        var paste_data = (e.originalEvent || e).clipboardData.getData('text/plain');
    368                                         cdebug("paste event, data=", paste_data);
     378                                        cdebug("clipboard", "paste event, data=", paste_data);
    369379                                client.send_clipboard_token(unescape(encodeURIComponent(paste_data)));
    370380                                return false;
    371381                                });
     
    373383                                var clipboard_buffer = client.get_clipboard_buffer();
    374384                                pasteboard.text(decodeURIComponent(escape(clipboard_buffer)));
    375385                                pasteboard.select();
    376                                 cdebug("copy event, clipboard buffer=", clipboard_buffer);
     386                                cdebug("clipboard", "copy event, clipboard buffer=", clipboard_buffer);
    377387                                client.clipboard_pending = false;
    378388                                return true;
    379389                                });
     
    381391                                var clipboard_buffer = client.get_clipboard_buffer();
    382392                                pasteboard.text(decodeURIComponent(escape(clipboard_buffer)));
    383393                                pasteboard.select();
    384                                         cdebug("cut event, clipboard buffer=", clipboard_buffer);
     394                                        cdebug("clipboard", "cut event, clipboard buffer=", clipboard_buffer);
    385395                                client.clipboard_pending = false;
    386396                                return true;
    387397                                });
     
    391401                                        var clipboard_buffer = client.get_clipboard_buffer();
    392402                                        pasteboard.text(clipboard_buffer);
    393403                                        pasteboard.select();
    394                                                 cdebug("click event, with pending clipboard buffer=", clipboard_buffer);
     404                                                cdebug("clipboard", "click event, with pending clipboard buffer=", clipboard_buffer);
    395405                                                //for IE:
    396406                                                var success = true;
    397407                                                if (window.clipboardData && window.clipboardData.setData) {
  • html5/js/Client.js

     
    4848        this.password = null;
    4949        this.insecure = false;
    5050        //connection options:
    51         this.debug = false;
    5251        this.sharing = false;
    5352        this.steal = true;
    5453        this.remote_logging = true;
     
    5756        if (Utilities.canUseWebP()) {
    5857                this.supported_encodings.push("webp");
    5958        }
     59        this.debug_categories = [];
    6060        this.start_new_session = null;
    6161        this.clipboard_enabled = false;
    6262        this.file_transfer = false;
     
    182182        this.send_log(20, arguments);
    183183        console.log.apply(console, arguments);
    184184}
    185 XpraClient.prototype._debug = function() {
    186         if (this.debug) {
    187                 console.debug.apply(console, arguments);
     185XpraClient.prototype.debug = function() {
     186        var category = arguments[0];
     187        var args = Array.from(arguments);
     188        args = args.splice(1);
     189        if (category in this.debug_categories) {
     190                console.debug.apply(console, args);
    188191        }
    189192}
    190193
     
    197200}
    198201
    199202XpraClient.prototype.init_audio = function(ignore_audio_blacklist) {
    200         this._debug("init_audio() enabled=", this.audio_enabled, ", mediasource enabled=", this.audio_mediasource_enabled, ", aurora enabled=", this.audio_aurora_enabled, ", http-stream enabled=", this.audio_httpstream_enabled);
     203        this.debug("audio", "init_audio() enabled=", this.audio_enabled, ", mediasource enabled=", this.audio_mediasource_enabled, ", aurora enabled=", this.audio_aurora_enabled, ", http-stream enabled=", this.audio_httpstream_enabled);
    201204        if(!this.audio_enabled) {
    202205                return;
    203206        }
     
    227230                        this.audio_codecs[codec_option] = codec_option;
    228231                }
    229232        }
    230         this._debug("audio codecs:", this.audio_codecs);
     233        this.debug("audio", "audio codecs:", this.audio_codecs);
    231234        if(!this.audio_codecs) {
    232235                this.audio_codec = null;
    233236                this.audio_enabled = false;
     
    486489        var packet_type = "";
    487490        var fn = "";
    488491        packet_type = packet[0];
    489         ctx._debug("received a", packet_type, "packet");
     492        ctx.debug("network", "received a", packet_type, "packet");
    490493        fn = ctx.packet_handlers[packet_type];
    491494        if (fn==undefined) {
    492495                console.error("no packet handler for "+packet_type+"!");
     
    616619        }
    617620        var str = event.key || String.fromCharCode(keycode);
    618621
    619         this._debug("processKeyEvent(", pressed, ", ", event, ") key=", keyname, "keycode=", keycode);
     622        this.debug("keyboard", "processKeyEvent(", pressed, ", ", event, ") key=", keyname, "keycode=", keycode);
    620623
    621624        //sync numlock
    622625        if (keycode==144 && pressed) {
     
    693696                var me = this;
    694697                setTimeout(function () {
    695698                        me.send(packet);
    696                         me._debug(packet);
     699                        me.debug("keyboard", packet);
    697700                        if (pressed && me.swap_keys && raw_modifiers.indexOf("meta")>=0 && ostr!="meta") {
    698701                                //macos will swallow the key release event if the meta modifier is pressed,
    699702                                //so simulate one immediately:
    700703                                packet = ["key-action", me.topwindow, keyname, false, modifiers, keyval, str, keycode, group];
    701                                 me._debug(packet);
     704                                me.debug("keyboard", packet);
    702705                                me.send(packet);
    703706                        }
    704707                }, 0);
     
    715718                }
    716719                //let the OS see Control (or Meta on macos) and Shift:
    717720                if (clipboard_modifier_keys.indexOf(keyname)>=0) {
    718                         this._debug("passing clipboard modifier key event to browser:", keyname);
     721                        this.debug("keyboard", "passing clipboard modifier key event to browser:", keyname);
    719722                        return true;
    720723                }
    721724                //let the OS see Shift + Insert:
    722725                if (shift && keyname=="Insert") {
    723                         this._debug("passing clipboard combination Shift+Insert to browser");
     726                        this.debug("keyboard", "passing clipboard combination Shift+Insert to browser");
    724727                        return true;
    725728                }
    726729                var clipboard_mod_set = raw_modifiers.indexOf(clipboard_modifier)>=0;
     
    727730                if (clipboard_mod_set) {
    728731                        var l = keyname.toLowerCase();
    729732                        if (l=="c" || l=="x" || l=="v") {
    730                                 this._debug("passing clipboard combination to browser:", clipboard_modifier, "+", keyname);
     733                                this.debug("keyboard", "passing clipboard combination to browser:", clipboard_modifier, "+", keyname);
    731734                                return true;
    732735                        }
    733736                }
     
    774777};
    775778
    776779XpraClient.prototype._get_keyboard_layout = function() {
    777         this._debug("_get_keyboard_layout() keyboard_layout=", this.keyboard_layout);
     780        this.debug("keyboard", "_get_keyboard_layout() keyboard_layout=", this.keyboard_layout);
    778781        if (this.keyboard_layout)
    779782                return this.keyboard_layout;
    780783        return Utilities.getKeyboardLayout();
     
    938941        var digests = ["hmac", "hmac+md5", "xor"]
    939942        if (typeof forge!=='undefined') {
    940943                try {
    941                         this._debug("forge.md.algorithms=", forge.md.algorithms);
     944                        this.debug("network", "forge.md.algorithms=", forge.md.algorithms);
    942945                        for (var hash in forge.md.algorithms) {
    943946                                digests.push("hmac+"+hash);
    944947                        }
    945                         this._debug("digests:", digests);
     948                        this.debug("network", "digests:", digests);
    946949                }
    947950                catch (e) {
    948951                        console.error("Error probing forge crypto digests:", e);
     
    12081211XpraClient.prototype._window_mouse_click = function(win, button, pressed, x, y, modifiers, buttons) {
    12091212        var wid = win.wid;
    12101213        var client = win.client;
    1211         //client._debug("click focus=", client.focus, ", wid=", wid);
     1214        //client.debug("main", "click focus=", client.focus, ", wid=", wid);
    12121215        // dont call set focus unless the focus has actually changed
    12131216        if(client.focus != wid) {
    12141217                client._window_set_focus(win);
     
    14331436                        document.body.removeChild(this.audio);
    14341437                }
    14351438                catch (e) {
    1436                         this._debug("failed to remove audio from page:", e);
     1439                        this.debug("audio", "failed to remove audio from page:", e);
    14371440                }
    14381441                this.audio = null;
    14391442        }
     
    15241527XpraClient.prototype._process_disconnect = function(packet, ctx) {
    15251528        // save the disconnect reason
    15261529        var reason = packet[1];
    1527         ctx._debug("disconnect reason:", reason);
     1530        ctx.debug("main", "disconnect reason:", reason);
    15281531        if (ctx.reconnect_in_progress) {
    15291532                return;
    15301533        }       
     
    19931996        var h = packet[3];
    19941997        var encoding = packet[4];
    19951998        var img_data = packet[5];
    1996         ctx._debug("window-icon: ", encoding, " size ", w, "x", h);
     1999        ctx.debug("main", "window-icon: ", encoding, " size ", w, "x", h);
    19972000        var win = ctx.id_to_window[wid];
    19982001        if (win) {
    19992002                var src = win.update_icon(w, h, encoding, img_data);
     
    20192022
    20202023XpraClient.prototype.request_redraw = function(win) {
    20212024        // request that drawing to screen takes place at next available opportunity if possible
    2022         this._debug("request_redraw for", win);
     2025        this.debug("draw", "request_redraw for", win);
    20232026        win.swap_buffers();
    20242027        if(window.requestAnimationFrame) {
    20252028                if (!this.redraw_windows.includes(win)) {
     
    20312034                        this.draw_pending = now;
    20322035                        var me = this;
    20332036                        window.requestAnimationFrame(function() {
    2034                                 me._debug("animation frame:", me.redraw_windows.length, "windows to paint");
     2037                                me.debug("draw", "animation frame:", me.redraw_windows.length, "windows to paint");
    20352038                                me.draw_pending = 0;
    20362039                                // draw all the windows in the list:
    20372040                                while (me.redraw_windows.length>0) {
     
    20772080                protocol.send(["damage-sequence", packet_sequence, wid, width, height, decode_time, message]);
    20782081        }
    20792082        if (!win) {
    2080                 ctx._debug('cannot paint, window not found:', wid);
     2083                ctx.debug("draw", 'cannot paint, window not found:', wid);
    20812084                send_damage_sequence(-1, "window not found");
    20822085                return;
    20832086        }
     
    20972100                                else {
    20982101                                        decode_time = Math.round(Utilities.monotonicTime() - start);
    20992102                                }
    2100                                 ctx._debug("decode time for ", coding, " sequence ", packet_sequence, ": ", decode_time, ", flush=", flush);
     2103                                ctx.debug("draw", "decode time for ", coding, " sequence ", packet_sequence, ": ", decode_time, ", flush=", flush);
    21012104                                send_damage_sequence(decode_time, error || "");
    21022105                        }
    21032106                );
     
    21432146XpraClient.prototype.add_sound_data = function(codec, buf, metadata) {
    21442147        var MIN_START_BUFFERS = 4;
    21452148        var MAX_BUFFERS = 250;
    2146         this._debug("sound-data: ", codec, ", ", buf.length, "bytes");
     2149        this.debug("audio", "sound-data: ", codec, ", ", buf.length, "bytes");
    21472150        if (this.audio_buffers.length>=MAX_BUFFERS) {
    21482151                this.warn("audio queue overflowing: "+this.audio_buffers.length+", stopping");
    21492152                this.close_audio();
     
    21502153                return;
    21512154        }
    21522155        if (metadata) {
    2153                 this._debug("audio metadata=", metadata);
     2156                this.debug("audio", "audio metadata=", metadata);
    21542157                //push metadata first:
    21552158                for (var i = 0; i < metadata.length; i++) {
    2156                         this._debug("metadata[", i, "]=", metadata[i], ", length=", metadata[i].length, ", type=", Object.prototype.toString.call(metadata[i]));
     2159                        this.debug("audio", "metadata[", i, "]=", metadata[i], ", length=", metadata[i].length, ", type=", Object.prototype.toString.call(metadata[i]));
    21572160                        this.audio_buffers.push(Utilities.StringToUint8(metadata[i]));
    21582161                }
    21592162                //since we have the metadata, we should be good to go:
     
    21912194}
    21922195
    21932196XpraClient.prototype._audio_start_stream = function() {
    2194         this.log("audio start of "+this.audio_framework+" "+this.audio_codec+" stream");
     2197        this.debug("audio", "audio start of "+this.audio_framework+" "+this.audio_codec+" stream");
    21952198        if (this.audio_framework=="mediasource") {
    21962199                this.audio.play();
    21972200        }
     
    22032206XpraClient.prototype._audio_ready = function() {
    22042207        if (this.audio_framework=="mediasource") {
    22052208                //check media source buffer state:
    2206                 this._debug("mediasource state=", MediaSourceConstants.READY_STATE[this.audio.readyState], ", network state=", MediaSourceConstants.NETWORK_STATE[this.audio.networkState]);
    2207                 this._debug("audio paused=", this.audio.paused, ", queue size=", this.audio_buffers.length, ", source ready=", this.audio_source_ready, ", source buffer updating=", this.audio_source_buffer.updating);
     2209                this.debug("audio", "mediasource state=", MediaSourceConstants.READY_STATE[this.audio.readyState], ", network state=", MediaSourceConstants.NETWORK_STATE[this.audio.networkState]);
     2210                this.debug("audio", "audio paused=", this.audio.paused, ", queue size=", this.audio_buffers.length, ", source ready=", this.audio_source_ready, ", source buffer updating=", this.audio_source_buffer.updating);
    22082211                var asb = this.audio_source_buffer;
    22092212                return (asb!=null) && (!asb.updating);
    22102213        }
     
    22312234        if (!this.clipboard_enabled) {
    22322235                return;
    22332236        }
    2234         this._debug("sending clipboard token with data:", data);
     2237        this.debug("keyboard", "sending clipboard token with data:", data);
    22352238        var packet = ["clipboard-token", "CLIPBOARD", [], "STRING", "STRING", data.length, "bytes", data, false, true, true];
    22362239        this.send(packet);
    22372240}
     
    22402243        if (!ctx.clipboard_enabled) {
    22412244                return;
    22422245        }
    2243         ctx._debug("clipboard token:", packet);
     2246        this.debug("keyboard", "clipboard token:", packet);
    22442247        // we don't actually set the clipboard here,
    22452248        // because we can't (the browser security won't let us)
    22462249        // we just record the contents and actually set the clipboard