what should take care when call APIs in Surface.java

109 views
Skip to first unread message

gan

unread,
Mar 22, 2010, 11:03:52 AM3/22/10
to android-porting
Hi,

I have some question about the usage of some APIs in Surface.java
1) Surface::lockCanvas+...+Surface::unlockCanvasAndPost
2) Surface::openTransaction+...Surface::closeTransaction
In my code, I create a java Surface in windowmanger and use 1) to draw
some image on it.
I set the layer to "SYSTEM_OVERLAY_LAYER*10000+1000" to let it topest.
(not sure if it is OK)
I do not destory it for it would be used all the time.
Then, I use 2) to show/hide/... the surface at any time.

But it is found Surface::lockCanvas failed for wallpaper occasionally,
once it happens, Surface::lockCanvas for wallpaper always fail.
The log shows:
Surface : surface (id=2, identity=4) is invalid, err=-19 (No such
device)
Surface : dequeueBuffer failed (No such device)
ViewRoot: IllegalArgumentException locking surface
ViewRoot: java.lang.IllegalArgumentException
ViewRoot: at android.view.Surface.lockCanvasNative(Native Method)
ViewRoot: at android.view.Surface.lockCanvas(Surface.java:288)
ViewRoot: at android.view.ViewRoot.draw(ViewRoot.java:1284)
ViewRoot: at android.view.ViewRoot.performTraversals(ViewRoot.java:
1115)
ViewRoot: at android.view.ViewRoot.handleMessage(ViewRoot.java:
1634)
ViewRoot: at android.os.Handler.dispatchMessage(Handler.java:99)
ViewRoot: at android.os.Looper.loop(Looper.java:123)
ViewRoot: at com.android.server.ServerThread.run(SystemServer.java:
491)

Some other log show 2) may effect the surface used by StatusBar:
1226 1292 E SurfaceComposerClient: openGlobalTransaction() called
more than once. skipping.
1226 1951 D KeyguardViewMediator: setHidden false
1226 1951 D KeyguardViewMediator: setHidden false
1226 1951 D KeyguardViewMediator: setHidden false
1226 1951 E SurfaceComposerClient: Not in transaction
(client=0x2d07c8, SurfaceID=0, mTransactionOpen=0
1226 1951 E WindowManager: Failure updating surface of
Window{43efc238 StatusBar paused=false}size=(320x19), pos=(0,-14)
1226 1951 E WindowManager: java.lang.IllegalArgumentException
1226 1951 E WindowManager: at
android.view.Surface.setSize(Native Method)
1226 1951 E WindowManager: at
com.android.server.WindowManagerService.performLayoutAndPlaceSurfacesLockedInner(WindowManagerService.java:
10333)
1226 1951 E WindowManager: at
com.android.server.WindowManagerService.performLayoutAndPlaceSurfacesLocked(WindowManagerService.java:
9579)
1226 1951 E WindowManager: at
com.android.server.WindowManagerService.finishDrawingWindow(WindowManagerService.java:
2565)
1226 1951 E WindowManager: at
com.android.server.WindowManagerService
$Session.finishDrawing(WindowManagerService.java:7032)
1226 1951 E WindowManager: at android.view.IWindowSession
$Stub.onTransact(IWindowSession.java:212)
1226 1951 E WindowManager: at
com.android.server.WindowManagerService
$Session.onTransact(WindowManagerService.java:6971)
1226 1951 E WindowManager: at
android.os.Binder.execTransact(Binder.java:301)
1226 1951 E WindowManager: at
dalvik.system.NativeStart.run(Native Method)

Thanks a lot for any comments of them...

BstRgds
gan


Reply all
Reply to author
Forward
0 new messages