cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Grieve <agri...@chromium.org>
Subject Re: Windows Phone binary bridge
Date Thu, 17 Apr 2014 19:00:59 GMT
Nexus 7 2nd gen on kitkat.

On Thu, Apr 17, 2014 at 9:56 AM, Brian LeRoux <b@brian.io> wrote:
> super interesting, what device were you testing w/ this?
>
>
> On Thu, Apr 17, 2014 at 9:56 AM, Andrew Grieve <agrieve@chromium.org> wrote:
>>
>> Finally got to testing this out in Android's bridge. Strangely, it's
>> about 50% slower for 5k payloads. I tested this using the exec
>> benchmark in mobilespec, and a custom branch I just added to
>> cordova-js in case anyone else wants to give it a whirl. The page does
>> stay more responsive when doing it async, so we may want to switch to
>> this one day anyways, but for now I'm shelving.
>>
>> On Wed, Dec 18, 2013 at 7:01 AM, Andrew Grieve <agrieve@chromium.org>
>> wrote:
>> > Neat! Just played with it in Chrome and FileReader certainly does seem
>> > faster.
>> >
>> > Ian's on a side project this week, but he spent a good amount of time
>> > figuring out the fastest way to do this conversion when he added that
>> > in, so
>> > I'm sure he'll have a look.
>> >
>> >
>> > On Wed, Dec 18, 2013 at 6:42 AM, Sergey Grebnov (Akvelon)
>> > <v-segreb@microsoft.com> wrote:
>> >>
>> >> Does anyone see this interesting? Any real cases where it could be
>> >> important?
>> >>
>> >> Thx!
>> >> Sergey
>> >> -----Original Message-----
>> >> From: Sergey Grebnov (Akvelon)
>> >> Sent: Wednesday, December 11, 2013 8:33 PM
>> >> To: 'dev@cordova.apache.org'
>> >> Subject: RE: Windows Phone binary bridge
>> >>
>> >> I've just compared ArrayBuffer to string conversion time via currently
>> >> used base64 method and via blob reading and the second one runs faster
>> >> (2-4
>> >> times on WP8 HTC 8S and 7-10 times faster on iPhone5; don't have
>> >> Android
>> >> device to test).
>> >>
>> >> So in case browser natively support FileReader and Blob api we may want
>> >> to
>> >> use that method.
>> >>
>> >> Here is test page I use
>> >> http://goo.gl/5mpjYu
>> >> http://sgrebnov.github.io/tmp/binPerfTest/www/js/index.js
>> >>
>> >> testBase64Str: function(data) {
>> >>          var defer = Q.defer();
>> >>         defer.resolve(base64.fromArrayBuffer(data));
>> >>
>> >>         return defer.promise;
>> >>     },
>> >>
>> >> testBlobReader: function(data) {
>> >>         var defer = Q.defer(),
>> >>             blob = new Blob([data]),
>> >>             reader = new FileReader();
>> >>
>> >>         reader.onloadend = function(e) {
>> >>             defer.resolve(e.target.result);
>> >>         }
>> >>         reader.readAsText(blob, "UTF-8");
>> >>         return defer.promise;
>> >>     },
>> >>
>> >>
>> >> Thx!
>> >> Sergey
>> >> -----Original Message-----
>> >> From: Sergey Grebnov (Akvelon)
>> >> Sent: Monday, December 9, 2013 9:36 PM
>> >> To: dev@cordova.apache.org
>> >> Subject: RE: Windows Phone binary bridge
>> >>
>> >> I see.. I've added similar logic to windows phone exec bridge
>> >> https://github.com/apache/cordova-js/pull/59
>> >>
>> >> Tested on File Api, below  is updated version after patching wp bridge
>> >> https://github.com/apache/cordova-plugin-file/pull/18
>> >>
>> >> PS. As showed at [1] manual array manipulation is not the fastest
>> >> solution
>> >> but it is the most convenient synchronous one
>> >>
>> >> [1]http://updates.html5rocks.com/2012/06/How-to-convert-ArrayBuffer-to-and-from-String
>> >>
>> >> Thx!
>> >> Sergey
>> >> -----Original Message-----
>> >> From: iclelland@google.com [mailto:iclelland@google.com] On Behalf Of
>> >> Ian
>> >> Clelland
>> >> Sent: Monday, December 9, 2013 9:06 PM
>> >> To: dev@cordova.apache.org
>> >> Subject: Re: Windows Phone binary bridge
>> >>
>> >> Yes, we used to use that; I had to switch it to use a base64-encoding
>> >> method; Using Array.prototype.apply() literally pushes every element of
>> >> the
>> >> array individually onto the stack as a separate argument. The exact
>> >> limit
>> >> depends on the device, but eventually they all fail with a "Stack
>> >> exploded"-sort-of-exception.
>> >>
>> >> Ian
>> >>
>> >>
>> >> On Mon, Dec 9, 2013 at 10:32 AM, Michal Mocny <mmocny@chromium.org>
>> >> wrote:
>> >>
>> >> > Where do you see an implementation using Array.apply(null, new
>> >> > Uint8Array(...)) ?
>> >> >
>> >> > We used to have this bug in ios/android binary bridge but that was
>> >> > patched many releases ago (unless there is a stray one somewhere that
>> >> > still needs fixing).
>> >> >
>> >> >
>> >> > On Mon, Dec 9, 2013 at 10:15 AM, Sergey Grebnov (Akvelon) <
>> >> > v-segreb@microsoft.com> wrote:
>> >> >
>> >> > > Working on this...I just found out that current implementation
via
>> >> > > Array.apply(null, new Uint8Array(...)) doesn't work for big buffers
>> >> > (bigger
>> >> > > than 150Kb) and could raise Maximum call stack size exceeded error.
>> >> > > So
>> >> > I'm
>> >> > > looking on better/right way to do typed arrays conversion... will
>> >> > > keep
>> >> > you
>> >> > > updated.
>> >> > >
>> >> > > Thx!
>> >> > > Sergey
>> >> > > -----Original Message-----
>> >> > > From: Parashuram Narasimhan (MS OPEN TECH) [mailto:
>> >> > panarasi@microsoft.com]
>> >> > > Sent: Saturday, December 7, 2013 1:52 AM
>> >> > > To: dev@cordova.apache.org
>> >> > > Subject: RE: Windows Phone binary bridge
>> >> > >
>> >> > > I think Sergey should be able to squeeze this into his schedule.
We
>> >> > > were looking at fixing plugin support and this could be a good
way
>> >> > > to start
>> >> > it.
>> >> > >
>> >> > > -----Original Message-----
>> >> > > From: Jesse [mailto:purplecabbage@gmail.com]
>> >> > > Sent: Friday, December 6, 2013 1:30 PM
>> >> > > To: dev@cordova.apache.org
>> >> > > Subject: Re: Windows Phone binary bridge
>> >> > >
>> >> > > FYI, you can buy a no contract Nokia 520 WP8 device for $120,
and
>> >> > > developing in the emulator is more than sufficient for most tasks.
>> >> > >
>> >> > > Sergey, do you got this?
>> >> > >
>> >> > >
>> >> > > @purplecabbage
>> >> > > risingj.com
>> >> > >
>> >> > >
>> >> > > On Fri, Dec 6, 2013 at 11:21 AM, Ian Clelland
>> >> > > <iclelland@chromium.org
>> >> > > >wrote:
>> >> > >
>> >> > > > On Fri, Dec 6, 2013 at 2:15 PM, Sergey Grebnov (Akvelon)
<
>> >> > > > v-segreb@microsoft.com> wrote:
>> >> > > >
>> >> > > > > Agree and  like this idea. I don't think there are many
other
>> >> > > > > components (if any) which use ArrayBuffer but must be
tested
>> >> > > > > well anyway since this changes core. Ian do you want
to
>> >> > > > > complete
>> >> > > > > this yourself or you are ok if
>> >> > > > I
>> >> > > > > handle this?
>> >> > > > >
>> >> > > >
>> >> > > > I'm totally okay with you doing it -- I don't have a real
windows
>> >> > > > phone device to test it on; I'd be committing with my eyes
closed
>> >> > > > and hoping for the best :)
>> >> > > >
>> >> > > > I think you're right that there aren't any other core plugins
>> >> > > > using the binary bridge, but that could change, and there
are
>> >> > > > probably already third-party plugins using it.
>> >> > > >
>> >> > > > If we do this right, then other developers won't have to
roll
>> >> > > > their own solution in each case, and it will be easier to
port
>> >> > > > the
>> >> > > > third-party plugins to WP.
>> >> > > >
>> >> > > > Let me know if you need any support; I'll help if I can.
>> >> > > >
>> >> > > > Ian
>> >> > > >
>> >> > > >
>> >> > > > >
>> >> > > > > -Sergey
>> >> > > > > -----Original Message-----
>> >> > > > > From: iclelland@google.com [mailto:iclelland@google.com]
On
>> >> > > > > Behalf Of
>> >> > > > Ian
>> >> > > > > Clelland
>> >> > > > > Sent: Friday, December 6, 2013 7:37 PM
>> >> > > > > To: dev@cordova.apache.org
>> >> > > > > Subject: Windows Phone binary bridge
>> >> > > > >
>> >> > > > > As far as I can tell from reading its exec.js, WP8 does
not
>> >> > > > > have
>> >> > > > > a binary bridge of any kind. Non-string data get
>> >> > > > > JSON-serialized
>> >> > > > > for
>> >> > > transfer.
>> >> > > > >
>> >> > > > > The recent patch for CB-5532 broke the File plugin by
>> >> > > > > explicitly
>> >> > > > > casting ArrayBuffer data to Array type. Sergey's fixed
it now,
>> >> > > > > but the FileWriter JS code still has special cases for
Windows
>> >> > > > > and WP8
>> >> > > platforms.
>> >> > > > >
>> >> > > > > Would it make sense to have this code moved into the
WP8 exec
>> >> > > > > bridge?
>> >> > > > Then
>> >> > > > > it could apply to any plugins which transfer binary
data, and
>> >> > > > > any
>> >> > > > improved
>> >> > > > > transport methods would automatically be used by all
plugins,
>> >> > > > > rather than being a special case in each plugin.
>> >> > > > >
>> >> > > > > I don't know much about the Windows phone platform,
so I could
>> >> > > > > be completely off-base about this, but if it works,
I think
>> >> > > > > it'll make the implementation cleaner, and generally
make
>> >> > > > > Cordova better on the
>> >> > > > platform.
>> >> > > > >
>> >> > > > > Ian
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >
>> >
>
>

Mime
View raw message