Sounds good (no pun intended ;) , please open a pull request to the
incoming branch and we can discuss details there.

- Alon



On Mon, Feb 10, 2014 at 5:49 PM, Richard Janicek <[email protected]> wrote:

> Hello,
>
> I'm pretty happy with the sdl audio proxy I added to proxy to worker mode.
> I implemented it into VICE.js. Proxy to worker allows VICE to run a little
> closer to how it was designed and squeezes some extra performance out of
> the hardware, especially lower powered hardware.
>
> I tested with sdl_audio_beep.cpp and added a proxy to worker version of
> that test (test_sdl_audio_beeps_proxy).
>
> Here is the commit for your consideration:
>
> * SDL audio proxy 
> commit<https://github.com/rjanicek/emscripten/commit/e3355d262064313ee60fbb7d1e238c247b9b0c90>
>
> * VICE.js demo without proxy to worker <http://tinyurl.com/ltjoau7>
>
> * VICE.js demo with proxy to worker <http://tinyurl.com/kyhxctt>
>
>
> Thank you,
>
> § Richard Janicek <http://janicek.co> ¦ Clock2D.com<http://www.clock2d.com/>
>  ¦ RetroPlay.co ¦ Chrome<https://chrome.google.com/webstore/search/Janicek>
>
>
> On Sun, Jan 5, 2014 at 7:12 PM, Alon Zakai <[email protected]> wrote:
>
>> Yes, with a minimal testcase.
>>
>> - Alon
>>
>>
>>
>> On Sun, Jan 5, 2014 at 3:55 PM, Richard Janicek <[email protected]> wrote:
>>
>>> Hi Alon,
>>>
>>> `#if` pre-processor command inside `#include x.js` is not working.
>>> Should I file a bug?
>>>
>>> Thanks,
>>>
>>> § Richard Janicek <http://janicek.co>
>>>
>>>
>>> On Thu, Jan 2, 2014 at 8:39 PM, Alon Zakai <[email protected]>wrote:
>>>
>>>> I added an option now to do
>>>>
>>>> #include x.js
>>>>
>>>> in files like library_sdl.js, so you can include another file from
>>>> src/. Note though that you will need to manually include that file to
>>>> proxyClient.js, since that file is handled only be emcc.
>>>>
>>>> - Alon
>>>>
>>>>
>>>>
>>>> On Thu, Jan 2, 2014 at 4:00 PM, Richard Janicek <[email protected]>wrote:
>>>>
>>>>> Hi Alon,
>>>>>
>>>>> I am exploring the audio proxy options you suggested. First I tried to
>>>>> create shims for the Browser Audio classes. This approach was not 
>>>>> practical
>>>>> for these reasons:
>>>>>     * A large API needs to be proxied, lots of different Classes some
>>>>> vary by browser.
>>>>>     * Managing all the audio object proxies (createBufferSource,
>>>>> createBuffer) is complicated.
>>>>>     * Need to track references to proxied objects.
>>>>>     * Determining when to free objects can be difficult. Objects can
>>>>> have references to each other.
>>>>>     * `postMessage` communication would be chatty.
>>>>>
>>>>> Next I am trying to modify the C level calls, this seems more
>>>>> promising. You mentioned to replace MIX_* calls, however my application
>>>>> only uses the SDL_*Audio functions so I am working on those. I am planning
>>>>> on copying some parts of the SDL_*Audio functions to the proxyClient. This
>>>>> means there will be some duplicated code. I would prefer to avoid this if
>>>>> possible.
>>>>>
>>>>> My question: Is there a way to "include" a js file inside both
>>>>> library_sdl.js and proxyClient.js? This way I could isolate the shared 
>>>>> code
>>>>> in one place and use it in both client and worker.
>>>>>
>>>>> Thank you!
>>>>>
>>>>> ~Richard Janicek
>>>>>
>>>>> On Monday, December 30, 2013 12:28:02 AM UTC-5, azakai wrote:
>>>>>
>>>>>> Ok, the main code is in src/proxy*.js. You can see how basic canvas
>>>>>> operations are forwarded there.
>>>>>>
>>>>>> The proxying there listens to DOM events and sends them over. For SDL
>>>>>> audio, there are a few options and I am not sure which is best. One is to
>>>>>> proxy at the C level - replace MIX_* calls in the worker with functions
>>>>>> that proxy over. Or, another is to proxy at the HTML Audio object, 
>>>>>> replace
>>>>>> it with a shim that proxies. First step is to look at both of those
>>>>>> options, I think.
>>>>>>
>>>>>> - Alon
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sun, Dec 29, 2013 at 6:53 PM, Richard Janicek <[email protected]>wrote:
>>>>>>
>>>>>>> Any guidelines you could provide would be much appreciated. I will
>>>>>>> attempt to implement.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sun, Dec 29, 2013 at 9:30 PM, Alon Zakai <[email protected]>wrote:
>>>>>>>
>>>>>>>> Yes, audio is possible as well. I don't have plans to work on this
>>>>>>>> myself but happy to give guidelines if anyone else wants to.
>>>>>>>>
>>>>>>>> - Alon
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sun, Dec 29, 2013 at 4:54 PM, Richard Janicek <[email protected]
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Hello,
>>>>>>>>>
>>>>>>>>> I am testing --proxy-to-worker with VICE.js. Looks like it's
>>>>>>>>> getting +10% performance boost on Chrome. Very nice.
>>>>>>>>>
>>>>>>>>> Would it be possible to also proxy SDL audio?
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> ~Richard Janicek
>>>>>>>>>
>>>>>>>>> On Saturday, September 14, 2013 12:37:21 AM UTC-4, azakai wrote:
>>>>>>>>>
>>>>>>>>>> Close to that, yes. SDL_Delay can be implemented as a busy-wait
>>>>>>>>>> both on the main thread and in workers, but on the main thread _it 
>>>>>>>>>> blocks
>>>>>>>>>> rendering_. On workers, it just blocks event handling; the worker 
>>>>>>>>>> can still
>>>>>>>>>> send out paint events.
>>>>>>>>>>
>>>>>>>>>> This actually happens in Doom, it does screen wipe effects
>>>>>>>>>> synchronously. Those are not shown when running on the main thread, 
>>>>>>>>>> because
>>>>>>>>>> nothing renders until the event loop is exited. But when running in a
>>>>>>>>>> worker, they are shown perfectly. Input events can't be handled 
>>>>>>>>>> during that
>>>>>>>>>> time, but in that case it doesn't matter - this might be a problem 
>>>>>>>>>> in other
>>>>>>>>>> ones.
>>>>>>>>>>
>>>>>>>>>> I see it refresh the canvas very quickly, and this is without
>>>>>>>>>> much optimization (no typed array transfers, for example). No reason 
>>>>>>>>>> it
>>>>>>>>>> can't be 60fps.
>>>>>>>>>>
>>>>>>>>>> - Alon
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, Sep 13, 2013 at 6:34 PM, Richard Janicek <[email protected]
>>>>>>>>>> > wrote:
>>>>>>>>>>
>>>>>>>>>>>  Oh wow, I think this may work for my app. Does this mean it is
>>>>>>>>>>> possible to allow synchronous blocking flow control in the worker 
>>>>>>>>>>> thread
>>>>>>>>>>> (SDL_Delay) ? How fast can it refresh the canvas, is 60 fps 
>>>>>>>>>>> possible?
>>>>>>>>>>>
>>>>>>>>>>> Thank you very much for this!
>>>>>>>>>>>
>>>>>>>>>>> § Richard Janicek <http://janicek.co> ¦ mappur<http://mappur.com>
>>>>>>>>>>>  ¦ player <http://player.janicek.co/#player> ¦ 
>>>>>>>>>>> clock2d<http://www.clock2d.com/>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Sep 13, 2013 at 8:47 PM, Alon Zakai 
>>>>>>>>>>> <[email protected]>wrote:
>>>>>>>>>>>
>>>>>>>>>>>>  If you use HTML canvas commands like lines, shapes, fills,
>>>>>>>>>>>> etc., all those need a 2D canvas context, and do not work in 
>>>>>>>>>>>> workers (yet).
>>>>>>>>>>>> Right now what works is if all you do is render pixels to a buffer 
>>>>>>>>>>>> and do
>>>>>>>>>>>> SDL_UnlockSurface to push them to the screen.
>>>>>>>>>>>>
>>>>>>>>>>>> But this is temporary, there is spec work going on to get
>>>>>>>>>>>> canvas and WebGL to workers, it will happen eventually, see e.g.
>>>>>>>>>>>>
>>>>>>>>>>>> https://bugzilla.mozilla.org/show_bug.cgi?id=801176
>>>>>>>>>>>>
>>>>>>>>>>>> - Alon
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Fri, Sep 13, 2013 at 5:44 PM, Richard Janicek <
>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> What do you mean by "software renderer" ? My app 
>>>>>>>>>>>>> (VICE.js<http://vice.janicek.co/>)
>>>>>>>>>>>>> renders frames to HTML canvas, does this mean I can't take 
>>>>>>>>>>>>> advantage of
>>>>>>>>>>>>> this new technique?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you,
>>>>>>>>>>>>>
>>>>>>>>>>>>> § Richard Janicek <http://janicek.co> ¦ mappur<http://mappur.com>
>>>>>>>>>>>>>  ¦ clock2d <http://www.clock2d.com/>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Sep 13, 2013 at 7:49 PM, Alon Zakai <[email protected]
>>>>>>>>>>>>> > wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> 1. Proxing to/from a worker. With
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> emcc --proxy-to-worker
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> the compiler will generate html and js files, where the html
>>>>>>>>>>>>>> is a small shim that just proxies events to the js, which runs 
>>>>>>>>>>>>>> in a worker,
>>>>>>>>>>>>>> and the js sends back the SDL screen which the html then 
>>>>>>>>>>>>>> renders. So
>>>>>>>>>>>>>> basically this lets you run simple SDL apps in a worker, which 
>>>>>>>>>>>>>> is usually
>>>>>>>>>>>>>> good for performance (doing less on the main thread).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This just supports code that does not use HTML canvas or
>>>>>>>>>>>>>> WebGL, because those don't run in workers in browsers (yet). So 
>>>>>>>>>>>>>> it will
>>>>>>>>>>>>>> work right now for a software renderer, for example. I've tested 
>>>>>>>>>>>>>> this on
>>>>>>>>>>>>>> Doom.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2. emscripten_async_load_script (see emscripten.h)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This loads a url into a newly-created HTML script element.
>>>>>>>>>>>>>> This is the most efficient way to load a new large amount of 
>>>>>>>>>>>>>> code into your
>>>>>>>>>>>>>> app (emscripten_run_script converts binary to text, then evals, 
>>>>>>>>>>>>>> which is
>>>>>>>>>>>>>> worse). It also integrates with the run dependencies system, 
>>>>>>>>>>>>>> which means
>>>>>>>>>>>>>> that you can generate code to preload some files using the file 
>>>>>>>>>>>>>> packager,
>>>>>>>>>>>>>> and emscripten_async_load_script of that will asynchronously 
>>>>>>>>>>>>>> load the
>>>>>>>>>>>>>> script as well as fetch the file data and prepare it; the 
>>>>>>>>>>>>>> callback will
>>>>>>>>>>>>>> happen when all the data is ready. This can be used e.g. to load 
>>>>>>>>>>>>>> the next
>>>>>>>>>>>>>> level in your game, at the right time, and in general it can 
>>>>>>>>>>>>>> make it easier
>>>>>>>>>>>>>> to avoid preloading everything at the beginning, which can cause 
>>>>>>>>>>>>>> a
>>>>>>>>>>>>>> noticeable pause.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> - Alon
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>  --
>>>>>>>>>>>>>> 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+unsubscribe
>>>>>>>>>>>>>> @googlegroups.com.
>>>>>>>>>>>>>> For more options, visit https://groups.google.com/grou
>>>>>>>>>>>>>> ps/opt_out.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>  --
>>>>>>>>>>>>> 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+unsubscribe
>>>>>>>>>>>>> @googlegroups.com.
>>>>>>>>>>>>> For more options, visit https://groups.google.com/grou
>>>>>>>>>>>>> ps/opt_out.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>  --
>>>>>>>>>>>> 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+unsubscribe
>>>>>>>>>>>> @googlegroups.com.
>>>>>>>>>>>> For more options, visit https://groups.google.com/grou
>>>>>>>>>>>> ps/opt_out.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  --
>>>>>>>>>>> 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+unsubscribe
>>>>>>>>>>> @googlegroups.com.
>>>>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out
>>>>>>>>>>> .
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  --
>>>>>>>>> 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 [email protected].
>>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>>
>>>>>>>>
>>>>>>>>  --
>>>>>>>> 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 [email protected].
>>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>> 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 [email protected].
>>>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>>>
>>>>>>
>>>>>>  --
>>>>> 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 [email protected].
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>
>>>>
>>>>  --
>>>> 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 [email protected].
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>
>>>  --
>>> 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 [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>  --
>> 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 [email protected].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>  --
> 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 [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to