dequeueBuffer: không thể dequeue nhiều bộ đệm mà không thiết lập số lượng bộ đệm


123

Tôi đang gặp lỗi dưới đây Android 4.4.2 Moto X 2013trong Rhomobile 5.0.2ứng dụng WebView. Ứng dụng này được biên dịch với SDK 19minAPI 17.

Sau một số nghiên cứu có vẻ như đây là một vấn đề với Snapdragon 800 / Adreno GPU devices:

đâyđây là các liên kết đến vấn đề này trên trình theo dõi vấn đề của google

Vô hiệu hóa tăng tốc phần cứng không thực sự là một lựa chọn, vì nó làm cho WebView rất chậm chạp.

Vì lỗi là:

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

Làm cách nào tôi có thể đặt số lượng bộ đệm trong com.rhomobile.rhodes.RhodesActivity?

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
bạn đã tìm ra giải pháp cho vấn đề này chưa?
Massimo

6
Không, nhưng rất may với Android 5+, WebView hiện được cập nhật thông qua GooglePlay và vấn đề này đang dần biến mất.
fnllc

Câu trả lời:


1

Đây là một vấn đề hết bộ nhớ vì nó được chỉ ra ở đây:

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

android.view.Surfaceđang thực hiện nhiều cập nhật hơn thì GPU có thể xử lý. Tôi không chắc chắn rằng bạn thậm chí có thể thử bắt cái này.
Tôi cũng tin rằng trên nhiều thiết bị không có sự cố, người dùng sẽ gặp phải các giao diện người dùng không thường xuyên.

Tôi đã phải đối mặt với một vấn đề tương tự một vài năm trước đây. Trong trường hợp của tôi, nó chủ yếu là chân, nhưng tôi tin rằng vấn đề là như nhau.

Để giải quyết nó tôi đã thêm một bộ đếm để đo tốc độ khung hình. Tôi thấy rằng tốc độ khung hình cao nhưng đột nhiên nó rơi xuống rất tệ, vì vậy tôi đã áp dụng logic cân bằng để tìm kiếm FPS cao nhất sẽ không phù hợp.

  • Bắt đầu với 60 FPS
  • Nếu chân của nó, chia FPS cho 2
  • Nếu không, thì đặt nó ở mức trung bình giữa giá trị cuối cùng và hiện tại.
  • lặp lại cho đến khi bạn hạnh phúc;)

Về cơ bản, đây là một tìm kiếm nhị phân cho FPS hoàn hảo.

Trong trường hợp của bạn, sẽ khó khăn hơn một chút, vì bạn gặp sự cố, do đó bạn sẽ phải duy trì bộ đếm FPS và cẩn thận hơn với tìm kiếm.

Gửi nhật ký FPS đến máy chủ của bạn. Khi bạn có đủ dữ liệu, bạn có thể thông minh hơn với điểm nhìn chằm chằm FPS trên mỗi mô-đun thiết bị.

Theo như đặt tay lên SurfaceView WebView tôi đoán điều này cũng không tầm thường, nhưng chúng ta đang nói về Android 4.4.2, vì vậy bạn không thể làm gì với sự phản chiếu :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.