In general, we gave three surfaces:
guest screen - surface_qemu
real screen - surface_screen
temporary - processing_screen
qemu_ds_refresh() is called with some period.
When rotate/resize happens then call graph is:
qemu_ds_refresh()
->maruskin_sdl_init()
->SDL_Init
->vga_hw_invalidate() - this is needed to let exynos_4210_fimd know
that it should redraw it's content
->vga_hw_update()->
<x86>
->vga_update_display()
always draw into surface_qemu
<ARM>
->exynos4210_fimd_update()
if content changed draw into surface_qemu
Both of them call:
->dpy_update()
->qemu_ds_update() --- SIGNAL ---> run_qemu_update()
->qemu_update()
qemu_update() calls _sdl_init() if screen alteration was captured.
The fix is to not return after _sdl_init() happens and process an
old surface_qemu into surface_screen.
The thing is that exynos4210_fimd draws its conten only if it changed.
During execution of vga_hw_update() exynos4210_fimd drew its content into
current surface_qemu. After that new surface_qemu is created in
qemu_update(). And if we will return immediately after new surface created,
exynos4210_fimd won't redraw its content to a new surface_qemu.
maru_vga works because it redraws its content always and doesn't care
if it changed or not.
Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com>
if (sdl_alteration == 1) {
sdl_alteration = 0;
_sdl_init();
- return;
}
if (surface_qemu != NULL) {