dequeueBuffer: tampon sayısını ayarlamadan birden çok arabellek kuyruğundan çıkarılamaz


123

Android 4.4.2 Moto X 2013Bir Rhomobile 5.0.2WebView uygulamasında aşağıdaki hatayı alıyorum . Uygulama ile derlenmiştirSDK 19 veminAPI 17 .

Biraz araştırdıktan sonra, bunun bir sorun olduğu anlaşılıyor Snapdragon 800 / Adreno GPU devices :

burada ve burada bu sorunun bağlantılarıGoogle sorun izleyicisinde

Donanım hızlandırmayı devre dışı bırakmak gerçekten bir seçenek değildir, çünkü Web Görünümü'nü çok yavaşlatır.

Hata olduğu için:

dequeueBuffer: can't dequeue multiple buffers without setting the buffer count

Com.rhomobile.rhodes.RhodesActivity'de arabellek sayısını nasıl ayarlayabilirim?

11-08 18:28:31.227: I/SFPerfTracer(238):      triggers: (rate: 0:0) (423387 sw vsyncs) (0 skipped) (0:361861 vsyncs) (2:863582)
11-08 18:28:31.328: W/Adreno-EGLSUB(4749): <DequeueBuffer:593>: dequeue native buffer fail: Unknown error 2147483646, buffer=0x61213afc, handle=0x0
11-08 18:28:31.331: W/Adreno-EGLSUB(4749): <SwapBuffers:1343>: Invalid native buffer. Failed to queueBuffer
11-08 18:28:31.331: W/Adreno-EGLSUB(4749): <updater_thread:456>: native buffer is NULL
11-08 18:28:31.346: E/BufferQueue(238): [com.myapp.myapp/com.rhomobile.rhodes.RhodesActivity] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count
11-08 18:28:31.346: W/Adreno-EGLSUB(4749): <DequeueBuffer:593>: dequeue native buffer fail: Invalid argument, buffer=0x61213afc, handle=0x0
11-08 18:28:31.347: W/Adreno-ES20(4749): <gl2_surface_swap:43>: GL_OUT_OF_MEMORY
11-08 18:28:31.347: W/Adreno-EGL(4749): <qeglDrvAPI_eglSwapBuffers:3596>: EGL_BAD_SURFACE
11-08 18:28:31.347: W/HardwareRenderer(4749): EGL error: EGL_BAD_SURFACE
11-08 18:28:31.352: W/HardwareRenderer(4749): Mountain View, we've had a problem here. Switching back to software rendering.
11-08 18:28:31.478: D/qdgralloc(4749): Invalid gralloc handle (at 0x0): ver(-1/12) ints(-1/12) fds(-1/2) magic(????/gmsm)
11-08 18:28:31.478: W/GraphicBufferMapper(4749): lock(...) failed -22 (Invalid argument)
11-08 18:28:31.478: W/Surface(4749): failed locking buffer (handle = 0x0)
11-08 18:28:31.531: E/ViewRootImpl(4749): Could not lock surface
11-08 18:28:31.531: E/ViewRootImpl(4749): java.lang.IllegalArgumentException
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.Surface.nativeLockCanvas(Native Method)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.Surface.lockCanvas(Surface.java:243)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2466)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.ViewRootImpl.draw(ViewRootImpl.java:2440)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2284)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1914)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1024)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5796)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.Choreographer.doCallbacks(Choreographer.java:574)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.Choreographer.doFrame(Choreographer.java:544)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.os.Handler.handleCallback(Handler.java:733)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.os.Handler.dispatchMessage(Handler.java:95)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.os.Looper.loop(Looper.java:136)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at android.app.ActivityThread.main(ActivityThread.java:5102)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at java.lang.reflect.Method.invokeNative(Native Method)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at java.lang.reflect.Method.invoke(Method.java:515)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-08 18:28:31.531: E/ViewRootImpl(4749):      at dalvik.system.NativeStart.main(Native Method)

1
bu soruna bir çözüm buldunuz mu?
Massimo

6
Hayır, ama neyse ki Android 5+ ile Web Görünümü artık GooglePlay aracılığıyla güncellendi ve bu sorun yavaş yavaş ortadan kalkıyor.
fnllc

Yanıtlar:


1

Bu, burada belirtildiği gibi bellek yetersizliği sorunudur:

11-08 18: 28: 31.347: W / Adreno-ES20 (4749):: GL_OUT_OF_MEMORY

android.view.SurfaceGPU'nun kaldırabileceğinden daha fazla güncelleme yapıyor. Bunu yakalamayı deneyebileceğinden bile emin değilim.
Ayrıca çökmenin olmadığı birçok cihazda kullanıcıların ara sıra UI bacakları yaşayacağına inanıyorum.

Birkaç yıl önce benzer bir sorunla karşılaştım. Benim durumumda öncelikle bacaklar vardı, ancak sorunun aynı olduğuna inanıyorum.

Çözmek için kare hızını ölçmek için bir sayaç ekledim. Kare hızının yüksek olduğunu gördüm ama sonra aniden kötü bir şekilde düştü, bu yüzden bacakta kalmayacak en yüksek FPS'yi aramak için bir denge mantığı uyguladım.

  • 60 FPS ile başlayın
  • Bacakları varsa, FPS'yi 2'ye bölün
  • Değilse, son değer ile mevcut değer arasında ortalamaya ayarlayın.
  • mutlu olana kadar tekrarlayın;)

Temelde mükemmel FPS için ikili bir arama.

Sizin durumunuzda, çökmeler yaşadığınız için biraz daha aldatıcı, bu yüzden FPS sayacını sürdürmeniz ve aramaya daha dikkat etmeniz gerekecek.

FPS günlüklerini sunucunuza gönderin. Yeterli veriye sahip olduğunuzda, her cihaz modülü için FPS başlangıç ​​noktasıyla daha akıllı olabilirsiniz.

Ellerinizi WebView SurfaceView'a koyduğunuzda, sanırım bu da önemsiz değil, ancak Android 4.4.2'den bahsediyoruz, bu yüzden yansıma ile yapamayacağınız hiçbir şey yok :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.