Changeset 102527 in webkit


Ignore:
Timestamp:
Dec 10, 2011 1:35:06 PM (12 years ago)
Author:
rniwa@webkit.org
Message:

There should be a way to count the number of nodes held by undo stack
https://bugs.webkit.org/show_bug.cgi?id=74099

Reviewed by Enrica Casucci.

Add getNodesInCommand to all SimpleEditCommands and EditCommandComposition in debug builds.
We can easily aggregate the number of nodes held by the undo stack by calling
this function on each item in the undo stack.

  • editing/AppendNodeCommand.cpp:

(WebCore::AppendNodeCommand::getNodesInCommand):

  • editing/AppendNodeCommand.h:
  • editing/CompositeEditCommand.cpp:

(WebCore::EditCommandComposition::getNodesInCommand):

  • editing/CompositeEditCommand.h:
  • editing/DeleteFromTextNodeCommand.cpp:

(WebCore::DeleteFromTextNodeCommand::getNodesInCommand):

  • editing/DeleteFromTextNodeCommand.h:
  • editing/EditCommand.cpp:

(WebCore::SimpleEditCommand::addNodeAndDescedents):

  • editing/EditCommand.h:
  • editing/Editor.cpp:

(WebCore::Editor::appliedEditing):

  • editing/InsertIntoTextNodeCommand.cpp:

(WebCore::InsertIntoTextNodeCommand::getNodesInCommand):

  • editing/InsertIntoTextNodeCommand.h:
  • editing/InsertNodeBeforeCommand.cpp:

(WebCore::InsertNodeBeforeCommand::getNodesInCommand):

  • editing/InsertNodeBeforeCommand.h:
  • editing/MergeIdenticalElementsCommand.cpp:

(WebCore::MergeIdenticalElementsCommand::getNodesInCommand):

  • editing/MergeIdenticalElementsCommand.h:
  • editing/RemoveCSSPropertyCommand.cpp:

(WebCore::RemoveCSSPropertyCommand::getNodesInCommand):

  • editing/RemoveCSSPropertyCommand.h:
  • editing/RemoveNodeCommand.cpp:

(WebCore::RemoveNodeCommand::getNodesInCommand):

  • editing/RemoveNodeCommand.h:
  • editing/ReplaceNodeWithSpanCommand.cpp:

(WebCore::ReplaceNodeWithSpanCommand::getNodesInCommand):

  • editing/ReplaceNodeWithSpanCommand.h:
  • editing/SetNodeAttributeCommand.cpp:

(WebCore::SetNodeAttributeCommand::getNodesInCommand):

  • editing/SetNodeAttributeCommand.h:
  • editing/SetSelectionCommand.h:
  • editing/SplitElementCommand.cpp:

(WebCore::SplitElementCommand::getNodesInCommand):

  • editing/SplitElementCommand.h:
  • editing/SplitTextNodeCommand.cpp:

(WebCore::SplitTextNodeCommand::getNodesInCommand):

  • editing/SplitTextNodeCommand.h:
  • editing/WrapContentsInDummySpanCommand.cpp:

(WebCore::WrapContentsInDummySpanCommand::getNodesInCommand):

  • editing/WrapContentsInDummySpanCommand.h:
Location:
trunk/Source/WebCore
Files:
31 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r102526 r102527  
     12011-12-09  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        There should be a way to count the number of nodes held by undo stack
     4        https://bugs.webkit.org/show_bug.cgi?id=74099
     5
     6        Reviewed by Enrica Casucci.
     7
     8        Add getNodesInCommand to all SimpleEditCommands and EditCommandComposition in debug builds.
     9        We can easily aggregate the number of nodes held by the undo stack by calling
     10        this function on each item in the undo stack.
     11
     12        * editing/AppendNodeCommand.cpp:
     13        (WebCore::AppendNodeCommand::getNodesInCommand):
     14        * editing/AppendNodeCommand.h:
     15        * editing/CompositeEditCommand.cpp:
     16        (WebCore::EditCommandComposition::getNodesInCommand):
     17        * editing/CompositeEditCommand.h:
     18        * editing/DeleteFromTextNodeCommand.cpp:
     19        (WebCore::DeleteFromTextNodeCommand::getNodesInCommand):
     20        * editing/DeleteFromTextNodeCommand.h:
     21        * editing/EditCommand.cpp:
     22        (WebCore::SimpleEditCommand::addNodeAndDescedents):
     23        * editing/EditCommand.h:
     24        * editing/Editor.cpp:
     25        (WebCore::Editor::appliedEditing):
     26        * editing/InsertIntoTextNodeCommand.cpp:
     27        (WebCore::InsertIntoTextNodeCommand::getNodesInCommand):
     28        * editing/InsertIntoTextNodeCommand.h:
     29        * editing/InsertNodeBeforeCommand.cpp:
     30        (WebCore::InsertNodeBeforeCommand::getNodesInCommand):
     31        * editing/InsertNodeBeforeCommand.h:
     32        * editing/MergeIdenticalElementsCommand.cpp:
     33        (WebCore::MergeIdenticalElementsCommand::getNodesInCommand):
     34        * editing/MergeIdenticalElementsCommand.h:
     35        * editing/RemoveCSSPropertyCommand.cpp:
     36        (WebCore::RemoveCSSPropertyCommand::getNodesInCommand):
     37        * editing/RemoveCSSPropertyCommand.h:
     38        * editing/RemoveNodeCommand.cpp:
     39        (WebCore::RemoveNodeCommand::getNodesInCommand):
     40        * editing/RemoveNodeCommand.h:
     41        * editing/ReplaceNodeWithSpanCommand.cpp:
     42        (WebCore::ReplaceNodeWithSpanCommand::getNodesInCommand):
     43        * editing/ReplaceNodeWithSpanCommand.h:
     44        * editing/SetNodeAttributeCommand.cpp:
     45        (WebCore::SetNodeAttributeCommand::getNodesInCommand):
     46        * editing/SetNodeAttributeCommand.h:
     47        * editing/SetSelectionCommand.h:
     48        * editing/SplitElementCommand.cpp:
     49        (WebCore::SplitElementCommand::getNodesInCommand):
     50        * editing/SplitElementCommand.h:
     51        * editing/SplitTextNodeCommand.cpp:
     52        (WebCore::SplitTextNodeCommand::getNodesInCommand):
     53        * editing/SplitTextNodeCommand.h:
     54        * editing/WrapContentsInDummySpanCommand.cpp:
     55        (WebCore::WrapContentsInDummySpanCommand::getNodesInCommand):
     56        * editing/WrapContentsInDummySpanCommand.h:
     57
    1582011-11-09  Robert Hogan  <robert@webkit.org>
    259
  • trunk/Source/WebCore/editing/AppendNodeCommand.cpp

    r101349 r102527  
    8080}
    8181
     82#ifndef NDEBUG
     83void AppendNodeCommand::getNodesInCommand(HashSet<Node*>& nodes)
     84{
     85    addNodeAndDescendants(m_parent.get(), nodes);
     86    addNodeAndDescendants(m_node.get(), nodes);
     87}
     88#endif
     89
    8290} // namespace WebCore
  • trunk/Source/WebCore/editing/AppendNodeCommand.h

    r81185 r102527  
    4141    AppendNodeCommand(PassRefPtr<ContainerNode> parent, PassRefPtr<Node>);
    4242
    43     virtual void doApply();
    44     virtual void doUnapply();
     43    virtual void doApply() OVERRIDE;
     44    virtual void doUnapply() OVERRIDE;
     45
     46#ifndef NDEBUG
     47    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     48#endif
    4549
    4650    RefPtr<ContainerNode> m_parent;
  • trunk/Source/WebCore/editing/CompositeEditCommand.cpp

    r102357 r102527  
    101101}
    102102
     103#ifndef NDEBUG
     104void EditCommandComposition::getNodesInCommand(HashSet<Node*>& nodes)
     105{
     106    size_t size = m_commands.size();
     107    for (size_t i = 0; i < size; ++i)
     108        m_commands[i]->getNodesInCommand(nodes);
     109}
     110#endif
     111
    103112CompositeEditCommand::CompositeEditCommand(Document *document)
    104113    : EditCommand(document)
  • trunk/Source/WebCore/editing/CompositeEditCommand.h

    r102357 r102527  
    4646    virtual void doReapply() OVERRIDE;
    4747    void append(SimpleEditCommand*);
     48
     49#ifndef NDEBUG
     50    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     51#endif
    4852
    4953private:
  • trunk/Source/WebCore/editing/DeleteFromTextNodeCommand.cpp

    r101349 r102527  
    7777}
    7878
     79#ifndef NDEBUG
     80void DeleteFromTextNodeCommand::getNodesInCommand(HashSet<Node*>& nodes)
     81{
     82    addNodeAndDescendants(m_node.get(), nodes);
     83}
     84#endif
     85
    7986} // namespace WebCore
  • trunk/Source/WebCore/editing/DeleteFromTextNodeCommand.h

    r39456 r102527  
    4343    DeleteFromTextNodeCommand(PassRefPtr<Text>, unsigned offset, unsigned count);
    4444
    45     virtual void doApply();
    46     virtual void doUnapply();
    47 
     45    virtual void doApply() OVERRIDE;
     46    virtual void doUnapply() OVERRIDE;
     47   
     48#ifndef NDEBUG
     49    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     50#endif
     51   
    4852    RefPtr<Text> m_node;
    4953    unsigned m_offset;
  • trunk/Source/WebCore/editing/EditCommand.cpp

    r102357 r102527  
    252252}
    253253
     254#ifndef NDEBUG
     255void SimpleEditCommand::addNodeAndDescendants(Node* startNode, HashSet<Node*>& nodes)
     256{
     257    for (Node* node = startNode; node; node = node->traverseNextNode(startNode))
     258        nodes.add(node);
     259}
     260#endif
     261
    254262void applyCommand(PassRefPtr<EditCommand> command)
    255263{
  • trunk/Source/WebCore/editing/EditCommand.h

    r102413 r102527  
    2929#include "EditAction.h"
    3030#include "VisibleSelection.h"
     31
     32#ifndef NDEBUG
     33#include <wtf/HashSet.h>
     34#endif
    3135
    3236namespace WebCore {
     
    96100
    97101class SimpleEditCommand : public EditCommand {
     102public:
     103
     104#ifndef NDEBUG
     105    virtual void getNodesInCommand(HashSet<Node*>&) = 0;
     106#endif
     107
    98108protected:
    99109    SimpleEditCommand(Document* document) : EditCommand(document) { }
     110
     111#ifndef NDEBUG
     112    void addNodeAndDescendants(Node*, HashSet<Node*>&);
     113#endif
     114
    100115private:
    101116    virtual bool isSimpleEditCommand() const OVERRIDE { return true; }
  • trunk/Source/WebCore/editing/Editor.cpp

    r102357 r102527  
    891891            client()->registerCommandForUndo(toCompositeEditCommand(m_lastEditCommand.get())->ensureComposition());
    892892    }
     893
    893894    respondToChangedContents(newSelection);
    894895}
  • trunk/Source/WebCore/editing/InsertIntoTextNodeCommand.cpp

    r101349 r102527  
    7777}
    7878
     79#ifndef NDEBUG
     80void InsertIntoTextNodeCommand::getNodesInCommand(HashSet<Node*>& nodes)
     81{
     82    addNodeAndDescendants(m_node.get(), nodes);
     83}
     84#endif
     85
    7986} // namespace WebCore
  • trunk/Source/WebCore/editing/InsertIntoTextNodeCommand.h

    r39456 r102527  
    4343    InsertIntoTextNodeCommand(PassRefPtr<Text> node, unsigned offset, const String& text);
    4444
    45     virtual void doApply();
    46     virtual void doUnapply();
    47 
     45    virtual void doApply() OVERRIDE;
     46    virtual void doUnapply() OVERRIDE;
     47   
     48#ifndef NDEBUG
     49    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     50#endif
     51   
    4852    RefPtr<Text> m_node;
    4953    unsigned m_offset;
  • trunk/Source/WebCore/editing/InsertNodeBeforeCommand.cpp

    r101349 r102527  
    7272}
    7373
     74#ifndef NDEBUG
     75void InsertNodeBeforeCommand::getNodesInCommand(HashSet<Node*>& nodes)
     76{
     77    addNodeAndDescendants(m_insertChild.get(), nodes);
     78    addNodeAndDescendants(m_refChild.get(), nodes);
    7479}
     80#endif
     81
     82}
  • trunk/Source/WebCore/editing/InsertNodeBeforeCommand.h

    r34536 r102527  
    4141    InsertNodeBeforeCommand(PassRefPtr<Node> childToInsert, PassRefPtr<Node> childToInsertBefore);
    4242
    43     virtual void doApply();
    44     virtual void doUnapply();
    45 
     43    virtual void doApply() OVERRIDE;
     44    virtual void doUnapply() OVERRIDE;
     45   
     46#ifndef NDEBUG
     47    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     48#endif
     49   
    4650    RefPtr<Node> m_insertChild;
    4751    RefPtr<Node> m_refChild;
  • trunk/Source/WebCore/editing/MergeIdenticalElementsCommand.cpp

    r81965 r102527  
    8787}
    8888
     89#ifndef NDEBUG
     90void MergeIdenticalElementsCommand::getNodesInCommand(HashSet<Node*>& nodes)
     91{
     92    addNodeAndDescendants(m_element1.get(), nodes);
     93    addNodeAndDescendants(m_element2.get(), nodes);
     94}
     95#endif
     96
    8997} // namespace WebCore
  • trunk/Source/WebCore/editing/MergeIdenticalElementsCommand.h

    r34536 r102527  
    4141    MergeIdenticalElementsCommand(PassRefPtr<Element>, PassRefPtr<Element>);
    4242
    43     virtual void doApply();
    44     virtual void doUnapply();
    45 
     43    virtual void doApply() OVERRIDE;
     44    virtual void doUnapply() OVERRIDE;
     45   
     46#ifndef NDEBUG
     47    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     48#endif
     49   
    4650    RefPtr<Element> m_element1;
    4751    RefPtr<Element> m_element2;
  • trunk/Source/WebCore/editing/RemoveCSSPropertyCommand.cpp

    r65014 r102527  
    5555}
    5656
     57#ifndef NDEBUG
     58void RemoveCSSPropertyCommand::getNodesInCommand(HashSet<Node*>& nodes)
     59{
     60    addNodeAndDescendants(m_element.get(), nodes);
     61}
     62#endif
     63
    5764} // namespace WebCore
  • trunk/Source/WebCore/editing/RemoveCSSPropertyCommand.h

    r79976 r102527  
    4343    RemoveCSSPropertyCommand(Document*, PassRefPtr<StyledElement>, CSSPropertyID property);
    4444
    45     virtual void doApply();
    46     virtual void doUnapply();
    47 
     45    virtual void doApply() OVERRIDE;
     46    virtual void doUnapply() OVERRIDE;
     47   
     48#ifndef NDEBUG
     49    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     50#endif
     51   
    4852    RefPtr<StyledElement> m_element;
    4953    CSSPropertyID m_property;
  • trunk/Source/WebCore/editing/RemoveNodeCommand.cpp

    r81965 r102527  
    6464}
    6565
     66#ifndef NDEBUG
     67void RemoveNodeCommand::getNodesInCommand(HashSet<Node*>& nodes)
     68{
     69    addNodeAndDescendants(m_parent.get(), nodes);
     70    addNodeAndDescendants(m_refChild.get(), nodes);
     71    addNodeAndDescendants(m_node.get(), nodes);
    6672}
     73#endif
     74
     75}
  • trunk/Source/WebCore/editing/RemoveNodeCommand.h

    r69868 r102527  
    4141    RemoveNodeCommand(PassRefPtr<Node>);
    4242
    43     virtual void doApply();
    44     virtual void doUnapply();
     43    virtual void doApply() OVERRIDE;
     44    virtual void doUnapply() OVERRIDE;
     45
     46#ifndef NDEBUG
     47    void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     48#endif
    4549
    4650    RefPtr<Node> m_node;
  • trunk/Source/WebCore/editing/ReplaceNodeWithSpanCommand.cpp

    r98796 r102527  
    8686}
    8787
     88#ifndef NDEBUG
     89void ReplaceNodeWithSpanCommand::getNodesInCommand(HashSet<Node*>& nodes)
     90{
     91    addNodeAndDescendants(m_elementToReplace.get(), nodes);
     92    addNodeAndDescendants(m_spanElement.get(), nodes);
     93}
     94#endif
     95
    8896} // namespace WebCore
  • trunk/Source/WebCore/editing/ReplaceNodeWithSpanCommand.h

    r95901 r102527  
    5151    ReplaceNodeWithSpanCommand(PassRefPtr<HTMLElement>);
    5252
    53     virtual void doApply();
    54     virtual void doUnapply();
     53    virtual void doApply() OVERRIDE;
     54    virtual void doUnapply() OVERRIDE;
     55   
     56#ifndef NDEBUG
     57    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     58#endif
    5559
    5660    RefPtr<HTMLElement> m_elementToReplace;
  • trunk/Source/WebCore/editing/SetNodeAttributeCommand.cpp

    r39456 r102527  
    5555}
    5656
     57#ifndef NDEBUG
     58void SetNodeAttributeCommand::getNodesInCommand(HashSet<Node*>& nodes)
     59{
     60    addNodeAndDescendants(m_element.get(), nodes);
     61}
     62#endif
     63
    5764} // namespace WebCore
  • trunk/Source/WebCore/editing/SetNodeAttributeCommand.h

    r86135 r102527  
    4242    SetNodeAttributeCommand(PassRefPtr<Element>, const QualifiedName& attribute, const AtomicString& value);
    4343
    44     virtual void doApply();
    45     virtual void doUnapply();
     44    virtual void doApply() OVERRIDE;
     45    virtual void doUnapply() OVERRIDE;
     46
     47#ifndef NDEBUG
     48    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     49#endif
    4650
    4751    RefPtr<Element> m_element;
  • trunk/Source/WebCore/editing/SetSelectionCommand.h

    r85864 r102527  
    4141private:
    4242    SetSelectionCommand(const VisibleSelection&, FrameSelection::SetSelectionOptions);
    43     virtual void doApply();
    44     virtual void doUnapply();
     43
     44    virtual void doApply() OVERRIDE;
     45    virtual void doUnapply() OVERRIDE;
     46
     47#ifndef NDEBUG
     48    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE { }
     49#endif
    4550
    4651    FrameSelection::SetSelectionOptions m_options;
  • trunk/Source/WebCore/editing/SplitElementCommand.cpp

    r94427 r102527  
    108108    executeApply();
    109109}
     110
     111#ifndef NDEBUG
     112void SplitElementCommand::getNodesInCommand(HashSet<Node*>& nodes)
     113{
     114    addNodeAndDescendants(m_element1.get(), nodes);
     115    addNodeAndDescendants(m_element2.get(), nodes);
     116    addNodeAndDescendants(m_atChild.get(), nodes);
     117}
     118#endif
    110119   
    111120} // namespace WebCore
  • trunk/Source/WebCore/editing/SplitElementCommand.h

    r50310 r102527  
    4141    SplitElementCommand(PassRefPtr<Element>, PassRefPtr<Node> splitPointChild);
    4242
    43     virtual void doApply();
    44     virtual void doUnapply();
    45     virtual void doReapply();
     43    virtual void doApply() OVERRIDE;
     44    virtual void doUnapply() OVERRIDE;
     45    virtual void doReapply() OVERRIDE;
    4646    void executeApply();
     47
     48#ifndef NDEBUG
     49    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     50#endif
    4751
    4852    RefPtr<Element> m_element1;
  • trunk/Source/WebCore/editing/SplitTextNodeCommand.cpp

    r81965 r102527  
    104104    m_text2->deleteData(0, m_offset, ec);
    105105}
     106
     107#ifndef NDEBUG
     108void SplitTextNodeCommand::getNodesInCommand(HashSet<Node*>& nodes)
     109{
     110    addNodeAndDescendants(m_text1.get(), nodes);
     111    addNodeAndDescendants(m_text2.get(), nodes);
     112}
     113#endif
    106114   
    107115} // namespace WebCore
  • trunk/Source/WebCore/editing/SplitTextNodeCommand.h

    r64034 r102527  
    4343    SplitTextNodeCommand(PassRefPtr<Text>, int offset);
    4444
    45     virtual void doApply();
    46     virtual void doUnapply();
    47     virtual void doReapply();
     45    virtual void doApply() OVERRIDE;
     46    virtual void doUnapply() OVERRIDE;
     47    virtual void doReapply() OVERRIDE;
    4848    void insertText1AndTrimText2();
     49   
     50#ifndef NDEBUG
     51    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     52#endif
    4953
    5054    RefPtr<Text> m_text1;
  • trunk/Source/WebCore/editing/WrapContentsInDummySpanCommand.cpp

    r81965 r102527  
    9090    executeApply();
    9191}
     92
     93#ifndef NDEBUG
     94void WrapContentsInDummySpanCommand::getNodesInCommand(HashSet<Node*>& nodes)
     95{
     96    addNodeAndDescendants(m_element.get(), nodes);
     97    addNodeAndDescendants(m_dummySpan.get(), nodes);
     98}
     99#endif
    92100   
    93101} // namespace WebCore
  • trunk/Source/WebCore/editing/WrapContentsInDummySpanCommand.h

    r50310 r102527  
    4343    WrapContentsInDummySpanCommand(PassRefPtr<Element>);
    4444
    45     virtual void doApply();
    46     virtual void doUnapply();
    47     virtual void doReapply();
     45    virtual void doApply() OVERRIDE;
     46    virtual void doUnapply() OVERRIDE;
     47    virtual void doReapply() OVERRIDE;
    4848    void executeApply();
     49
     50#ifndef NDEBUG
     51    virtual void getNodesInCommand(HashSet<Node*>&) OVERRIDE;
     52#endif
    4953
    5054    RefPtr<Element> m_element;
Note: See TracChangeset for help on using the changeset viewer.