tizen/src/maru_sdl.c: Fix improper rotate/resize operation for ARM.
authorEvgeny Voevodin <e.voevodin@samsung.com>
Fri, 27 Jul 2012 06:30:02 +0000 (10:30 +0400)
committerEvgeny Voevodin <e.voevodin@samsung.com>
Fri, 27 Jul 2012 06:30:02 +0000 (10:30 +0400)
    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>
tizen/src/maru_sdl.c

index 511bf41d5e74c4f079cdcab010fe69a6dde4cc38..753d8615b2017792aa5052ce019ddc97943edca5 100644 (file)
@@ -198,7 +198,6 @@ static void qemu_update(void)
     if (sdl_alteration == 1) {
         sdl_alteration = 0;
         _sdl_init();
-        return;
     }
 
     if (surface_qemu != NULL) {