Hello,

I have been working on the scroller component to improve the framerate of
the scrolling operations with an optimization based on the blitting
technique.
In this experiment, the Scroller component has a new boolean property named
cacheViewport.

When cacheViewPort is set to true, all scrolling operations are performed
according to the following cycle :
 
1 - A bitmap copy of the viewport is made just before the next scrolling
operation (large viewports are cached in multiple tiles if necessary)

2 - When the user starts a scrolling operation, the actual viewport is
replaced by its bitmap version and the scrolling is executed by drawing the
viewport according to its verticalScrollPosition and
horizontalScrollPosition properties.

3 - At the end of the scroll operation, the bitmap viewport is replaced by
its actual version.

4 - Between each scrolling operations, when the user interacts with the
viewport content, a process mark as 'dirty' every regions of the viewport
that are likely to have changed during those interactions. Every dirty
region is redrawn before the next scrolling operation.


Pros :

- 60 FPS scrolling, even on old devices.
- Performance is no longer dependant on the viewport complexity.
- Can be used with the list component if it contains a moderate number of
rows (useVirtualLayout must be set to false though)

Cons :

- There is a slight lag (dependant on the device processor) during the
viewport rasterization and the process of redrawing every dirty regions.
- Doesn't support virtualized layouts.
- Animated elements of the viewport freezes during scrolling operations.
- Render mode must be set to <renderMode>gpu</renderMode> on the current
version.
- Depending on its dimensions, the viewport rasterization process can
consume large amounts of memory.


It works well, even on old phones. I tested it on a nexus S, a nexus 4 and a
nexus 7 (however, I didn’t made tests on ios devices).

A demo application can be downloaded on the android play market here : 
https://play.google.com/store/apps/details?id=air.fr.after24.ViewportCacheDemo
<https://play.google.com/store/apps/details?id=air.fr.after24.ViewportCacheDemo>
  

I opened a Jira ticket with the source code  FLEX-34821
<https://issues.apache.org/jira/browse/FLEX-34821>  



--
View this message in context: 
http://apache-flex-development.2333347.n4.nabble.com/Flex-Scroller-optimization-tp46074.html
Sent from the Apache Flex Development mailing list archive at Nabble.com.

Reply via email to