Johan? I really need this kind of information and you seem to be the most 
qualified person to provide it.

Cheers,

Felix

> On 31 Oct 2015, at 19:23, Felix Bembrick <felix.bembr...@gmail.com> wrote:
> 
> Hi Johan,
> 
> Now that your workload has hopefully lessened a bit after J1, do you think 
> you could find some time to address this question of mine from earlier?
> 
> Thanks,
> 
> Felix
> 
>> On 18 Oct 2015, at 19:01, Felix Bembrick <felix.bembr...@gmail.com> wrote:
>> 
>> Hi Johan,
>> 
>> If you have been getting acceptable but not stunning performance on Android 
>> and all this time hardware acceleration was not being utilised then it 
>> sounds like there is some serious room for some dramatic performance 
>> increases.
>> 
>> Not being that familiar with the finer points of how JavaFX is implemented 
>> on Android, just how much work is involved in accessing that hardware 
>> acceleration?  Any timeline?
>> 
>> I expect that implementing this significant change could be a make-or-break 
>> factor in determining whether JavaFX is truly viable and successful on 
>> Android.
>> 
>> Good luck Johan!
>> 
>> Cheers,
>> 
>> Felix 
>> 
>>> On 17 Oct 2015, at 19:49, Johan Vos <johan....@gluonhq.com> wrote:
>>> 
>>> As a follow-up on the second part: after about 2 years working on JavaFX on
>>> Android, I discovered we are not even using Hardware Acceleration. We
>>> create a SurfaceView and render on that, but it turns out SurfaceView is
>>> never Hardware Accelerated. The positive thing is that this means there is
>>> even more room for optimization :)
>>> 
>>> - Johan
>>> 
>>>> On Fri, Oct 16, 2015 at 7:55 PM, Johan Vos <johan....@gluonhq.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> Thanks for the suggestions. There are 2 different things:
>>>> 
>>>> 1. It seems indeed there is not much being cached, so there are definitely
>>>> improvements possible. It also require e.g. VirtualFlow to use the
>>>> Node.setCache(true) in order to cache. The combination of this with the
>>>> prism.scrollcacheopt reduces the rendering calls. I think the only penalty
>>>> is memory, but so far, we didn't run into issues with too high GC activity.
>>>> 
>>>> 2. Calls to glDrawElements() inside nDrawIndexedQuads take about 100 times
>>>> longer on the Nexus 6 compared to the iPhone 6 (e.g. 100,000ns vs 1000ns).
>>>> I'll have to look into some EGL options.
>>>> 
>>>> - Johan
>>>> 
>>>> 
>>>> On Fri, Oct 16, 2015 at 12:18 AM, Jim Graham <james.gra...@oracle.com>
>>>> wrote:
>>>> 
>>>>> Chien pointed out a system property that is currently disabling the
>>>>> scrolling optimization.  For its implementation look at CacheFilter.java,
>>>>> in particular the invalidateByTranslation() method and all that it kicks
>>>>> off.
>>>>> 
>>>>> Another thing to look at is that we added alpha batching to the code
>>>>> which should be batching all of the output of the produceAlphas calls into
>>>>> a texture and then drawing all of the quads together - provided that they
>>>>> are all being filled with simple colors (they can have alpha, but they
>>>>> can't be gradients, etc.).  This should be managed by the
>>>>> BaseContext.updateMaskTexture() method which controls the single batch
>>>>> texture.
>>>>> 
>>>>> Again, are there similar number of invocations of the glDrawElements on
>>>>> the 2 platforms?
>>>>> 
>>>>>                      ...jim
>>>>> 
>>>>>> On 10/15/15 12:30 PM, Johan Vos wrote:
>>>>>> 
>>>>>> Thanks Jim.
>>>>>> I tried with different optimization flags, but it doesn't make a big
>>>>>> difference. Tracing it down to system calls, somehow the gl
>>>>>> implementation seems be be slower (glDrawElements(GL_TRIANGLES, numQuads
>>>>>> * 2 * 3, GL_UNSIGNED_SHORT, 0) takes more time on Android than on iOS)
>>>>>> per invocation. The number of invocations is comparable between iOS and
>>>>>> Android.
>>>>>> 
>>>>>> If you can give me a direction on where to search for the disabled
>>>>>> scrolling optimization, I'll try to re-enable that and see how it
>>>>>> improves performance. It might be a huge and quick win...
>>>>>> 
>>>>>> Thanks again,
>>>>>> 
>>>>>> - Johan
>>>>>> 
>>>>>> On Thu, Oct 15, 2015 at 9:02 PM, Jim Graham <james.gra...@oracle.com
>>>>>> <mailto:james.gra...@oracle.com>> wrote:
>>>>>> 
>>>>>>  Perhaps optimization flags with the native compiler?  Also, was it
>>>>>>  called a similar number of times on both?
>>>>>> 
>>>>>>  Ideally we'd just be using copyArea for the scrolling, but at one
>>>>>>  point we disabled the scrolling optimizations on retina MBP because
>>>>>>  they didn't work with a scale factor and I don't think we reenabled
>>>>>>  them yet.  That would kill scrolling performance on mobile as a
>>>>>>  result of having to rerender the scene on each scroll regardless of
>>>>>>  how long produceAlphas takes...
>>>>>> 
>>>>>>                           ...jim
>>>>>> 
>>>>>> 
>>>>>>  On 10/15/15 4:27 AM, Johan Vos wrote:
>>>>>> 
>>>>>>      After spending lots of time optimizing JavaFX on iOS, I am now
>>>>>>      at the point
>>>>>>      where scrolling is 10 times faster on iOS than on Android.
>>>>>>      The scrolling in the iOS version of the Gluon JavaOne mobile
>>>>>>      schedule
>>>>>>      builder is pretty good imho. On Android, it is much slower. I
>>>>>>      profiled and
>>>>>>      compared both, and it turns out that on Android, we spend lots
>>>>>>      of time in
>>>>>>      the native implementation of
>>>>>>      NativePiscesRasterizer.produceFillAlphas
>>>>>>      (implemented in native-prism/NativePiscesRasterizer.c)
>>>>>> 
>>>>>>      On average, calling this native function on an iPhone 6 takes
>>>>>>      40,000ns
>>>>>>      whereas on a Nexus 6, this takes about 800,000ns.
>>>>>> 
>>>>>>      If anyone has a suggestion on how to improve or avoid this, I'm
>>>>>>      all ears.
>>>>>> 
>>>>>>      Thanks,
>>>>>> 
>>>>>>      - Johan
>>>> 

Reply via email to