withProgress = function(fn, draw) {
        return function(block) {
            fn(block);
            doDecodeProgress(draw);
        };
    }
@param{boolean=} draw Whether to draw progress bar or not; this is not idempotent because of translucency.
                      Note that this means that the text will be unsynchronized with the progress bar on non-frames;
                      but those are typically so small (GCE etc.) that it doesn't really matter. TODO: Do this properly.