dequeueBuffer: बफर काउंट को सेट किए बिना कई बफ़र्स को नहीं हटा सकता


123

मुझे नीचे Android 4.4.2 Moto X 2013एक Rhomobile 5.0.2WebView ऐप में त्रुटि मिल रही है । एप्लिकेशन के साथ SDK 19और संकलित किया गया है minAPI 17

कुछ शोधों के बाद ऐसा लगता है कि यह एक मुद्दा है Snapdragon 800 / Adreno GPU devices:

यहाँ और यहाँ पर इस समस्या के लिए लिंक कर रहे हैं गूगल समस्या ट्रैकर

हार्डवेयर त्वरण को अक्षम करना वास्तव में एक विकल्प नहीं है, क्योंकि यह वेबव्यू को बहुत सुस्त बना देता है।

चूंकि त्रुटि है:

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

मैं 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
क्या आपको इस समस्या का हल मिला?
मैसिमो

6
नहीं, लेकिन शुक्र है कि Android 5+ के साथ WebView अब GooglePlay के माध्यम से अपडेट किया गया है और यह समस्या धीरे-धीरे दूर हो रही है।
fnllc

जवाबों:


1

यह स्मृति समस्या से बाहर है क्योंकि यह यहाँ इंगित किया गया है:

11-08 18: 28: 31.347: डब्ल्यू / एड्रेनो-ईएस 20 (4749): GL_OUT_OF_MEMORY

android.view.Surfaceअधिक अपडेट कर रहा है तो GPU संभाल सकता है। मुझे यकीन नहीं है कि आप इस एक को भी पकड़ सकते हैं।
मेरा यह भी मानना ​​है कि कई उपकरणों पर जहां दुर्घटना नहीं होती है, उपयोगकर्ताओं को कभी-कभी यूआई पैर का अनुभव होगा।

मैंने कुछ साल पहले इसी तरह की समस्या का सामना किया था। मेरे मामले में, यह मुख्य रूप से पैर था, लेकिन मेरा मानना ​​है कि समस्या समान है।

इसे हल करने के लिए मैंने फ्रेम दर को मापने के लिए एक काउंटर जोड़ा। मैंने देखा कि फ्रेम दर अधिक है, लेकिन फिर अचानक यह बुरी तरह से गिर जाता है, इसलिए मैंने उच्चतम एफपीएस की खोज के लिए एक संतुलन-तर्क लागू किया जो पैर नहीं करेगा।

  • शुरुआत 60 एफपीएस से करें
  • यदि इसके पैर, एफपीएस को 2 से विभाजित करते हैं
  • यदि यह नहीं है, तो इसे अंतिम मान और वर्तमान के बीच औसत करने के लिए सेट करें।
  • जब तक आप खुश न हों तब तक दोहराएं;)

यह मूल रूप से सही एफपीएस के लिए एक द्विआधारी खोज है।

आपके मामले में, यह थोड़ा और मुश्किल है, चूंकि आप दुर्घटनाओं का अनुभव करते हैं, इसलिए आपको एफपीएस काउंटर को जारी रखना होगा, और खोज के साथ अधिक सावधान रहना होगा।

अपने सर्वर पर FPS लॉग भेजें। एक बार जब आपके पास पर्याप्त डेटा होगा, तो आप डिवाइस मॉड्यूल प्रति FPS घूर बिंदु के साथ होशियार हो सकते हैं।

जहाँ तक आप WebView SurfaceView पर अपना हाथ डालते हैं, मुझे लगता है कि यह तुच्छ नहीं है, लेकिन हम एंड्रॉइड 4.4.2 के बारे में बात कर रहे हैं, इसलिए आप प्रतिबिंब के साथ कुछ भी नहीं कर सकते हैं :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.