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

Side by Side Diff: third_party/WebKit/Source/core/dom/shadow/ShadowRoot.cpp

Issue 1850413002: Improve DEFINE_STATIC_LOCAL()'s handling of Blink GCed objects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address compilation failure Created 4 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 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 * * Neither the name of Google Inc. nor the names of its 10 * * Neither the name of Google Inc. nor the names of its
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 } 290 }
291 291
292 void ShadowRoot::invalidateDescendantInsertionPoints() 292 void ShadowRoot::invalidateDescendantInsertionPoints()
293 { 293 {
294 m_descendantInsertionPointsIsValid = false; 294 m_descendantInsertionPointsIsValid = false;
295 m_shadowRootRareData->clearDescendantInsertionPoints(); 295 m_shadowRootRareData->clearDescendantInsertionPoints();
296 } 296 }
297 297
298 const HeapVector<Member<InsertionPoint>>& ShadowRoot::descendantInsertionPoints( ) 298 const HeapVector<Member<InsertionPoint>>& ShadowRoot::descendantInsertionPoints( )
299 { 299 {
300 DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<InsertionPoint>>, emptyList, ()); 300 DEFINE_STATIC_LOCAL(HeapVector<Member<InsertionPoint>>, emptyList, (new Heap Vector<Member<InsertionPoint>>));
301 if (m_shadowRootRareData && m_descendantInsertionPointsIsValid) 301 if (m_shadowRootRareData && m_descendantInsertionPointsIsValid)
302 return m_shadowRootRareData->descendantInsertionPoints(); 302 return m_shadowRootRareData->descendantInsertionPoints();
303 303
304 m_descendantInsertionPointsIsValid = true; 304 m_descendantInsertionPointsIsValid = true;
305 305
306 if (!containsInsertionPoints()) 306 if (!containsInsertionPoints())
307 return emptyList; 307 return emptyList;
308 308
309 HeapVector<Member<InsertionPoint>> insertionPoints; 309 HeapVector<Member<InsertionPoint>> insertionPoints;
310 for (InsertionPoint& insertionPoint : Traversal<InsertionPoint>::descendants Of(*this)) 310 for (InsertionPoint& insertionPoint : Traversal<InsertionPoint>::descendants Of(*this))
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 m_shadowRootRareData->clearDescendantSlots(); 342 m_shadowRootRareData->clearDescendantSlots();
343 } 343 }
344 344
345 unsigned ShadowRoot::descendantSlotCount() const 345 unsigned ShadowRoot::descendantSlotCount() const
346 { 346 {
347 return m_shadowRootRareData ? m_shadowRootRareData->descendantSlotCount() : 0; 347 return m_shadowRootRareData ? m_shadowRootRareData->descendantSlotCount() : 0;
348 } 348 }
349 349
350 const HeapVector<Member<HTMLSlotElement>>& ShadowRoot::descendantSlots() 350 const HeapVector<Member<HTMLSlotElement>>& ShadowRoot::descendantSlots()
351 { 351 {
352 DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<HTMLSlotElement>>, emptyList , ()); 352 DEFINE_STATIC_LOCAL(HeapVector<Member<HTMLSlotElement>>, emptyList, (new Hea pVector<Member<HTMLSlotElement>>));
353 if (m_descendantSlotsIsValid) { 353 if (m_descendantSlotsIsValid) {
354 ASSERT(m_shadowRootRareData); 354 ASSERT(m_shadowRootRareData);
355 return m_shadowRootRareData->descendantSlots(); 355 return m_shadowRootRareData->descendantSlots();
356 } 356 }
357 if (descendantSlotCount() == 0) 357 if (descendantSlotCount() == 0)
358 return emptyList; 358 return emptyList;
359 359
360 ASSERT(m_shadowRootRareData); 360 ASSERT(m_shadowRootRareData);
361 HeapVector<Member<HTMLSlotElement>> slots; 361 HeapVector<Member<HTMLSlotElement>> slots;
362 slots.reserveCapacity(descendantSlotCount()); 362 slots.reserveCapacity(descendantSlotCount());
363 for (HTMLSlotElement& slot : Traversal<HTMLSlotElement>::descendantsOf(rootN ode())) 363 for (HTMLSlotElement& slot : Traversal<HTMLSlotElement>::descendantsOf(rootN ode()))
364 slots.append(&slot); 364 slots.append(&slot);
365 m_shadowRootRareData->setDescendantSlots(slots); 365 m_shadowRootRareData->setDescendantSlots(slots);
366 m_descendantSlotsIsValid = true; 366 m_descendantSlotsIsValid = true;
367 return m_shadowRootRareData->descendantSlots(); 367 return m_shadowRootRareData->descendantSlots();
368 } 368 }
369 369
370 DEFINE_TRACE(ShadowRoot) 370 DEFINE_TRACE(ShadowRoot)
371 { 371 {
372 visitor->trace(m_prev); 372 visitor->trace(m_prev);
373 visitor->trace(m_next); 373 visitor->trace(m_next);
374 visitor->trace(m_shadowRootRareData); 374 visitor->trace(m_shadowRootRareData);
375 TreeScope::trace(visitor); 375 TreeScope::trace(visitor);
376 DocumentFragment::trace(visitor); 376 DocumentFragment::trace(visitor);
377 } 377 }
378 378
379 } // namespace blink 379 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698