Changeset 134743 in webkit


Ignore:
Timestamp:
Nov 14, 2012 10:44:33 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

[EFL] Port tiled backing store
https://bugs.webkit.org/show_bug.cgi?id=71352

Patch by Ryuan Choi <ryuan.choi@gmail.com> on 2012-11-14
Reviewed by Gyuyoung Kim.

Source/WebKit/efl:

Added ewk_view_setting_tiled_backing_store_enabled_{get|set} to give possibility
to use WebCore's tiled backing store in WebKit/Efl port. This makes WebKit/Efl
compliant with WebKit's generic solution of tiled backing store.

  • WebCoreSupport/ChromeClientEfl.cpp:

(WebCore::ChromeClientEfl::invalidateRootView):
(WebCore):
(WebCore::ChromeClientEfl::visibleRectForTiledBackingStore):

  • WebCoreSupport/ChromeClientEfl.h:

(ChromeClientEfl):

  • ewk/ewk_frame_private.h:

Declared missing classes which used in this file.

  • ewk/ewk_paint_context.cpp:

(ewk_paint_context_paint): Implemented to paint tiled backing store

  • ewk/ewk_view.cpp:

(ewk_view_setting_tiled_backing_store_enabled_set):
Added API to enable/disable the WebCore's tiled backing store.
(ewk_view_setting_tiled_backing_store_enabled_get):
Added API to query if the WebCore's tiled backing store is enabled.
(ewk_view_tiled_backing_store_invalidate):

  • ewk/ewk_view.h:
  • ewk/ewk_view_private.h:
  • ewk/ewk_view_single.cpp:

(_ewk_view_single_smart_repaints_process):
Implemented to update visible area of tiled backing store.

  • tests/test_ewk_view.cpp: Added test case of ewk_view_setting_tiled_backing_store.

(TEST_F):

Tools:

  • EWebLauncher/main.c: Added option to test the WebCore's tiled backing store.

(_User_Arguments):
(windowCreate):
(parseUserArguments):

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/efl/ChangeLog

    r134694 r134743  
     12012-11-14  Ryuan Choi  <ryuan.choi@gmail.com>
     2
     3        [EFL] Port tiled backing store
     4        https://bugs.webkit.org/show_bug.cgi?id=71352
     5
     6        Reviewed by Gyuyoung Kim.
     7
     8        Added ewk_view_setting_tiled_backing_store_enabled_{get|set} to give possibility
     9        to use WebCore's tiled backing store in WebKit/Efl port. This makes WebKit/Efl
     10        compliant with WebKit's generic solution of tiled backing store.
     11
     12        * WebCoreSupport/ChromeClientEfl.cpp:
     13        (WebCore::ChromeClientEfl::invalidateRootView):
     14        (WebCore):
     15        (WebCore::ChromeClientEfl::visibleRectForTiledBackingStore):
     16        * WebCoreSupport/ChromeClientEfl.h:
     17        (ChromeClientEfl):
     18        * ewk/ewk_frame_private.h:
     19        Declared missing classes which used in this file.
     20        * ewk/ewk_paint_context.cpp:
     21        (ewk_paint_context_paint): Implemented to paint tiled backing store
     22        * ewk/ewk_view.cpp:
     23        (ewk_view_setting_tiled_backing_store_enabled_set):
     24        Added API to enable/disable the WebCore's tiled backing store.
     25        (ewk_view_setting_tiled_backing_store_enabled_get):
     26        Added API to query if the WebCore's tiled backing store is enabled.
     27        (ewk_view_tiled_backing_store_invalidate):
     28        * ewk/ewk_view.h:
     29        * ewk/ewk_view_private.h:
     30        * ewk/ewk_view_single.cpp:
     31        (_ewk_view_single_smart_repaints_process):
     32        Implemented to update visible area of tiled backing store.
     33        * tests/test_ewk_view.cpp: Added test case of ewk_view_setting_tiled_backing_store.
     34        (TEST_F):
     35
    1362012-11-14  Ryuan Choi  <ryuan.choi@gmail.com>
    237
  • trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp

    r132615 r134743  
    516516}
    517517
    518 void ChromeClientEfl::invalidateRootView(const IntRect& /*updateRect*/, bool /*immediate*/)
    519 {
    520     notImplemented();
     518void ChromeClientEfl::invalidateRootView(const IntRect& updateRect, bool /*immediate*/)
     519{
     520#if USE(TILED_BACKING_STORE)
     521    ewk_view_tiled_backing_store_invalidate(m_view, updateRect);
     522#else
     523    UNUSED_PARAM(updateRect);
     524    notImplemented();
     525#endif
    521526}
    522527
     
    654659    notImplemented();
    655660}
    656 #endif
    657 
    658 }
     661
     662IntRect ChromeClientEfl::visibleRectForTiledBackingStore() const
     663{
     664    WebCore::FloatRect rect = ewk_view_page_rect_get(m_view);
     665    const Evas_Object* frame = ewk_view_frame_main_get(m_view);
     666
     667    int x, y;
     668    ewk_frame_scroll_pos_get(frame, &x, &y);
     669    return IntRect(x, y, rect.width(), rect.height());
     670}
     671#endif
     672
     673}
  • trunk/Source/WebKit/efl/WebCoreSupport/ChromeClientEfl.h

    r130400 r134743  
    183183#if USE(TILED_BACKING_STORE)
    184184    virtual void delegatedScrollRequested(const IntPoint& scrollPoint);
     185    virtual IntRect visibleRectForTiledBackingStore() const;
    185186#endif
    186187
  • trunk/Source/WebKit/efl/ewk/ewk_frame_private.h

    r119243 r134743  
    2929
    3030namespace WebCore {
     31class HistoryItem;
     32class HTMLPlugInElement;
     33class KURL;
     34class Frame;
    3135class Widget;
    32 class Frame;
    3336}
    3437
  • trunk/Source/WebKit/efl/ewk/ewk_paint_context.cpp

    r123831 r134743  
    2121#include "config.h"
    2222
     23#include "TiledBackingStore.h"
    2324#include "ewk_paint_context_private.h"
    2425#include "ewk_private.h"
     
    159160    WebCore::IntRect paintArea(*area);
    160161
     162#if USE(TILED_BACKING_STORE)
     163    if (view->frame()->tiledBackingStore()) {
     164        int scrollX = view->scrollX();
     165        int scrollY = view->scrollY();
     166
     167        context->graphicContext->translate(-scrollX, -scrollY);
     168
     169        paintArea.move(scrollX, scrollY);
     170
     171        view->frame()->tiledBackingStore()->paint(context->graphicContext.get(), paintArea);
     172        return;
     173    }
     174#endif
     175
    161176    if (view->isTransparent())
    162177        context->graphicContext->clearRect(paintArea);
  • trunk/Source/WebKit/efl/ewk/ewk_view.cpp

    r133788 r134743  
    3737#include "EventHandler.h"
    3838#include "FocusController.h"
     39#include "Frame.h"
    3940#include "FrameLoaderClientEfl.h"
    4041#include "FrameView.h"
     
    5859#include "ResourceHandle.h"
    5960#include "Settings.h"
     61#include "TiledBackingStore.h"
    6062#include "c_instance.h"
    6163#include "ewk_contextmenu_private.h"
     
    47554757}
    47564758
     4759Eina_Bool ewk_view_setting_tiled_backing_store_enabled_set(Evas_Object* ewkView, Eina_Bool enable)
     4760{
     4761#if USE(TILED_BACKING_STORE)
     4762    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
     4763    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
     4764
     4765    priv->pageSettings->setTiledBackingStoreEnabled(enable);
     4766
     4767    return true;
     4768#else
     4769    UNUSED_PARAM(ewkView);
     4770    UNUSED_PARAM(enable);
     4771    return false;
     4772#endif
     4773}
     4774
     4775Eina_Bool ewk_view_setting_tiled_backing_store_enabled_get(Evas_Object* ewkView)
     4776{
     4777#if USE(TILED_BACKING_STORE)
     4778    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
     4779    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
     4780
     4781    return priv->pageSettings->tiledBackingStoreEnabled();
     4782#else
     4783    UNUSED_PARAM(ewkView);
     4784    return false;
     4785#endif
     4786}
     4787
     4788#if USE(TILED_BACKING_STORE)
     4789/**
     4790 * @internal
     4791 * Invalidate given area to repaint. The backing store will mark tiles that are
     4792 * in the area as dirty.
     4793 *
     4794 * @param ewkView View.
     4795 * @param area Area to invalidate
     4796 */
     4797void ewk_view_tiled_backing_store_invalidate(Evas_Object* ewkView, const WebCore::IntRect& area)
     4798{
     4799    EINA_SAFETY_ON_NULL_RETURN(ewkView);
     4800    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
     4801    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
     4802
     4803    if (priv->mainFrame->tiledBackingStore())
     4804        priv->mainFrame->tiledBackingStore()->invalidate(area);
     4805}
     4806#endif
     4807
    47574808namespace EWKPrivate {
    47584809
  • trunk/Source/WebKit/efl/ewk/ewk_view.h

    r133000 r134743  
    27782778
    27792779/**
     2780 * Enables/disables the WebCore's tiled backing store.
     2781 *
     2782 * @param o view object
     2783 * @oaram enable Enable or Disable WebCore's tiled backing store for given View
     2784 *
     2785 * @return true on success, or false on failure
     2786 *
     2787 * @note this is not for general use. It should be used for single view only.
     2788 */
     2789EAPI Eina_Bool ewk_view_setting_tiled_backing_store_enabled_set(Evas_Object *o, Eina_Bool enable);
     2790
     2791/**
     2792 * Queries if the WebCore's tiled backing store is enabled.
     2793 *
     2794 * @param o view object to query
     2795 *
     2796 * @return @c EINA_TRUE if the WebCore's tiled backing store is enabled
     2797 *         @c EINA_FALSE if not or on failure
     2798 */
     2799EAPI Eina_Bool ewk_view_setting_tiled_backing_store_enabled_get(Evas_Object *o);
     2800
     2801/**
    27802802 * Gets the context menu object.
    27812803 * @param o The view that contains context menu.
  • trunk/Source/WebKit/efl/ewk/ewk_view_private.h

    r132615 r134743  
    135135#endif
    136136
     137#if USE(TILED_BACKING_STORE)
     138void ewk_view_tiled_backing_store_invalidate(Evas_Object* ewkView, const WebCore::IntRect& area);
     139#endif
     140
    137141#if ENABLE(TOUCH_EVENTS)
    138142void ewk_view_need_touch_events_set(Evas_Object*, bool needed);
  • trunk/Source/WebKit/efl/ewk/ewk_view_single.cpp

    r132987 r134743  
    2222#include "ewk_view.h"
    2323
    24 #include "ewk_frame.h"
     24#include "TiledBackingStore.h"
     25#include "ewk_frame_private.h"
    2526#include "ewk_private.h"
    2627#include "ewk_view_private.h"
     
    263264    }
    264265
     266#if USE(TILED_BACKING_STORE)
     267    WebCore::Frame* mainFrame = EWKPrivate::coreFrame(smartData->main_frame);
     268    if (mainFrame && mainFrame->tiledBackingStore())
     269        mainFrame->tiledBackingStore()->coverWithTilesIfNeeded();
     270#endif
     271
    265272    Ewk_Paint_Context* context = ewk_paint_context_from_image_new(smartData->backing_store);
    266273    ewk_paint_context_save(context);
  • trunk/Source/WebKit/efl/tests/test_ewk_view.cpp

    r133000 r134743  
    7373
    7474/**
     75* @brief Checking whether function properly get/set fullscreen setting value.
     76*/
     77TEST_F(EWKTestBase, ewk_view_setting_tiled_backing_store)
     78{
     79    loadUrl();
     80    ASSERT_FALSE(ewk_view_setting_tiled_backing_store_enabled_get(webView()));
     81
     82#if USE(TILED_BACKING_STORE)
     83    ASSERT_TRUE(ewk_view_setting_tiled_backing_store_enabled_set(webView(), true));
     84    ASSERT_TRUE(ewk_view_setting_tiled_backing_store_enabled_get(webView()));
     85
     86    ASSERT_TRUE(ewk_view_setting_tiled_backing_store_enabled_set(webView(), false));
     87    ASSERT_FALSE(ewk_view_setting_tiled_backing_store_enabled_get(webView()));
     88#else
     89    ASSERT_FALSE(ewk_view_setting_tiled_backing_store_enabled_set(webView(), true));
     90    ASSERT_FALSE(ewk_view_setting_tiled_backing_store_enabled_get(webView()));
     91
     92    ASSERT_FALSE(ewk_view_setting_tiled_backing_store_enabled_set(webView(), false));
     93    ASSERT_FALSE(ewk_view_setting_tiled_backing_store_enabled_get(webView()));
     94#endif
     95}
     96
     97/**
    7598 * @brief Checking whether function returns proper context menu structure.
    7699 *
  • trunk/Tools/ChangeLog

    r134717 r134743  
     12012-11-14  Ryuan Choi  <ryuan.choi@gmail.com>
     2
     3        [EFL] Port tiled backing store
     4        https://bugs.webkit.org/show_bug.cgi?id=71352
     5
     6        Reviewed by Gyuyoung Kim.
     7
     8        * EWebLauncher/main.c: Added option to test the WebCore's tiled backing store.
     9        (_User_Arguments):
     10        (windowCreate):
     11        (parseUserArguments):
     12
    1132012-11-14  Andy Estes  <aestes@apple.com>
    214
  • trunk/Tools/EWebLauncher/main.c

    r133714 r134743  
    127127        ECORE_GETOPT_STORE_STR
    128128            ('t', "theme", "path to read the theme file from."),
     129        ECORE_GETOPT_STORE_DEF_BOOL
     130            ('T', "tiled-backing-store", "enable/disable WebCore's tiled backingstore(ewk_view_single only)", 0),
    129131        ECORE_GETOPT_STORE_STR
    130132            ('U', "user-agent", "custom user agent string to use."),
     
    148150    char *backingStore;
    149151    Eina_Bool enableEncodingDetector;
     152    Eina_Bool enableTiledBackingStore;
    150153    Eina_Bool isFlattening;
    151154    Eina_Bool isFullscreen;
     
    848851        app->browser = ewk_view_single_add(app->evas);
    849852        info("backing store: single\n");
     853
     854        ewk_view_setting_tiled_backing_store_enabled_set(app->browser, userArgs->enableTiledBackingStore);
    850855    }
    851856
     
    933938    userArgs->backingStore = (char *)backingStores[1];
    934939    userArgs->enableEncodingDetector = EINA_FALSE;
     940    userArgs->enableTiledBackingStore = EINA_FALSE;
    935941    userArgs->isFlattening = EINA_FALSE;
    936942    userArgs->isFullscreen = EINA_FALSE;
     
    951957        ECORE_GETOPT_VALUE_PTR_CAST(userArgs->geometry),
    952958        ECORE_GETOPT_VALUE_STR(userArgs->theme),
     959        ECORE_GETOPT_VALUE_BOOL(userArgs->enableTiledBackingStore),
    953960        ECORE_GETOPT_VALUE_STR(userArgs->userAgent),
    954961        ECORE_GETOPT_VALUE_INT(verbose),
Note: See TracChangeset for help on using the changeset viewer.