Changeset 73990 in webkit


Ignore:
Timestamp:
Dec 13, 2010 5:28:15 PM (13 years ago)
Author:
demarchi@webkit.org
Message:

2010-12-13 Alex Bredariol Grilo <abgrilo@profusion.mobi>

Reviewed by Andreas Kling.

Remove adjacent tiles rendering queue.
https://bugs.webkit.org/show_bug.cgi?id=50023

In the current implementation of the tiled backing store, one extra row
and column of tiles are needed to render the entire viewport. These
extra row/col proved to be expensive when being rendered, and were
postponed to a queue that would render them after rendering the other
tiles of the viewport first. This approach complicated unnecessarily
the logics with no gain for keeping the extra row and column. This
change removes this rendering queue, for later removing the extra row
and column of tiles.

  • ewk/ewk_tiled_backing_store.c: (_ewk_tiled_backing_store_pre_render_request_add): (_ewk_tiled_backing_store_pre_render_request_flush): (_ewk_tiled_backing_store_pre_render_request_clear): (_ewk_tiled_backing_store_pre_render_request_process_single): (_ewk_tiled_backing_store_item_fill): (_ewk_tiled_backing_store_item_add): (_ewk_tiled_backing_store_item_del): (_ewk_tiled_backing_store_recalc_renderers): (ewk_tiled_backing_store_pre_render_region): (ewk_tiled_backing_store_pre_render_relative_radius): (ewk_tiled_backing_store_pre_render_cancel):
Location:
trunk/WebKit/efl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit/efl/ChangeLog

    r73924 r73990  
     12010-12-13  Alex Bredariol Grilo  <abgrilo@profusion.mobi>
     2
     3        Reviewed by Andreas Kling.
     4
     5        Remove adjacent tiles rendering queue.
     6        https://bugs.webkit.org/show_bug.cgi?id=50023
     7
     8        In the current implementation of the tiled backing store, one extra row
     9        and column of tiles are needed to render the entire viewport. These
     10        extra row/col proved to be expensive when being rendered, and were
     11        postponed to a queue that would render them after rendering the other
     12        tiles of the viewport first. This approach complicated unnecessarily
     13        the logics with no gain for keeping the extra row and column. This
     14        change removes this rendering queue, for later removing the extra row
     15        and column of tiles.
     16
     17        * ewk/ewk_tiled_backing_store.c:
     18        (_ewk_tiled_backing_store_pre_render_request_add):
     19        (_ewk_tiled_backing_store_pre_render_request_flush):
     20        (_ewk_tiled_backing_store_pre_render_request_clear):
     21        (_ewk_tiled_backing_store_pre_render_request_process_single):
     22        (_ewk_tiled_backing_store_item_fill):
     23        (_ewk_tiled_backing_store_item_add):
     24        (_ewk_tiled_backing_store_item_del):
     25        (_ewk_tiled_backing_store_recalc_renderers):
     26        (ewk_tiled_backing_store_pre_render_region):
     27        (ewk_tiled_backing_store_pre_render_relative_radius):
     28        (ewk_tiled_backing_store_pre_render_cancel):
     29
    1302010-12-13  Alex Bredariol Grilo  <abgrilo@profusion.mobi>
    231
  • trunk/WebKit/efl/ewk/ewk_tiled_backing_store.c

    r73924 r73990  
    6363        float zoom;
    6464    } update;
    65     Ewk_Tiled_Backing_Store_Pre_Render_Request *pre_render;
    6665    Eina_Bool smooth_scale;
    6766};
     
    7170    unsigned long col, row;
    7271    float zoom;
    73     struct _Ewk_Tiled_Backing_Store_Item *it;
    7472};
    7573
     
    267265}
    268266
    269 static inline Eina_Bool _ewk_tiled_backing_store_pre_render_request_add(Ewk_Tiled_Backing_Store_Data *priv, unsigned long col, unsigned long row, float zoom, Ewk_Tiled_Backing_Store_Item *it, Ewk_Tiled_Backing_Store_Pre_Render_Priority priority)
     267static inline Eina_Bool _ewk_tiled_backing_store_pre_render_request_add(Ewk_Tiled_Backing_Store_Data *priv, unsigned long col, unsigned long row, float zoom, Ewk_Tiled_Backing_Store_Pre_Render_Priority priority)
    270268{
    271269    Ewk_Tiled_Backing_Store_Pre_Render_Request *r;
     
    283281    r->row = row;
    284282    r->zoom = zoom;
    285     r->it = it;
    286 
    287     if (it)
    288         it->pre_render = r;
     283
    289284    return EINA_TRUE;
    290285}
     
    310305        Ewk_Tiled_Backing_Store_Pre_Render_Request *r;
    311306        r = _ewk_tiled_backing_store_pre_render_request_first(priv);
    312         if (r->it && r->it->pre_render)
    313             r->it->pre_render = NULL;
    314307        *pl = eina_inlist_remove(*pl, *pl);
    315308        free(r);
     
    317310}
    318311
    319 static void _ewk_tiled_backing_store_pre_render_request_remove_unassociated(Ewk_Tiled_Backing_Store_Data *priv)
     312static void _ewk_tiled_backing_store_pre_render_request_clear(Ewk_Tiled_Backing_Store_Data *priv)
    320313{
    321314    Eina_Inlist **pl = &priv->render.pre_render_requests;
     
    325318            EINA_INLIST_CONTAINER_GET(
    326319                iter, Ewk_Tiled_Backing_Store_Pre_Render_Request);
    327         if (!r->it) {
    328             tmp = iter->next;
    329             *pl = eina_inlist_remove(*pl, iter);
    330             iter = tmp;
    331             free(r);
    332         } else
    333             iter = iter->next;
    334     }
    335 }
    336 
    337 static void _ewk_tiled_backing_store_pre_render_request_remove_associated(Ewk_Tiled_Backing_Store_Data *priv)
    338 {
    339     Eina_Inlist **pl = &priv->render.pre_render_requests;
    340     Eina_Inlist *iter = *pl, *tmp;
    341     while (iter) {
    342         Ewk_Tiled_Backing_Store_Pre_Render_Request *r =
    343             EINA_INLIST_CONTAINER_GET(
    344                 iter, Ewk_Tiled_Backing_Store_Pre_Render_Request);
    345         if (r->it) {
    346             if (r->it->pre_render)
    347                 r->it->pre_render = NULL;
    348             tmp = iter->next;
    349             *pl = eina_inlist_remove(*pl, iter);
    350             iter = tmp;
    351             free(r);
    352         } else
    353             iter = iter->next;
     320        tmp = iter->next;
     321        *pl = eina_inlist_remove(*pl, iter);
     322        iter = tmp;
     323        free(r);
    354324    }
    355325}
     
    380350    }
    381351
    382     if (req->it && req->it->tile) {
    383         CRITICAL("it->tile = %p (%lu, %lu), but should be NULL", req->it->tile, req->it->tile->row, req->it->tile->col);
    384         goto end;
    385     }
    386 
    387352    t = _ewk_tiled_backing_store_tile_new(priv, col, row, zoom);
    388353    if (!t)
     
    400365    ewk_tile_matrix_tile_updates_clear(tm, t);
    401366
    402     if (req->it) {
    403         _ewk_tiled_backing_store_tile_associate(priv, t, req->it);
    404         if (req->it->pre_render)
    405             req->it->pre_render = NULL;
    406     } else
    407         ewk_tile_matrix_tile_put(tm, t, last_used);
     367    ewk_tile_matrix_tile_put(tm, t, last_used);
    408368
    409369end:
     
    611571        }
    612572
    613         if (it->pre_render) {
    614             _ewk_tiled_backing_store_pre_render_request_del(
    615                 priv, it->pre_render);
    616             it->pre_render = NULL;
    617         }
    618 
    619573        if (it->tile) {
    620574            Ewk_Tile *old = it->tile;
     
    641595            /* Do not add new requests to the render queue */
    642596            if (!priv->render.suspend) {
    643                 if (!_ewk_tiled_backing_store_tile_is_inside_viewport(
    644                         priv, m_col, m_row)) {
    645                     DBG("%d,%d is not inside the viewport", m_col, m_row);
    646                     if (_ewk_tiled_backing_store_tile_is_adjacent_to_viewport(
    647                             priv, m_col, m_row))
    648                         _ewk_tiled_backing_store_pre_render_request_add(
    649                             priv, m_col, m_row, zoom, it,
    650                             PRE_RENDER_PRIORITY_HIGH);
    651                     _ewk_tiled_backing_store_item_process_idler_start(priv);
    652 
    653                     goto end;
    654                 }
    655 
    656597                t = _ewk_tiled_backing_store_tile_new(priv, m_col, m_row, zoom);
    657598                if (!t)
     
    693634    it->update.process = NULL;
    694635    it->smooth_scale = priv->view.tile.zoom_weak_smooth_scale;
    695     it->pre_render = NULL;
    696636    _ewk_tiled_backing_store_item_move(it, x, y);
    697637    _ewk_tiled_backing_store_item_resize(it, tw, th);
     
    712652    if (it->update.process)
    713653        _ewk_tiled_backing_store_item_request_del(priv, it);
    714     if (it->pre_render) {
    715         _ewk_tiled_backing_store_pre_render_request_del(
    716             priv, it->pre_render);
    717         it->pre_render = NULL;
    718     }
    719654    free(it);
    720655}
     
    1031966    if (priv->view.cols == cols && priv->view.rows == rows)
    1032967        return;
    1033 
    1034     _ewk_tiled_backing_store_pre_render_request_remove_associated(priv);
    1035968
    1036969    old_cols = priv->view.cols;
     
    20561989        const unsigned long c = info->col;
    20571990        const unsigned long r = info->row;
    2058         if (!_ewk_tiled_backing_store_pre_render_request_add(priv, c, r, zoom, NULL, PRE_RENDER_PRIORITY_LOW))
     1991        if (!_ewk_tiled_backing_store_pre_render_request_add(priv, c, r, zoom, PRE_RENDER_PRIORITY_LOW))
    20591992            break;
    20601993    }
     
    20872020    for (i = start_row; i <= end_row; i++)
    20882021        for (j = start_col; j <= end_col; j++)
    2089             if (!_ewk_tiled_backing_store_pre_render_request_add(priv, j, i, zoom, NULL, PRE_RENDER_PRIORITY_LOW))
     2022            if (!_ewk_tiled_backing_store_pre_render_request_add(priv, j, i, zoom, PRE_RENDER_PRIORITY_LOW))
    20902023                goto start_processing;
    20912024
     
    21082041    Ewk_Tile_Unused_Cache *tuc;
    21092042
    2110     _ewk_tiled_backing_store_pre_render_request_remove_unassociated(priv);
     2043    _ewk_tiled_backing_store_pre_render_request_clear(priv);
    21112044
    21122045    tuc = ewk_tile_matrix_unused_cache_get(priv->model.matrix);
Note: See TracChangeset for help on using the changeset viewer.