Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1071)

Unified Diff: Source/core/frame/LocalFrame.cpp

Issue 517043003: Move Frame to the Oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update OilpanExpectations Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/frame/LocalFrame.cpp
diff --git a/Source/core/frame/LocalFrame.cpp b/Source/core/frame/LocalFrame.cpp
index 94a5d12e52729f9b52217b2c695faf5249daa7ce..c6611df7d1750f264b88b9ef5bd2f2c4d05b4fa5 100644
--- a/Source/core/frame/LocalFrame.cpp
+++ b/Source/core/frame/LocalFrame.cpp
@@ -106,30 +106,57 @@ inline LocalFrame::LocalFrame(FrameLoaderClient* client, FrameHost* host, FrameO
{
}
-PassRefPtr<LocalFrame> LocalFrame::create(FrameLoaderClient* client, FrameHost* host, FrameOwner* owner)
+PassRefPtrWillBeRawPtr<LocalFrame> LocalFrame::create(FrameLoaderClient* client, FrameHost* host, FrameOwner* owner)
{
- RefPtr<LocalFrame> frame = adoptRef(new LocalFrame(client, host, owner));
+ RefPtrWillBeRawPtr<LocalFrame> frame = adoptRefWillBeNoop(new LocalFrame(client, host, owner));
InspectorInstrumentation::frameAttachedToParent(frame.get());
return frame.release();
}
LocalFrame::~LocalFrame()
{
- setView(nullptr);
- loader().clear();
- setDOMWindow(nullptr);
+ dispose();
haraken 2014/09/08 07:25:58 It looks unsafe to call dispose() methods in Local
sof 2014/09/08 21:17:46 Why do you consider it unsafe? loader() (FrameLoad
+}
+
+void LocalFrame::trace(Visitor* visitor)
+{
+#if ENABLE(OILPAN)
+ visitor->trace(m_destructionObservers);
+#endif
+ visitor->trace(m_loader);
+ visitor->trace(m_navigationScheduler);
+ visitor->trace(m_pagePopupOwner);
+ visitor->trace(m_editor);
+ visitor->trace(m_spellChecker);
+ visitor->trace(m_selection);
+ visitor->trace(m_eventHandler);
+ visitor->trace(m_console);
+ visitor->trace(m_inputMethodController);
+ Frame::trace(visitor);
+ WillBeHeapSupplementable<LocalFrame>::trace(visitor);
+}
- // FIXME: What to do here... some of this is redundant with ~Frame.
- HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end();
- for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it)
+void LocalFrame::dispose()
+{
+#if !ENABLE(OILPAN)
+ setView(nullptr);
dcheng 2014/09/07 22:26:34 Similarly, is it safe to omit this call to setView
sof 2014/09/16 09:08:35 I now believe it is safe, except that it would be
+ loader().dispose(true);
+#else
+ loader().dispose(false);
dcheng 2014/09/07 22:26:34 Why do we pass different bool values, depending on
sof 2014/09/08 21:17:45 As dispose() is called from the dtor, we have to b
+#endif
+
+#if !ENABLE(OILPAN)
+ HashSet<RawPtr<FrameDestructionObserver> >::iterator stop = m_destructionObservers.end();
+ for (HashSet<RawPtr<FrameDestructionObserver> >::iterator it = m_destructionObservers.begin(); it != stop; ++it)
(*it)->frameDestroyed();
+#endif
}
void LocalFrame::detach()
{
// A lot of the following steps can result in the current frame being
// detached, so protect a reference to it.
- RefPtr<LocalFrame> protect(this);
+ RefPtrWillBeRawPtr<LocalFrame> protect(this);
m_loader.stopAllLoaders();
m_loader.closeURL();
detachChildren();
@@ -199,7 +226,7 @@ void LocalFrame::setPrinting(bool printing, const FloatSize& pageSize, const Flo
}
// Subframes of the one we're printing don't lay out to the page size.
- for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) {
+ for (RefPtrWillBeRawPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) {
if (child->isLocalFrame())
toLocalFrame(child.get())->setPrinting(printing, FloatSize(), FloatSize(), 0);
}
@@ -248,7 +275,7 @@ void LocalFrame::didChangeVisibilityState()
if (document())
document()->didChangeVisibilityState();
- Vector<RefPtr<LocalFrame> > childFrames;
+ WillBeHeapVector<RefPtrWillBeMember<LocalFrame> > childFrames;
for (Frame* child = tree().firstChild(); child; child = child->tree().nextSibling()) {
if (child->isLocalFrame())
childFrames.append(toLocalFrame(child));
@@ -277,10 +304,14 @@ void LocalFrame::willDetachFrameHost()
if (parent && parent->isLocalFrame())
toLocalFrame(parent)->loader().checkLoadComplete();
- HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end();
- for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it)
+ WillBeHeapHashSet<RawPtrWillBeWeakMember<FrameDestructionObserver> >::iterator stop = m_destructionObservers.end();
+ for (WillBeHeapHashSet<RawPtrWillBeWeakMember<FrameDestructionObserver> >::iterator it = m_destructionObservers.begin(); it != stop; ++it)
(*it)->willDetachFrameHost();
+#if ENABLE(OILPAN)
+ m_destructionObservers.clear();
haraken 2014/09/08 07:25:58 This is just for performance optimization and not
sof 2014/09/08 21:17:46 Yes, I just thought it appropriate to release the
+#endif
+
// FIXME: Page should take care of updating focus/scrolling instead of Frame.
// FIXME: It's unclear as to why this is called more than once, but it is,
// so page() could be null.
@@ -294,7 +325,7 @@ void LocalFrame::willDetachFrameHost()
void LocalFrame::detachFromFrameHost()
{
- // We should never be detatching the page during a Layout.
+ // We should never be detaching the page during a Layout.
RELEASE_ASSERT(!m_view || !m_view->isInPerformLayout());
m_host = 0;
}
@@ -513,7 +544,7 @@ void LocalFrame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomF
m_pageZoomFactor = pageZoomFactor;
m_textZoomFactor = textZoomFactor;
- for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) {
+ for (RefPtrWillBeRawPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) {
if (child->isLocalFrame())
toLocalFrame(child.get())->setPageAndTextZoomFactors(m_pageZoomFactor, m_textZoomFactor);
}
@@ -525,7 +556,7 @@ void LocalFrame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomF
void LocalFrame::deviceOrPageScaleFactorChanged()
{
document()->mediaQueryAffectingValueChanged();
- for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) {
+ for (RefPtrWillBeRawPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) {
if (child->isLocalFrame())
toLocalFrame(child.get())->deviceOrPageScaleFactorChanged();
}

Powered by Google App Engine
This is Rietveld 408576698