| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2013 Google Inc. All rights reserved. | 2  * Copyright (C) 2013 Google Inc. All rights reserved. | 
| 3  * | 3  * | 
| 4  * Redistribution and use in source and binary forms, with or without | 4  * Redistribution and use in source and binary forms, with or without | 
| 5  * modification, are permitted provided that the following conditions are | 5  * modification, are permitted provided that the following conditions are | 
| 6  * met: | 6  * met: | 
| 7  * | 7  * | 
| 8  *     * Redistributions of source code must retain the above copyright | 8  *     * Redistributions of source code must retain the above copyright | 
| 9  * notice, this list of conditions and the following disclaimer. | 9  * notice, this list of conditions and the following disclaimer. | 
| 10  *     * Redistributions in binary form must reproduce the above |  | 
| 11  * copyright notice, this list of conditions and the following disclaimer |  | 
| 12  * in the documentation and/or other materials provided with the |  | 
| 13  * distribution. |  | 
| 14  *     * Neither the name of Google Inc. nor the names of its | 10  *     * Neither the name of Google Inc. nor the names of its | 
| 15  * contributors may be used to endorse or promote products derived from | 11  * contributors may be used to endorse or promote products derived from | 
| 16  * this software without specific prior written permission. | 12  * this software without specific prior written permission. | 
| 17  * | 13  * | 
| 18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| 19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 15  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| 20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 16  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| 21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 17  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| 22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 18  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| 23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 19  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| 24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 20  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| 25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| 26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| 27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| 28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| 29  */ | 25  */ | 
| 30 | 26 | 
| 31 #ifndef Task_h | 27 #ifndef WhitespaceChildList_h | 
| 32 #define Task_h | 28 #define WhitespaceChildList_h | 
| 33 | 29 | 
| 34 #include "wtf/Functional.h" | 30 #include "core/dom/Text.h" | 
| 35 #include "public/platform/WebThread.h" | 31 #include "core/rendering/style/RenderStyleConstants.h" | 
| 36 | 32 | 
| 37 namespace WebCore { | 33 namespace WebCore { | 
| 38 | 34 | 
| 39 class Task : public WebKit::WebThread::Task { | 35 class Text; | 
|  | 36 | 
|  | 37 // Tracks a limited number of whitespace text children during style recalc | 
|  | 38 // to postpone their style recalc as part of optimization to avoid creating | 
|  | 39 // unnecessary whitespace text renderers. If we hit the limit, it recalcs | 
|  | 40 // the whitespace text's style and clears the list. | 
|  | 41 class WhitespaceChildList { | 
| 40 public: | 42 public: | 
| 41     explicit Task(const Closure& closure) | 43     WhitespaceChildList(StyleRecalcChange change) | 
| 42         : m_closure(closure) | 44         : m_change(change) | 
|  | 45     { } | 
|  | 46 | 
|  | 47     void append(Text* textChild) | 
| 43     { | 48     { | 
|  | 49         ASSERT(textChild->containsOnlyWhitespace()); | 
|  | 50         if (m_list.size() == maxWhitespaceChildrenToDefer) { | 
|  | 51             recalcStyle(); | 
|  | 52             m_list.clear(); | 
|  | 53         } | 
|  | 54         m_list.append(textChild); | 
| 44     } | 55     } | 
| 45 | 56 | 
| 46     virtual void run() OVERRIDE | 57     void recalcStyle() const | 
| 47     { | 58     { | 
| 48         m_closure(); | 59         for (unsigned i = 0; i < m_list.size(); ++i) | 
|  | 60             m_list[i]->recalcTextStyle(m_change); | 
| 49     } | 61     } | 
|  | 62 private: | 
|  | 63     StyleRecalcChange m_change; | 
| 50 | 64 | 
| 51 private: | 65     static const unsigned maxWhitespaceChildrenToDefer = 10; | 
| 52     Closure m_closure; | 66     Vector<Text*, maxWhitespaceChildrenToDefer> m_list; | 
| 53 }; | 67 }; | 
| 54 | 68 | 
| 55 } // namespace WebCore | 69 } // namespace WebCore | 
| 56 | 70 | 
| 57 #endif // Task_h | 71 #endif // WhitespaceChildList_h | 
| OLD | NEW | 
|---|