Closed bigbearishappy closed 2 years ago
This is the log when the error happens:
drm: flip drm: Find plane property: FB_ID drm: Find plane property: FB_ID drm: Find plane property: CRTC_ID drm: Find plane property: CRTC_ID drm: Find plane property: SRC_X drm: Find plane property: SRC_X drm: Find plane property: SRC_Y drm: Find plane property: SRC_Y drm: Find plane property: SRC_W drm: Find plane property: SRC_W drm: Find plane property: SRC_H drm: Find plane property: SRC_H drm: Find plane property: CRTC_X drm: Find plane property: CRTC_X drm: Find plane property: CRTC_Y drm: Find plane property: CRTC_Y drm: Find plane property: CRTC_W drm: Find plane property: CRTC_W drm: Find plane property: CRTC_H drm: Find plane property: CRTC_H drm: Flush done drm: x 6551:406 y 55:58 w -6144 h 4 Segmentation fault
Can you reproduce it in a simulator on a simple UI (i.e. with a single button or so)?
Can you reproduce it in a simulator on a simple UI (i.e. with a single button or so)?
OK, I'll try that and tell you the result.
Can you reproduce it in a simulator on a simple UI (i.e. with a single button or so)?
Hello,I have test the single button(lv_example_keyboard_1) and it works fine in all orientation. but when I test the keyboard(lv_example_keyboard_1).I can reproduce the app break after I touch the touch panel for several times. And I attach my patch file for this project.Maybe it's helpful for you. lvgl_patch.zip
For easier review, could you send Pull request with the suggested fixes?
For easier review, could you send Pull request with the suggested fixes?
I'm sorry.The file lvgl_patch.zip is to apply for adapting to my own hardware.It can not fix this problem.
Oh, I was too optimistic. I thought patch to fix the problem :slightly_smiling_face:
I've tested lv_examples_keyboard_1
with 270 degree rotation and noticed a glitch. It wasn't crashing for me but that glitch can be the sign of the same problem. See the blinking cursor here:
The software rotation was written by @embeddedt. Hopefully he can take look at it and spot the problem easily.
@kisvegabor I will have to look into it in more detail later, however, from a quick debugging session, the issue seems to be related to my optimization here, where I try to rotate the top chunk as a square to save memory and time. For some reason this seems to result in only half of the cursor being drawn correctly each time it blinks.
If you disable that optimization by prepending false &&
to the if
statement, the issue only appears the first time you click the keyboard (you see half of the cursor appearing rather than the full cursor), but it immediately corrects itself afterwards.
It's strange that this is only affecting the cursor and not anything else on the screen.
I made some test with a slightly modified lv_example_btn_1()
. Adding false
to the mentioned if
doesn't make much difference.
@kisvegabor True. Thanks for finding that reproduction case, it's a lot easier to control than the text area's cursor.
I think it's an issue with the SDL driver, not LVGL. I added a lot of debug statements locally and the last chunk (the one which lags behind by a frame) is definitely being sent to flush_cb
. I also modified flush_cb
to render a different solid color for each new frame, thus ignoring whatever bitmap data LVGL produces, and I can see the same issue where the last section is staying as the previous color instead of being redrawn. So I don't think the rotation logic is responsible for this glitch, though it is definitely an issue. I still don't know exactly why it's happening only when the screen is rotated by 90 degrees.
I also ran the exact same code on STM32 and didn't see any problems there at all.
Oh, I was too optimistic. I thought patch to fix the problem 🙂
I've tested
lv_examples_keyboard_1
with 270 degree rotation and noticed a glitch. It wasn't crashing for me but that glitch can be the sign of the same problem. See the blinking cursor here:The software rotation was written by @embeddedt. Hopefully he can take look at it and spot the problem easily.
Yes, when I have observed the abnormality carefully. I find this glitch on my machine too. Everytime I touch the textarea of the example, the glitch happens. and then my app breaks. Also, I tried to simplify the code of lv_example_keyboard_1 with deleting the keyboard in it. I can reproduce the glitch by touch the textarea too.
@kisvegabor I will have to look into it in more detail later, however, from a quick debugging session, the issue seems to be related to my optimization here, where I try to rotate the top chunk as a square to save memory and time. For some reason this seems to result in only half of the cursor being drawn correctly each time it blinks.
If you disable that optimization by prepending
false &&
to theif
statement, the issue only appears the first time you click the keyboard (you see half of the cursor appearing rather than the full cursor), but it immediately corrects itself afterwards.It's strange that this is only affecting the cursor and not anything else on the screen.
@kisvegabor I will have to look into it in more detail later, however, from a quick debugging session, the issue seems to be related to my optimization here, where I try to rotate the top chunk as a square to save memory and time. For some reason this seems to result in only half of the cursor being drawn correctly each time it blinks.
If you disable that optimization by prepending
false &&
to theif
statement, the issue only appears the first time you click the keyboard (you see half of the cursor appearing rather than the full cursor), but it immediately corrects itself afterwards.It's strange that this is only affecting the cursor and not anything else on the screen.
I also tried adding false && to the if statement.The app still breaked.
In my opinion. It should be something wrong with the coordinate calculation.
I found the issue of incorrect cursor refresh. See here: https://github.com/lvgl/lvgl/commit/c514bddd9b4064e2eba0c3ec4c7a51415acd74e4
The flushing_last
flag wasn't set therefore SDL didn't update the texture.
Probably it won't solve the issue of @bigbearishappy but let's give it a try :)
I found the issue of incorrect cursor refresh. See here: lvgl/lvgl@c514bdd
The
flushing_last
flag wasn't set therefore SDL didn't update the texture.Probably it won't solve the issue of @bigbearishappy but let's give it a try :)
Cool, I'll try it next Monday.Thank you.
I found the issue of incorrect cursor refresh. See here: lvgl/lvgl@c514bdd
The
flushing_last
flag wasn't set therefore SDL didn't update the texture.Probably it won't solve the issue of @bigbearishappy but let's give it a try :)
I have apply the patch and test on my machine. But the changes can not solve this issue. The break happens as it used to be.
Can you debug the project to see how that weird area is calculated?
Can you debug the project to see how that weird area is calculated?
OK,I'll have a try and reply to you.
This issue or pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Hello. I have make the lvgl demo work on my raspberrypi CM4 module. When I rotate the app for 0 or 180 degrees.It works fine. But when I rotate it for 90 or 270 degrees.It break when I touch some place of the touch panel. the log shows:"Segmentation fault"
I also have done some debug work for it.I find that when the error happens. The log int drm_flush shows that the value of w is negative.
Is there anyway I can fix this error? I will be appreciated if someone can help me out.