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

Side by Side Diff: Source/web/WebFrame.cpp

Issue 1166623002: Oilpan: Remove a visitor parameter from isHeapObjectAlive (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/platform/heap/Visitor.h ('k') | Source/wtf/DefaultAllocator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "public/web/WebFrame.h" 6 #include "public/web/WebFrame.h"
7 7
8 #include "bindings/core/v8/WindowProxyManager.h" 8 #include "bindings/core/v8/WindowProxyManager.h"
9 #include "core/frame/FrameHost.h" 9 #include "core/frame/FrameHost.h"
10 #include "core/frame/FrameView.h" 10 #include "core/frame/FrameView.h"
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 , m_openedFrameTracker(new OpenedFrameTracker) 290 , m_openedFrameTracker(new OpenedFrameTracker)
291 { 291 {
292 } 292 }
293 293
294 WebFrame::~WebFrame() 294 WebFrame::~WebFrame()
295 { 295 {
296 m_openedFrameTracker.reset(0); 296 m_openedFrameTracker.reset(0);
297 } 297 }
298 298
299 #if ENABLE(OILPAN) 299 #if ENABLE(OILPAN)
300 ALWAYS_INLINE bool WebFrame::isFrameAlive(const WebFrame* frame)
301 {
302 if (!frame)
303 return true;
304
305 if (frame->isWebLocalFrame())
306 return Heap::isHeapObjectAlive(toWebLocalFrameImpl(frame));
307
308 return Heap::isHeapObjectAlive(toWebRemoteFrameImpl(frame));
309 }
310
300 template <typename VisitorDispatcher> 311 template <typename VisitorDispatcher>
301 ALWAYS_INLINE void WebFrame::traceFrameImpl(VisitorDispatcher visitor, WebFrame* frame) 312 ALWAYS_INLINE void WebFrame::traceFrameImpl(VisitorDispatcher visitor, WebFrame* frame)
302 { 313 {
303 if (!frame) 314 if (!frame)
304 return; 315 return;
305 316
306 if (frame->isWebLocalFrame()) 317 if (frame->isWebLocalFrame())
307 visitor->trace(toWebLocalFrameImpl(frame)); 318 visitor->trace(toWebLocalFrameImpl(frame));
308 else 319 else
309 visitor->trace(toWebRemoteFrameImpl(frame)); 320 visitor->trace(toWebRemoteFrameImpl(frame));
310 } 321 }
311 322
312 template <typename VisitorDispatcher> 323 template <typename VisitorDispatcher>
313 ALWAYS_INLINE void WebFrame::traceFramesImpl(VisitorDispatcher visitor, WebFrame * frame) 324 ALWAYS_INLINE void WebFrame::traceFramesImpl(VisitorDispatcher visitor, WebFrame * frame)
314 { 325 {
315 ASSERT(frame); 326 ASSERT(frame);
316 traceFrame(visitor, frame->m_parent); 327 traceFrame(visitor, frame->m_parent);
317 for (WebFrame* child = frame->firstChild(); child; child = child->nextSiblin g()) 328 for (WebFrame* child = frame->firstChild(); child; child = child->nextSiblin g())
318 traceFrame(visitor, child); 329 traceFrame(visitor, child);
319 // m_opener is a weak reference. 330 // m_opener is a weak reference.
320 frame->m_openedFrameTracker->traceFrames(visitor); 331 frame->m_openedFrameTracker->traceFrames(visitor);
321 } 332 }
322 333
323 template <typename VisitorDispatcher> 334 template <typename VisitorDispatcher>
324 ALWAYS_INLINE bool WebFrame::isFrameAliveImpl(VisitorDispatcher visitor, const W ebFrame* frame)
325 {
326 if (!frame)
327 return true;
328
329 if (frame->isWebLocalFrame())
330 return visitor->isHeapObjectAlive(toWebLocalFrameImpl(frame));
331
332 return visitor->isHeapObjectAlive(toWebRemoteFrameImpl(frame));
333 }
334
335 template <typename VisitorDispatcher>
336 ALWAYS_INLINE void WebFrame::clearWeakFramesImpl(VisitorDispatcher visitor) 335 ALWAYS_INLINE void WebFrame::clearWeakFramesImpl(VisitorDispatcher visitor)
337 { 336 {
338 if (!isFrameAlive(visitor, m_opener)) 337 if (!isFrameAlive(m_opener))
339 m_opener = nullptr; 338 m_opener = nullptr;
340 } 339 }
341 340
342 #define DEFINE_VISITOR_METHOD(VisitorDispatcher) \ 341 #define DEFINE_VISITOR_METHOD(VisitorDispatcher) \
343 void WebFrame::traceFrame(VisitorDispatcher visitor, WebFrame* frame) { trac eFrameImpl(visitor, frame); } \ 342 void WebFrame::traceFrame(VisitorDispatcher visitor, WebFrame* frame) { trac eFrameImpl(visitor, frame); } \
344 void WebFrame::traceFrames(VisitorDispatcher visitor, WebFrame* frame) { tra ceFramesImpl(visitor, frame); } \ 343 void WebFrame::traceFrames(VisitorDispatcher visitor, WebFrame* frame) { tra ceFramesImpl(visitor, frame); } \
345 bool WebFrame::isFrameAlive(VisitorDispatcher visitor, const WebFrame* frame ) { return isFrameAliveImpl(visitor, frame); } \
346 void WebFrame::clearWeakFrames(VisitorDispatcher visitor) { clearWeakFramesI mpl(visitor); } 344 void WebFrame::clearWeakFrames(VisitorDispatcher visitor) { clearWeakFramesI mpl(visitor); }
347 345
348 DEFINE_VISITOR_METHOD(Visitor*) 346 DEFINE_VISITOR_METHOD(Visitor*)
349 DEFINE_VISITOR_METHOD(InlinedGlobalMarkingVisitor) 347 DEFINE_VISITOR_METHOD(InlinedGlobalMarkingVisitor)
350 348
351 #undef DEFINE_VISITOR_METHOD 349 #undef DEFINE_VISITOR_METHOD
352 #endif 350 #endif
353 351
354 } // namespace blink 352 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/heap/Visitor.h ('k') | Source/wtf/DefaultAllocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698