Photok icon indicating copy to clipboard operation
Photok copied to clipboard

[Bug] crash after browsing a few photos, drawing too large bitmap

Open watashibeme opened this issue 2 years ago • 1 comments

Describe the bug After viewing a few photos via built-in gallery, photok starts to get quite laggy as if it's under pressure (jittery zoom in or out and browsing ) , then suddenly crashes

To Reproduce Steps to reproduce the behavior:

  1. Browse a few photos, any photo(not overview which has thumbnails but actually clicking and viewing )
  2. Jittery behavior and crash a few seconds afterwards

Expected behavior Either do not crash and continue even if there is some sort of lag, or simply allow me to browse my photos

Screenshots

Not applicable

Smartphone (please complete the following information):

  • Device: POCO F3
  • OS: Lineage 19.1, Android 12L(also tested in Crdroid 9, Android 13) Affected Photok versions in my case: both f-droid and G-play

Additional context

Crash seems to be quite random, unable to find specific pattern, will investigate more

Activity remains in recents and can enter photok again if I enter my password (doesn't say app unavailable or something)

I know photok is now maintenance only, but hopefully it's useful nonetheless

Logcat:

Unified all warnings, verbose, fatal etc: Pastebin

Only fatal:

Android runtime:

FATAL EXCEPTION: main
Process: dev.leonlatsch.photok, PID: 13979
java.lang.RuntimeException: Canvas: trying to draw too large(113384112bytes) bitmap.
	at android.graphics.RecordingCanvas.throwIfCannotDraw(RecordingCanvas.java:266)
	at android.graphics.BaseRecordingCanvas.drawBitmap(BaseRecordingCanvas.java:94)
	at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:549)
	at android.widget.ImageView.onDraw(ImageView.java:1442)
	at com.ortiz.touchview.TouchImageView.onDraw(TouchImageView.kt:284)
	at android.view.View.draw(View.java:22704)
	at android.view.View.updateDisplayListIfDirty(View.java:21579)
	at android.view.View.draw(View.java:22435)
	at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
	at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:1994)
	at android.view.View.draw(View.java:22707)
	at android.view.View.updateDisplayListIfDirty(View.java:21579)
	at android.view.View.draw(View.java:22435)
	at android.view.ViewGroup.drawChild(ViewGroup.java:4528)
	at androidx.recyclerview.widget.RecyclerView.drawChild(RecyclerView.java:5204)
	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4289)
	at android.view.View.draw(View.java:22707)
	at androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4603)
	at android.view.View.updateDisplayListIfDirty(View.java:21579)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
	at android.view.View.updateDisplayListIfDirty(View.java:21535)
	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
	at android.view.ViewRootImpl.draw(ViewRootImpl.java:4531)

Window manager:

Failed to deliver inset state change to w=Window{b9a4f28 u0 dev.leonlatsch.photok/dev.leonlatsch.photok.MainLauncher EXITING}
android.os.DeadObjectException
	at android.os.BinderProxy.transactNative(Native Method)
	at android.os.BinderProxy.transact(BinderProxy.java:571)
	at android.view.IWindow$Stub$Proxy.insetsControlChanged(IWindow.java:687)
	at com.android.server.wm.WindowState.notifyInsetsControlChanged(WindowState.java:4037)
	at com.android.server.wm.InsetsStateController.lambda$notifyPendingInsetsControlChanged$6$InsetsStateController(InsetsStateController.java:552)
	at com.android.server.wm.InsetsStateController$$ExternalSyntheticLambda1.run(Unknown Source:2)
	at com.android.server.wm.WindowAnimator.executeAfterPrepareSurfacesRunnables(WindowAnimator.java:345)
	at com.android.server.wm.WindowAnimator.animate(WindowAnimator.java:226)
	at com.android.server.wm.WindowAnimator.lambda$new$1$WindowAnimator(WindowAnimator.java:106)
	at com.android.server.wm.WindowAnimator$$ExternalSyntheticLambda0.doFrame(Unknown Source:2)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1035)
	at android.view.Choreographer.doCallbacks(Choreographer.java:845)
	at android.view.Choreographer.doFrame(Choreographer.java:775)
	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
	at android.os.Handler.handleCallback(Handler.java:938)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.os.HandlerThread.run(HandlerThread.java:67)
	at com.android.server.ServiceThread.run(ServiceThread.java:44)

watashibeme avatar Jan 12 '23 14:01 watashibeme

Weird. This should have been fixed with #198 . But I will have a look into this once I find the time.

leonlatsch avatar Jan 16 '23 16:01 leonlatsch

Reproduced this by accident with a large image. Seems like its able to display with a default image view but not with the image library used in the large image viewer. Most likely related to #246

leonlatsch avatar Apr 28 '24 19:04 leonlatsch