My OpenGL stuff seems to draw just fine until some rotate (this is
most reproducible if you rotate back and forth with about a second
between).

Note that Activity B is "singleTop"

Here's a log from the normal startup:
I/System.out(17209): Activity A:onCreate()
I/System.out(17209): Start Activity B from Activity A
I/System.out(17209): Activity B:onCreate()
I/System.out(17209): Activity B:onResume()

When I rotate and things are fine:
I/System.out(17209): Activity B:onPause()
I/System.out(17209): Activity B:onDestroy()
I/System.out(17209): Activity B:onCreate()
I/System.out(17209): Activity B:onResume()
I/System.out(17209): Activity A:onCreate()
I/System.out(17209): Start Activity B from Activity A
I/System.out(17209): Activity B:onPause()
I/System.out(17209): Activity B:onResume()

So it's actually restoring B before re-creating activity A... But then
A resumes B...  I think it's doing B-then-A because A is shown through
the translucent activity B? For normal cases this works fine...

I was able to reproduce the issue by rotating back and forth
repeatedly...  I sort of had to do it while the screen stayed grey, so
I'm not sure exactly when the problem started, but I'm seeing
something useful from the log:
I/System.out(17910): Start Activity B from Activity A
I/System.out(17910): Activity B:onPause()
I/System.out(17910): Activity B:onResume()
I/System.out(17910): Activity B:onPause()
I/System.out(17910): Activity B:onDestroy()
I/System.out(17910): Activity B:onCreate()
I/System.out(17910): Activity B:onResume()
I/System.out(17910): Activity B:onPause()
I/System.out(17910): Activity B:onDestroy()
I/System.out(17910): Activity B:onCreate()
I/System.out(17910): Activity B:onResume()
I/System.out(17910): Activity B:onPause()
I/System.out(17910): Activity B:onDestroy()
I/System.out(17910): Activity B:onCreate()
I/System.out(17910): Activity B:onResume()
I/System.out(17910): Activity B:onPause()
I/System.out(17910): Activity B:onDestroy()

It looks like when you rotate that fast, Android doesn't even get to
tell anything to Activity A!  Somehow it got lost, and after that, I
see continuing messsages of:
W/SurfaceComposerClient(17910): lock_layer timed out (is the CPU
pegged?) layer=2, lcblk=0x420d0120, state=0000000e (was 0000000e)

Is there any way around this? Am I being to mean with my rotations?




On Jul 21, 1:12 pm, Dianne Hackborn <[email protected]> wrote:
> Have you made sure your SurfaceView UI is actually drawing regularly, and
> especially redrawing itself as soon as possible with the new size?
>
>
>
> On Wed, Jul 21, 2010 at 8:02 AM, Matty <[email protected]> wrote:
> > Thanks for the quick response Dianne.
>
> > I have an activity that uses OpenGL, and if I rotate  at just the
> > right time, the log prints
>
> > W/SurfaceComposerClient(  749): lock_layer timed out (is the CPU
> > pegged?) layer=2, lcblk=0x420d0120, state=0000000e (was 0000000e)
>
> > I basically don't want the Activity to hang.  I'm using a plain
> > android.opengl.GLSurfaceView.
>
> > There are 2 activities involved. A,B.  B is started from A using
> > startActivityForResult, and is "translucent".  On rotate, both finish,
> > and then I start A (which might work) which then starts an intent for
> > B.  If I rotate at the right time, I see the message above, and
> > sometimes Activity A draws properly, but usually not quite (only draws
> > some of the screen, or a rotated version of the opposite orientation),
> > and it seems like B is somehow blocked because of the message above.
> > Activity B has the GLSurfaceView.
>
> > Any advice is greatly appreciated.
>
> > On Jul 21, 9:22 am, Dianne Hackborn <[email protected]> wrote:
> > > What problem is this causing you that you are trying to fix?
>
> > > On Wed, Jul 21, 2010 at 5:47 AM, Matty <[email protected]> wrote:
> > > > I have looked through many posts on this issue, and I've concluded
> > > > that there's not much I can do to prevent it... I am able to reproduce
> > > > this error when repeatedly rotating an Activity that uses OpenGL.
>
> > > > W/SurfaceComposerClient(  749): lock_layer timed out (is the CPU
> > > > pegged?) layer=2, lcblk=0x420d0120, state=0000000e (was 0000000e)
>
> > > > For reference:
> > > > I'm calling GLSurfaceView.onPause() and onResume() on activity pause
> > > > and resume...
>
> > > > My question is:
> > > > Can I detect this error in my java code, so I can try to do something
> > > > extra to correct it?
> > > > Is there an ErrorListener, or an object I can access to find out about
> > > > when this occurs? I have tried
> > > > ((EGL10) EGLContext.getEGL()).eglGetError();
> > > > but does not report an error.  I'm guessing I'd need some sort of
> > > > Surface object?
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > > > Groups "Android Developers" group.
> > > > To post to this group, send email to
> > [email protected]
> > > > To unsubscribe from this group, send email to
> > > > [email protected]<android-developers%[email protected]>
> > <android-developers%[email protected]<android-developers%[email protected]>
>
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/android-developers?hl=en
>
> > > --
> > > Dianne Hackborn
> > > Android framework engineer
> > > [email protected]
>
> > > Note: please don't send private questions to me, as I don't have time to
> > > provide private support, and so won't reply to such e-mails.  All such
> > > questions should be posted on public forums, where I and others can see
> > and
> > > answer them.
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]<android-developers%[email protected]>
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en
>
> --
> Dianne Hackborn
> Android framework engineer
> [email protected]
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support, and so won't reply to such e-mails.  All such
> questions should be posted on public forums, where I and others can see and
> answer them.

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

Reply via email to