> It seems the printf output is made more responsive by sending data to the JS-print method every time \n (10) or 0 (string termination) is found, which is great
It already does that, doesn't it? If not, can you share your patch that fixes it? On Wed, Jul 15, 2020 at 3:01 PM Bernhard Ege <gal...@gmail.com> wrote: > I haven't made a standalone test yet as that would require quite some > time. However, I hope with the given information, that we can see what is > going on and if there is anything to do about it. Problem is I am using > webassembly inside webworker (works jusy fine), but it can muddy the > experience and getting a clean standalone test means creating a project > from scratch. I am willing to do so if we can't make a clear case of the > information below: > > This is how I compile my C-project (just updated to latest emscripten, > problem remains): > > & emcc -s WASM=1 -s ALLOW_MEMORY_GROWTH -s > EXPORTED_FUNCTIONS="['_main','_malloc','_Iterate','_getImageData','_getBufferPtr']" > -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap", "getValue", "setValue"]' $(ls > *.c| % {$_.FullName}) $(ls Racer/*.c | % {$_.FullName}) -I. -ferror-limit=0 > -o myrekrig.js > > My source is current folder and the Racer subfolder. I just want a > myrekrig.js file generated (along with the webassembly). > > I use the webassembly as a library, i.e. it doesn't exit, meaning I call > repeatedly from javascript to wasm and have wasm repeatedly output text > using printf (with and without "\n"). The printf are caught using the > override in the Module setup: > > var Module = { > print: (function() { return function(text) { console.log(text); > console.log(ascii_to_hexa(text); }; } > } > > ascii_to_hexa simply converts text to hex and is used to verify proper > operation. > > I normally push the text via the message queue to the main page that > appends the text to a textarea (which obeys newlines). > > One example of text received that in the printf is \n terminated: > > > 536c65657079416e742020202020302020202030202020302e30202020202030202020202030202020202030202020302e302520202020202031202020302e3025202020302e3025202020302e3025 > > Clearly no newline present (last 2 digits, 25, is a %-sign). > > In the generated myrekrig.js, I find this section: > > printChar:function(stream, curr) { > var buffer = SYSCALLS.buffers[stream]; > assert(buffer); > if (curr === 0 || curr === 10) { > (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0)); > buffer.length = 0; > } else { > buffer.push(curr); > } > > If I remove "|| curr === 10", then the output is correct, newline or no > newline. However, this also means the output is buffered for a long time > (or until a buffer is filler or some other event happens), delaying the > text for a long time, which is also unwanted. The hack will also be > overwritten on the next compilation. I am considering simply using sprintf > and push the string from wasm to js domain manually, but I hope I don't > have to. > > It seems the printf output is made more responsive by sending data to the > JS-print method every time \n (10) or 0 (string termination) is found, > which is great (if it preserves all characters, including \n, which it > doesn't seem to). Could we make it operate using a smaller buffer or maybe > using a forced flush (or a timeout, not sure that is possible)? > > Does the above information make sense? > > Thanks, > > Bernhard > > On Wednesday, 15 July 2020 23:16:56 UTC+2, Alon Zakai wrote: >> >> One possible noticeable difference with a normal target is that we print >> using console.log() and other JS APIs, which can't print partial lines - >> they always add a newline. So we buffer, and call those APIs only when we >> reach a newline. As a result, you won't see partial lines printed until a >> newline is reached. >> >> If that's not the issue here, that might be an unknown bug somehow, a >> testcase would help. >> >> On Wed, Jul 15, 2020 at 4:40 AM Shlomi Fish <shl...@shlomifish.org> >> wrote: >> >>> Hi! >>> >>> On Wed, 15 Jul 2020 02:32:24 -0700 (PDT) >>> Bernhard Ege <gal...@gmail.com> wrote: >>> >>> > When I compile my C-code using emscripten and in C use printf and in >>> > javascript receive the string via 'print', the newlines are removed. >>> > >>> > This makes it quite difficult to discern the difference between these >>> two >>> > printf's: >>> > >>> > printf("foo"); >>> > printf("foo\n"); >>> > >>> > Visually, there is an important difference, though. >>> > >>> > Is there some flag or some way print can be told to return the >>> newlines? >>> > >>> >>> seems to work here: >>> >>> ``` >>> [shlomif@localhost shlomif-c-snippets]$ cat newline-printf.c >>> /* >>> * License is the MIT/Expat license - http://opensource.org/licenses/MIT >>> . >>> * ( https://en.wikipedia.org/wiki/MIT_License ). >>> */ >>> #include <stdio.h> >>> >>> int main(void) >>> { >>> printf ("Hello World!"); >>> printf ("(emcc)\n"); >>> >>> return 0; >>> } >>> [shlomif@localhost shlomif-c-snippets]$ emcc newline-printf.c >>> [shlomif@localhost shlomif-c-snippets]$ ls -lrt *.js >>> -rw-r--r--. 1 shlomif shlomif 110446 Jul 15 14:36 a.out.js >>> [shlomif@localhost shlomif-c-snippets]$ node a.out.js >>> Hello World!(emcc) >>> [shlomif@localhost shlomif-c-snippets]$ >>> ``` >>> >>> Can you share a self-contained sample? See: >>> https://github.com/shlomif/how-to-share-code-online (read the whole >>> thing). >>> >>> Thanks in advance. >>> >>> -- >>> >>> Shlomi Fish https://www.shlomifish.org/ >>> https://github.com/sindresorhus/awesome - curated list of lists >>> >>> At this point, I'd like to take a moment to speak to you about the Adobe >>> PSD >>> format. PSD is not a good format. PSD is not even a bad format. Calling >>> it >>> such would be an insult to other bad formats, such as PCX or JPEG. No, >>> PSD is >>> an abysmal format. >>> — https://github.com/gco/xee/blob/master/XeePhotoshopLoader.m >>> >>> Please reply to list if it's a mailing list post - >>> https://shlom.in/reply . >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "emscripten-discuss" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to emscripten-discuss+unsubscr...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/emscripten-discuss/20200715144004.58141cb4%40telaviv1.shlomifish.org >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/emscripten-discuss/496ad5df-e521-41b4-bb50-a26ae13b19c6o%40googlegroups.com > <https://groups.google.com/d/msgid/emscripten-discuss/496ad5df-e521-41b4-bb50-a26ae13b19c6o%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpRkJgD-dqAE1JP-V9w3FLESMnLtFysvNe%3Dn8QCYKhnSYg%40mail.gmail.com.