[android-developers] Re: Need to optimize some graphics calls.

2010-10-14 Thread niko20
Here's a small way that I was able to improve my drawing in a app I
have where I do lots of canvas calls. I also use an ArrayList. This is
the code in my onDraw():


temparray = trackEvents.toArray();

int tracksize = trackEvents.size();

if ((trackEvents != null) && (tracksize > 0))
{


for (int counter = 0; counter < tracksize; counter++)
{



First I convert the arraylist to an array, then I precache the size,
then I loop thru it and treat it like a normal array using []
indexers.

-niko

On Oct 14, 3:00 am, Andy  wrote:
> HI Joel,
>
> drawing in a Canvas can be difficult from a performance approach.
>
> You can speed things up, here are only a few sidenotes you can check:
>
> * Do you preload Images
> * Which format are you using (ARGB , ARGB  or RGB565) : need
> Alpha ?
> * Are you allocating memory in you loop
> * Do you use any Kind of Collection ? = bad
>
> could be sum up more, but have to go to a meeting =)
>
> On 14 Okt., 03:21, Leigh McRae  wrote:
>
>
>
> >   I can't help but smile at this one since there was a thread not that
> > long ago talking about how people should just use OpenGL.  This yet
> > again shows how useful it would be if the native bitmap canvas calls
> > could be accelerated.
>
> > Anyway here are some ideas:
>
> > - Do some kind of screen space culling.
> > - Unroll the loop.  Not sure if the compiler does it.  If you know there
> > are 100 then maybe make a loop that does 5-10 per loop.  Even if you
> > only know it's always even then do two per loop.
> > - If the images don't always move/update then you could render to a
> > bitmap and use it as a cache.  If it's something like a tiled game then
> > layers could be cached and marked dirty.  I do this.
> > - use OpenGL :(
>
> > On 10/13/2010 7:46 PM, JoelDuggan wrote:
>
> > > Hey all,
>
> > > I'm looking for some help optimizing some bitmap drawing code.
>
> > > Here's my pseudo-code:
>
> > > draw() {
>
> > > lockCanvas()
>
> > > drawbackgroundBitmap()
>
> > > for (100times) {
> > >   drawbitmap(x,y);
> > > }
>
> > > unlockCanvas()
>
> > > }
>
> > > That inner loop is my bottleneck.  It is taking 160ms to run the whole
> > > function.  80% of that is spent making the drawBitmap calls in the
> > > loop.  Is there a faster method to draw the bitmaps.  The bitmaps are
> > > basically a fifo (actually an Arraylist) where new ones are added and
> > > old ones are removed.  Would openGL help?
>
> > > Thanks in advance.
>
> > --
> > Leigh McRaewww.lonedwarfgames.com

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


[android-developers] Re: Need to optimize some graphics calls.

2010-10-14 Thread niko20
If you are looping over an ArrayList then according to benchmarks,
it's faster to grab the ArrayList length and store it before looping
rather than doing something like ArrayList.length() every iteration,
so check for that too.

-niko

On Oct 14, 3:00 am, Andy  wrote:
> HI Joel,
>
> drawing in a Canvas can be difficult from a performance approach.
>
> You can speed things up, here are only a few sidenotes you can check:
>
> * Do you preload Images
> * Which format are you using (ARGB , ARGB  or RGB565) : need
> Alpha ?
> * Are you allocating memory in you loop
> * Do you use any Kind of Collection ? = bad
>
> could be sum up more, but have to go to a meeting =)
>
> On 14 Okt., 03:21, Leigh McRae  wrote:
>
>
>
> >   I can't help but smile at this one since there was a thread not that
> > long ago talking about how people should just use OpenGL.  This yet
> > again shows how useful it would be if the native bitmap canvas calls
> > could be accelerated.
>
> > Anyway here are some ideas:
>
> > - Do some kind of screen space culling.
> > - Unroll the loop.  Not sure if the compiler does it.  If you know there
> > are 100 then maybe make a loop that does 5-10 per loop.  Even if you
> > only know it's always even then do two per loop.
> > - If the images don't always move/update then you could render to a
> > bitmap and use it as a cache.  If it's something like a tiled game then
> > layers could be cached and marked dirty.  I do this.
> > - use OpenGL :(
>
> > On 10/13/2010 7:46 PM, JoelDuggan wrote:
>
> > > Hey all,
>
> > > I'm looking for some help optimizing some bitmap drawing code.
>
> > > Here's my pseudo-code:
>
> > > draw() {
>
> > > lockCanvas()
>
> > > drawbackgroundBitmap()
>
> > > for (100times) {
> > >   drawbitmap(x,y);
> > > }
>
> > > unlockCanvas()
>
> > > }
>
> > > That inner loop is my bottleneck.  It is taking 160ms to run the whole
> > > function.  80% of that is spent making the drawBitmap calls in the
> > > loop.  Is there a faster method to draw the bitmaps.  The bitmaps are
> > > basically a fifo (actually an Arraylist) where new ones are added and
> > > old ones are removed.  Would openGL help?
>
> > > Thanks in advance.
>
> > --
> > Leigh McRaewww.lonedwarfgames.com

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


[android-developers] Re: Need to optimize some graphics calls.

2010-10-14 Thread Andy
HI Joel,

drawing in a Canvas can be difficult from a performance approach.

You can speed things up, here are only a few sidenotes you can check:

* Do you preload Images
* Which format are you using (ARGB , ARGB  or RGB565) : need
Alpha ?
* Are you allocating memory in you loop
* Do you use any Kind of Collection ? = bad

could be sum up more, but have to go to a meeting =)

On 14 Okt., 03:21, Leigh McRae  wrote:
>   I can't help but smile at this one since there was a thread not that
> long ago talking about how people should just use OpenGL.  This yet
> again shows how useful it would be if the native bitmap canvas calls
> could be accelerated.
>
> Anyway here are some ideas:
>
> - Do some kind of screen space culling.
> - Unroll the loop.  Not sure if the compiler does it.  If you know there
> are 100 then maybe make a loop that does 5-10 per loop.  Even if you
> only know it's always even then do two per loop.
> - If the images don't always move/update then you could render to a
> bitmap and use it as a cache.  If it's something like a tiled game then
> layers could be cached and marked dirty.  I do this.
> - use OpenGL :(
>
> On 10/13/2010 7:46 PM, JoelDuggan wrote:
>
>
>
>
>
> > Hey all,
>
> > I'm looking for some help optimizing some bitmap drawing code.
>
> > Here's my pseudo-code:
>
> > draw() {
>
> > lockCanvas()
>
> > drawbackgroundBitmap()
>
> > for (100times) {
> >   drawbitmap(x,y);
> > }
>
> > unlockCanvas()
>
> > }
>
> > That inner loop is my bottleneck.  It is taking 160ms to run the whole
> > function.  80% of that is spent making the drawBitmap calls in the
> > loop.  Is there a faster method to draw the bitmaps.  The bitmaps are
> > basically a fifo (actually an Arraylist) where new ones are added and
> > old ones are removed.  Would openGL help?
>
> > Thanks in advance.
>
> --
> Leigh McRaewww.lonedwarfgames.com

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en