Changeset 73990 in webkit
- Timestamp:
- Dec 13, 2010 5:28:15 PM (13 years ago)
- Location:
- trunk/WebKit/efl
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKit/efl/ChangeLog
r73924 r73990 1 2010-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 1 30 2010-12-13 Alex Bredariol Grilo <abgrilo@profusion.mobi> 2 31 -
trunk/WebKit/efl/ewk/ewk_tiled_backing_store.c
r73924 r73990 63 63 float zoom; 64 64 } update; 65 Ewk_Tiled_Backing_Store_Pre_Render_Request *pre_render;66 65 Eina_Bool smooth_scale; 67 66 }; … … 71 70 unsigned long col, row; 72 71 float zoom; 73 struct _Ewk_Tiled_Backing_Store_Item *it;74 72 }; 75 73 … … 267 265 } 268 266 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)267 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_Pre_Render_Priority priority) 270 268 { 271 269 Ewk_Tiled_Backing_Store_Pre_Render_Request *r; … … 283 281 r->row = row; 284 282 r->zoom = zoom; 285 r->it = it; 286 287 if (it) 288 it->pre_render = r; 283 289 284 return EINA_TRUE; 290 285 } … … 310 305 Ewk_Tiled_Backing_Store_Pre_Render_Request *r; 311 306 r = _ewk_tiled_backing_store_pre_render_request_first(priv); 312 if (r->it && r->it->pre_render)313 r->it->pre_render = NULL;314 307 *pl = eina_inlist_remove(*pl, *pl); 315 308 free(r); … … 317 310 } 318 311 319 static void _ewk_tiled_backing_store_pre_render_request_ remove_unassociated(Ewk_Tiled_Backing_Store_Data *priv)312 static void _ewk_tiled_backing_store_pre_render_request_clear(Ewk_Tiled_Backing_Store_Data *priv) 320 313 { 321 314 Eina_Inlist **pl = &priv->render.pre_render_requests; … … 325 318 EINA_INLIST_CONTAINER_GET( 326 319 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); 354 324 } 355 325 } … … 380 350 } 381 351 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 387 352 t = _ewk_tiled_backing_store_tile_new(priv, col, row, zoom); 388 353 if (!t) … … 400 365 ewk_tile_matrix_tile_updates_clear(tm, t); 401 366 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); 408 368 409 369 end: … … 611 571 } 612 572 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 619 573 if (it->tile) { 620 574 Ewk_Tile *old = it->tile; … … 641 595 /* Do not add new requests to the render queue */ 642 596 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 656 597 t = _ewk_tiled_backing_store_tile_new(priv, m_col, m_row, zoom); 657 598 if (!t) … … 693 634 it->update.process = NULL; 694 635 it->smooth_scale = priv->view.tile.zoom_weak_smooth_scale; 695 it->pre_render = NULL;696 636 _ewk_tiled_backing_store_item_move(it, x, y); 697 637 _ewk_tiled_backing_store_item_resize(it, tw, th); … … 712 652 if (it->update.process) 713 653 _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 }719 654 free(it); 720 655 } … … 1031 966 if (priv->view.cols == cols && priv->view.rows == rows) 1032 967 return; 1033 1034 _ewk_tiled_backing_store_pre_render_request_remove_associated(priv);1035 968 1036 969 old_cols = priv->view.cols; … … 2056 1989 const unsigned long c = info->col; 2057 1990 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)) 2059 1992 break; 2060 1993 } … … 2087 2020 for (i = start_row; i <= end_row; i++) 2088 2021 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)) 2090 2023 goto start_processing; 2091 2024 … … 2108 2041 Ewk_Tile_Unused_Cache *tuc; 2109 2042 2110 _ewk_tiled_backing_store_pre_render_request_ remove_unassociated(priv);2043 _ewk_tiled_backing_store_pre_render_request_clear(priv); 2111 2044 2112 2045 tuc = ewk_tile_matrix_unused_cache_get(priv->model.matrix);
Note: See TracChangeset
for help on using the changeset viewer.