Title: [179581] trunk/Source/WebCore
- Revision
- 179581
- Author
- [email protected]
- Date
- 2015-02-03 16:51:08 -0800 (Tue, 03 Feb 2015)
Log Message
REGRESSION(176609): Very high memory usage in Canvas/reuse.html performance test
https://bugs.webkit.org/show_bug.cgi?id=139812
Reviewed by Geoffrey Garen.
Update DOMTimerFireState.elementsChangedOutsideViewport to keep only
weak pointers to the Elements, instead of ref'ing them, so as to not
extend their life unnecessarily (by preventing garbage-collection).
The same approach was already adopted in r176496 for
DOMTimer.m_elementsCausingThrottling to address the same issue.
No new tests, already covered by Canvas/reuse.html performance test.
* page/DOMTimer.cpp:
(WebCore::DOMTimerFireState::setScriptMadeNonUserObservableChangesToElement):
(WebCore::DOMTimerFireState::elementsChangedOutsideViewport):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (179580 => 179581)
--- trunk/Source/WebCore/ChangeLog 2015-02-04 00:23:53 UTC (rev 179580)
+++ trunk/Source/WebCore/ChangeLog 2015-02-04 00:51:08 UTC (rev 179581)
@@ -1,3 +1,22 @@
+2015-02-03 Chris Dumez <[email protected]>
+
+ REGRESSION(176609): Very high memory usage in Canvas/reuse.html performance test
+ https://bugs.webkit.org/show_bug.cgi?id=139812
+
+ Reviewed by Geoffrey Garen.
+
+ Update DOMTimerFireState.elementsChangedOutsideViewport to keep only
+ weak pointers to the Elements, instead of ref'ing them, so as to not
+ extend their life unnecessarily (by preventing garbage-collection).
+ The same approach was already adopted in r176496 for
+ DOMTimer.m_elementsCausingThrottling to address the same issue.
+
+ No new tests, already covered by Canvas/reuse.html performance test.
+
+ * page/DOMTimer.cpp:
+ (WebCore::DOMTimerFireState::setScriptMadeNonUserObservableChangesToElement):
+ (WebCore::DOMTimerFireState::elementsChangedOutsideViewport):
+
2015-02-03 Jer Noble <[email protected]>
[MSE] Setting timestampOffset does not change the timestamps in the actual sample, leading to visual and audible errors.
Modified: trunk/Source/WebCore/page/DOMTimer.cpp (179580 => 179581)
--- trunk/Source/WebCore/page/DOMTimer.cpp 2015-02-04 00:23:53 UTC (rev 179580)
+++ trunk/Source/WebCore/page/DOMTimer.cpp 2015-02-04 00:51:08 UTC (rev 179581)
@@ -38,7 +38,7 @@
#include "Settings.h"
#include "UserGestureIndicator.h"
#include <wtf/CurrentTime.h>
-#include <wtf/HashSet.h>
+#include <wtf/HashMap.h>
#include <wtf/MathExtras.h>
#include <wtf/NeverDestroyed.h>
#include <wtf/StdLibExtras.h>
@@ -85,7 +85,7 @@
void setScriptMadeNonUserObservableChangesToElement(Element& element)
{
m_scriptMadeNonUserObservableChanges = true;
- m_elementsChangedOutsideViewport.add(&element);
+ m_elementsChangedOutsideViewport.set(&element, element.createWeakPtr());
}
bool scriptMadeNonUserObservableChanges() const { return m_scriptMadeNonUserObservableChanges; }
@@ -103,8 +103,11 @@
{
ASSERT(elements.isEmpty());
elements.reserveCapacity(m_elementsChangedOutsideViewport.size());
- for (auto& element : m_elementsChangedOutsideViewport)
- elements.uncheckedAppend(element->createWeakPtr());
+ for (auto& element : m_elementsChangedOutsideViewport.values()) {
+ if (element)
+ elements.uncheckedAppend(element);
+ }
+ elements.shrinkToFit();
}
static DOMTimerFireState* current;
@@ -113,7 +116,7 @@
ScriptExecutionContext& m_context;
uint64_t m_initialDOMTreeVersion;
DOMTimerFireState* m_previous;
- HashSet<RefPtr<Element>> m_elementsChangedOutsideViewport;
+ HashMap<Element*, WeakPtr<Element>> m_elementsChangedOutsideViewport;
bool m_contextIsDocument;
bool m_scriptMadeNonUserObservableChanges { false };
bool m_scriptMadeUserObservableChanges { false };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes