Changeset 80210 in webkit


Ignore:
Timestamp:
Mar 2, 2011 10:28:57 PM (13 years ago)
Author:
morrita@google.com
Message:

2011-03-02 MORITA Hajime <morrita@google.com>

Reviewed by Kent Tamura.

[Refactoring] Make ScheduledEvent on FrameView abstract out to ScheduleAction
https://bugs.webkit.org/show_bug.cgi?id=54440

  • Extracted FrameActionScheduler from FrameView
  • Extracted FrameAction abstract class from ScheduledEvent, which has fire() virtual method.
  • Renamed ScheduledEvent EventFrameAction

With this change, Any action can be hooked up to the end of the layout.

No new tests. No behavioral change.

  • Android.mk:
  • CMakeLists.txt:
  • GNUmakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • page/FrameActionScheduler.cpp: Added. (WebCore::EventFrameAction::EventFrameAction): (WebCore::EventFrameAction::fire): (WebCore::FrameActionScheduler::FrameActionScheduler): (WebCore::FrameActionScheduler::~FrameActionScheduler): (WebCore::FrameActionScheduler::isEmpty): (WebCore::FrameActionScheduler::clear): (WebCore::FrameActionScheduler::pause): (WebCore::FrameActionScheduler::resume): (WebCore::FrameActionScheduler::dispatch): (WebCore::FrameActionScheduler::scheduleAction): (WebCore::FrameActionScheduler::scheduleEvent):
  • page/FrameActionScheduler.h: Added. (WebCore::FrameAction::FrameAction): (WebCore::FrameAction::~FrameAction): (WebCore::FrameActionScheduler::isScheduled):
  • page/FrameView.cpp: (WebCore::FrameView::FrameView): (WebCore::FrameView::~FrameView): (WebCore::FrameView::layout): (WebCore::FrameView::scheduleEvent): (WebCore::FrameView::pauseScheduledEvents): (WebCore::FrameView::resumeScheduledEvents): (WebCore::FrameView::performPostLayoutTasks): (WebCore::FrameView::updateOverflowStatus):
  • page/FrameView.h:
Location:
trunk/Source/WebCore
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/Android.mk

    r80151 r80210  
    419419        page/FocusController.cpp \
    420420        page/Frame.cpp \
     421        page/FrameActionScheduler.cpp \
    421422        page/FrameTree.cpp \
    422423        page/FrameView.cpp \
  • trunk/Source/WebCore/CMakeLists.txt

    r80151 r80210  
    11421142    page/FocusController.cpp
    11431143    page/Frame.cpp
     1144    page/FrameActionScheduler.cpp
    11441145    page/FrameTree.cpp
    11451146    page/FrameView.cpp
  • trunk/Source/WebCore/ChangeLog

    r80209 r80210  
     12011-03-02  MORITA Hajime  <morrita@google.com>
     2
     3        Reviewed by Kent Tamura.
     4
     5        [Refactoring] Make ScheduledEvent on FrameView abstract out to ScheduleAction
     6        https://bugs.webkit.org/show_bug.cgi?id=54440
     7
     8        - Extracted FrameActionScheduler from FrameView
     9        - Extracted FrameAction abstract class from ScheduledEvent,
     10          which has fire() virtual method.
     11        - Renamed ScheduledEvent EventFrameAction
     12       
     13        With this change, Any action can be hooked up to the end of the layout.
     14       
     15        No new tests. No behavioral change.
     16
     17        * Android.mk:
     18        * CMakeLists.txt:
     19        * GNUmakefile.am:
     20        * WebCore.gypi:
     21        * WebCore.pro:
     22        * WebCore.vcproj/WebCore.vcproj:
     23        * WebCore.xcodeproj/project.pbxproj:
     24        * page/FrameActionScheduler.cpp: Added.
     25        (WebCore::EventFrameAction::EventFrameAction):
     26        (WebCore::EventFrameAction::fire):
     27        (WebCore::FrameActionScheduler::FrameActionScheduler):
     28        (WebCore::FrameActionScheduler::~FrameActionScheduler):
     29        (WebCore::FrameActionScheduler::isEmpty):
     30        (WebCore::FrameActionScheduler::clear):
     31        (WebCore::FrameActionScheduler::pause):
     32        (WebCore::FrameActionScheduler::resume):
     33        (WebCore::FrameActionScheduler::dispatch):
     34        (WebCore::FrameActionScheduler::scheduleAction):
     35        (WebCore::FrameActionScheduler::scheduleEvent):
     36        * page/FrameActionScheduler.h: Added.
     37        (WebCore::FrameAction::FrameAction):
     38        (WebCore::FrameAction::~FrameAction):
     39        (WebCore::FrameActionScheduler::isScheduled):
     40        * page/FrameView.cpp:
     41        (WebCore::FrameView::FrameView):
     42        (WebCore::FrameView::~FrameView):
     43        (WebCore::FrameView::layout):
     44        (WebCore::FrameView::scheduleEvent):
     45        (WebCore::FrameView::pauseScheduledEvents):
     46        (WebCore::FrameView::resumeScheduledEvents):
     47        (WebCore::FrameView::performPostLayoutTasks):
     48        (WebCore::FrameView::updateOverflowStatus):
     49        * page/FrameView.h:
     50
    1512011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>
    252
  • trunk/Source/WebCore/GNUmakefile.am

    r80166 r80210  
    22162216        Source/WebCore/page/Frame.cpp \
    22172217        Source/WebCore/page/Frame.h \
     2218        Source/WebCore/page/FrameActionScheduler.cpp \
     2219        Source/WebCore/page/FrameActionScheduler.h \
    22182220        Source/WebCore/page/FrameLoadRequest.h \
    22192221        Source/WebCore/page/FrameTree.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r80185 r80210  
    23382338            'page/FrameTree.cpp',
    23392339            'page/FrameTree.h',
     2340            'page/FrameActionScheduler.cpp',
     2341            'page/FrameActionScheduler.h',
    23402342            'page/FrameView.cpp',
    23412343            'page/FrameView.h',
  • trunk/Source/WebCore/WebCore.pro

    r80169 r80210  
    884884    page/FocusController.cpp \
    885885    page/Frame.cpp \
     886    page/FrameActionScheduler.cpp \
    886887    page/FrameTree.cpp \
    887888    page/FrameView.cpp \
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r80151 r80210  
    2446124461                                RelativePath="..\page\Frame.h"
    2446224462                                >
     24463                        <File
     24464                                RelativePath="..\page\FrameActionScheduler.cpp"
     24465                                >
     24466                        </File>
     24467                        <File
     24468                                RelativePath="..\page\FrameActionScheduler.h"
     24469                                >
     24470                        </File>
    2446324471                        </File>
    2446424472                        <File
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r80202 r80210  
    31783178                A7AD2F870EC89D07008AB002 /* LinkHash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7AD2F850EC89D07008AB002 /* LinkHash.cpp */; };
    31793179                A7AD2F880EC89D07008AB002 /* LinkHash.h in Headers */ = {isa = PBXBuildFile; fileRef = A7AD2F860EC89D07008AB002 /* LinkHash.h */; settings = {ATTRIBUTES = (Private, ); }; };
     3180                A7B070D2130A409C00A3763C /* FrameActionScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */; };
     3181                A7B070D3130A409C00A3763C /* FrameActionScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B070D1130A409C00A3763C /* FrameActionScheduler.h */; };
    31803182                A7B6E69F0B291A9600D0529F /* DragData.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B6E69D0B291A9600D0529F /* DragData.h */; settings = {ATTRIBUTES = (Private, ); }; };
    31813183                A7BBE26611AFB3F20005EA03 /* JSHTMLMeterElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BBE26411AFB3F20005EA03 /* JSHTMLMeterElement.cpp */; };
     
    96189620                A7AD2F850EC89D07008AB002 /* LinkHash.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkHash.cpp; sourceTree = "<group>"; };
    96199621                A7AD2F860EC89D07008AB002 /* LinkHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkHash.h; sourceTree = "<group>"; };
     9622                A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameActionScheduler.cpp; sourceTree = "<group>"; };
     9623                A7B070D1130A409C00A3763C /* FrameActionScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameActionScheduler.h; sourceTree = "<group>"; };
    96209624                A7B6E69D0B291A9600D0529F /* DragData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragData.h; sourceTree = "<group>"; };
    96219625                A7BBE26411AFB3F20005EA03 /* JSHTMLMeterElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLMeterElement.cpp; sourceTree = "<group>"; };
     
    1402014024                                65BF02290974816300C43196 /* Frame.cpp */,
    1402114025                                65BF022A0974816300C43196 /* Frame.h */,
     14026                                A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */,
     14027                                A7B070D1130A409C00A3763C /* FrameActionScheduler.h */,
    1402214028                                658436850AE01B7400E53753 /* FrameLoadRequest.h */,
    1402314029                                65A21482097A3F5300B9050A /* FrameTree.cpp */,
     
    2072920735                                A853123D11D0471B00D4D077 /* FragmentScriptingPermission.h in Headers */,
    2073020736                                65BF022F0974816300C43196 /* Frame.h in Headers */,
     20737                                A7B070D3130A409C00A3763C /* FrameActionScheduler.h in Headers */,
    2073120738                                656D373C0ADBA5DE00A4554D /* FrameLoader.h in Headers */,
    2073220739                                656D373E0ADBA5DE00A4554D /* FrameLoaderClient.h in Headers */,
     
    2350623513                                41885B9411B6FDA6003383BB /* FormSubmission.cpp in Sources */,
    2350723514                                65BF022E0974816300C43196 /* Frame.cpp in Sources */,
     23515                                A7B070D2130A409C00A3763C /* FrameActionScheduler.cpp in Sources */,
    2350823516                                932E16090AF578340025F408 /* FrameLoader.cpp in Sources */,
    2350923517                                D000EBA211BDAFD400C47726 /* FrameLoaderStateMachine.cpp in Sources */,
  • trunk/Source/WebCore/page/FrameView.cpp

    r79875 r80210  
    3838#include "FocusController.h"
    3939#include "Frame.h"
     40#include "FrameActionScheduler.h"
    4041#include "FrameLoader.h"
    4142#include "FrameLoaderClient.h"
     
    110111static const unsigned maxUpdateWidgetsIterations = 2;
    111112
    112 struct ScheduledEvent {
    113     WTF_MAKE_NONCOPYABLE(ScheduledEvent); WTF_MAKE_FAST_ALLOCATED;
    114 public:
    115     ScheduledEvent() { }
    116     RefPtr<Event> m_event;
    117     RefPtr<Node> m_eventTarget;
    118 };
    119 
    120113FrameView::FrameView(Frame* frame)
    121114    : m_frame(frame)
     
    131124    , m_baseBackgroundColor(Color::white)
    132125    , m_mediaType("screen")
    133     , m_enqueueEvents(0)
     126    , m_actionScheduler(new FrameActionScheduler())
    134127    , m_overflowStatusDirty(true)
    135128    , m_viewportRenderer(0)
     
    166159    if (m_hasPendingPostLayoutTasks) {
    167160        m_postLayoutTasksTimer.stop();
    168         m_scheduledEvents.clear();
    169         m_enqueueEvents = 0;
     161        m_actionScheduler->clear();
    170162    }
    171163   
     
    183175   
    184176    ASSERT(!m_scrollCorner);
    185     ASSERT(m_scheduledEvents.isEmpty());
    186     ASSERT(!m_enqueueEvents);
     177    ASSERT(m_actionScheduler->isEmpty());
    187178
    188179    if (m_frame) {
     
    891882    RenderLayer* layer = root->enclosingLayer();
    892883
    893     pauseScheduledEvents();
     884    m_actionScheduler->pause();
    894885
    895886    bool disableLayoutState = false;
     
    969960            m_postLayoutTasksTimer.startOneShot(0);
    970961            if (needsLayout()) {
    971                 pauseScheduledEvents();
     962                m_actionScheduler->pause();
    972963                layout();
    973964            }
    974965        }
    975966    } else {
    976         resumeScheduledEvents();
    977         ASSERT(m_enqueueEvents);
     967        m_actionScheduler->resume();
    978968    }
    979969
     
    17951785void FrameView::scheduleEvent(PassRefPtr<Event> event, PassRefPtr<Node> eventTarget)
    17961786{
    1797     if (!m_enqueueEvents) {
    1798         ExceptionCode ec = 0;
    1799         eventTarget->dispatchEvent(event, ec);
    1800         return;
    1801     }
    1802 
    1803     ScheduledEvent* scheduledEvent = new ScheduledEvent;
    1804     scheduledEvent->m_event = event;
    1805     scheduledEvent->m_eventTarget = eventTarget;
    1806     m_scheduledEvents.append(scheduledEvent);
     1787    m_actionScheduler->scheduleEvent(event, eventTarget);
    18071788}
    18081789
    18091790void FrameView::pauseScheduledEvents()
    18101791{
    1811     ASSERT(m_scheduledEvents.isEmpty() || m_enqueueEvents);
    1812     m_enqueueEvents++;
     1792    m_actionScheduler->pause();
    18131793}
    18141794
    18151795void FrameView::resumeScheduledEvents()
    18161796{
    1817     m_enqueueEvents--;
    1818     if (!m_enqueueEvents)
    1819         dispatchScheduledEvents();
    1820     ASSERT(m_scheduledEvents.isEmpty() || m_enqueueEvents);
     1797    m_actionScheduler->resume();
    18211798}
    18221799
     
    19441921    scrollToAnchor();
    19451922
    1946     resumeScheduledEvents();
     1923    m_actionScheduler->resume();
    19471924
    19481925    if (!root->printing()) {
     
    19811958        m_verticalOverflow = verticalOverflow;
    19821959       
    1983         scheduleEvent(OverflowEvent::create(horizontalOverflowChanged, horizontalOverflow,
     1960        m_actionScheduler->scheduleEvent(OverflowEvent::create(horizontalOverflowChanged, horizontalOverflow,
    19841961            verticalOverflowChanged, verticalOverflow),
    19851962            m_viewportRenderer->node());
    19861963    }
    19871964   
    1988 }
    1989 
    1990 void FrameView::dispatchScheduledEvents()
    1991 {
    1992     if (m_scheduledEvents.isEmpty())
    1993         return;
    1994 
    1995     Vector<ScheduledEvent*> scheduledEventsCopy = m_scheduledEvents;
    1996     m_scheduledEvents.clear();
    1997    
    1998     Vector<ScheduledEvent*>::iterator end = scheduledEventsCopy.end();
    1999     for (Vector<ScheduledEvent*>::iterator it = scheduledEventsCopy.begin(); it != end; ++it) {
    2000         ScheduledEvent* scheduledEvent = *it;
    2001        
    2002         ExceptionCode ec = 0;
    2003        
    2004         // Only dispatch events to nodes that are in the document
    2005         if (scheduledEvent->m_eventTarget->inDocument())
    2006             scheduledEvent->m_eventTarget->dispatchEvent(scheduledEvent->m_event, ec);
    2007        
    2008         delete scheduledEvent;
    2009     }
    20101965}
    20111966
  • trunk/Source/WebCore/page/FrameView.h

    r79158 r80210  
    3838class Color;
    3939class Event;
     40class FrameActionScheduler;
    4041class FrameViewPrivate;
    4142class IntRect;
     
    4647class RenderEmbeddedObject;
    4748class RenderScrollbarPart;
    48 
    49 struct ScheduledEvent;
    5049
    5150template <typename T> class Timer;
     
    298297    void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
    299298
    300     void dispatchScheduledEvents();
    301299    void performPostLayoutTasks();
    302300
     
    382380    String m_mediaTypeWhenNotPrinting;
    383381
    384     unsigned m_enqueueEvents;
    385     Vector<ScheduledEvent*> m_scheduledEvents;
    386    
     382    OwnPtr<FrameActionScheduler> m_actionScheduler;
     383
    387384    bool m_overflowStatusDirty;
    388385    bool m_horizontalOverflow;
Note: See TracChangeset for help on using the changeset viewer.