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

Side by Side Diff: Source/heap/Heap.h

Issue 180533004: Oilpan: deprecate GCInfO::typeMarker and replace its checks w/ gcInfo ptr compare (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 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 | « no previous file | Source/heap/Visitor.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 /* 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 10 * * Redistributions in binary form must reproduce the above
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 { 314 {
315 } 315 }
316 316
317 inline Address payload(); 317 inline Address payload();
318 inline size_t payloadSize(); 318 inline size_t payloadSize();
319 319
320 NO_SANITIZE_ADDRESS 320 NO_SANITIZE_ADDRESS
321 const GCInfo* gcInfo() { return m_gcInfo; } 321 const GCInfo* gcInfo() { return m_gcInfo; }
322 322
323 NO_SANITIZE_ADDRESS 323 NO_SANITIZE_ADDRESS
324 const char* typeMarker() { return m_gcInfo->m_typeMarker; }
325
326 NO_SANITIZE_ADDRESS
327 TraceCallback traceCallback() { return m_gcInfo->m_trace; } 324 TraceCallback traceCallback() { return m_gcInfo->m_trace; }
328 325
329 void finalize(); 326 void finalize();
330 327
331 NO_SANITIZE_ADDRESS 328 NO_SANITIZE_ADDRESS
332 inline bool hasFinalizer() { return m_gcInfo->hasFinalizer(); } 329 inline bool hasFinalizer() { return m_gcInfo->hasFinalizer(); }
333 330
334 HEAP_EXPORT static FinalizedHeapObjectHeader* fromPayload(const void*); 331 HEAP_EXPORT static FinalizedHeapObjectHeader* fromPayload(const void*);
335 332
336 private: 333 private:
(...skipping 1062 matching lines...) Expand 10 before | Expand all | Expand 10 after
1399 // specialization of GCInfoTrait for these three classes here. 1396 // specialization of GCInfoTrait for these three classes here.
1400 1397
1401 template<typename Key, typename Value, typename T, typename U, typename V> 1398 template<typename Key, typename Value, typename T, typename U, typename V>
1402 struct GCInfoTrait<HashMap<Key, Value, T, U, V, HeapAllocator> > { 1399 struct GCInfoTrait<HashMap<Key, Value, T, U, V, HeapAllocator> > {
1403 static const GCInfo* get() { return &info; } 1400 static const GCInfo* get() { return &info; }
1404 static const GCInfo info; 1401 static const GCInfo info;
1405 }; 1402 };
1406 1403
1407 template<typename Key, typename Value, typename T, typename U, typename V> 1404 template<typename Key, typename Value, typename T, typename U, typename V>
1408 const GCInfo GCInfoTrait<HashMap<Key, Value, T, U, V, HeapAllocator> >::info = { 1405 const GCInfo GCInfoTrait<HashMap<Key, Value, T, U, V, HeapAllocator> >::info = {
1409 "HashMap",
1410 TraceTrait<HashMap<Key, Value, T, U, V, HeapAllocator> >::trace, 1406 TraceTrait<HashMap<Key, Value, T, U, V, HeapAllocator> >::trace,
1411 0, 1407 0,
1412 false, // HashMap needs no finalizer. 1408 false, // HashMap needs no finalizer.
1413 }; 1409 };
1414 1410
1415 template<typename T, typename U, typename V> 1411 template<typename T, typename U, typename V>
1416 struct GCInfoTrait<HashSet<T, U, V, HeapAllocator> > { 1412 struct GCInfoTrait<HashSet<T, U, V, HeapAllocator> > {
1417 static const GCInfo* get() { return &info; } 1413 static const GCInfo* get() { return &info; }
1418 static const GCInfo info; 1414 static const GCInfo info;
1419 }; 1415 };
1420 1416
1421 template<typename T, typename U, typename V> 1417 template<typename T, typename U, typename V>
1422 const GCInfo GCInfoTrait<HashSet<T, U, V, HeapAllocator> >::info = { 1418 const GCInfo GCInfoTrait<HashSet<T, U, V, HeapAllocator> >::info = {
1423 "HashSet",
1424 TraceTrait<HashSet<T, U, V, HeapAllocator> >::trace, 1419 TraceTrait<HashSet<T, U, V, HeapAllocator> >::trace,
1425 0, 1420 0,
1426 false, // HashSet needs no finalizer. 1421 false, // HashSet needs no finalizer.
1427 }; 1422 };
1428 1423
1429 template<typename T> 1424 template<typename T>
1430 struct GCInfoTrait<Vector<T, 0, HeapAllocator> > { 1425 struct GCInfoTrait<Vector<T, 0, HeapAllocator> > {
1431 static const GCInfo* get() { return &info; } 1426 static const GCInfo* get() { return &info; }
1432 static const GCInfo info; 1427 static const GCInfo info;
1433 }; 1428 };
1434 1429
1435 template<typename T> 1430 template<typename T>
1436 const GCInfo GCInfoTrait<Vector<T, 0, HeapAllocator> >::info = { 1431 const GCInfo GCInfoTrait<Vector<T, 0, HeapAllocator> >::info = {
1437 "Vector",
1438 TraceTrait<Vector<T, 0, HeapAllocator> >::trace, 1432 TraceTrait<Vector<T, 0, HeapAllocator> >::trace,
1439 0, 1433 0,
1440 false, // Vector needs no finalizer if it has no inline capacity. 1434 false, // Vector needs no finalizer if it has no inline capacity.
1441 }; 1435 };
1442 1436
1443 template<typename T, size_t inlineCapacity> 1437 template<typename T, size_t inlineCapacity>
1444 struct GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator> > { 1438 struct GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator> > {
1445 static const GCInfo* get() { return &info; } 1439 static const GCInfo* get() { return &info; }
1446 static const GCInfo info; 1440 static const GCInfo info;
1447 }; 1441 };
1448 1442
1449 template<typename T, size_t inlineCapacity> 1443 template<typename T, size_t inlineCapacity>
1450 struct FinalizerTrait<Vector<T, inlineCapacity, HeapAllocator> > : public Finali zerTraitImpl<Vector<T, inlineCapacity, HeapAllocator>, true> { }; 1444 struct FinalizerTrait<Vector<T, inlineCapacity, HeapAllocator> > : public Finali zerTraitImpl<Vector<T, inlineCapacity, HeapAllocator>, true> { };
1451 1445
1452 template<typename T, size_t inlineCapacity> 1446 template<typename T, size_t inlineCapacity>
1453 const GCInfo GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator> >::info = { 1447 const GCInfo GCInfoTrait<Vector<T, inlineCapacity, HeapAllocator> >::info = {
1454 "Vector",
1455 TraceTrait<Vector<T, inlineCapacity, HeapAllocator> >::trace, 1448 TraceTrait<Vector<T, inlineCapacity, HeapAllocator> >::trace,
1456 FinalizerTrait<Vector<T, inlineCapacity, HeapAllocator> >::finalize, 1449 FinalizerTrait<Vector<T, inlineCapacity, HeapAllocator> >::finalize,
1457 // Finalizer is needed to destruct things stored in the inline capacity. 1450 // Finalizer is needed to destruct things stored in the inline capacity.
1458 inlineCapacity && VectorTraits<T>::needsDestruction, 1451 inlineCapacity && VectorTraits<T>::needsDestruction,
1459 }; 1452 };
1460 1453
1461 template<typename T, typename Traits> 1454 template<typename T, typename Traits>
1462 struct GCInfoTrait<HeapVectorBacking<T, Traits> > { 1455 struct GCInfoTrait<HeapVectorBacking<T, Traits> > {
1463 static const GCInfo* get() { return &info; } 1456 static const GCInfo* get() { return &info; }
1464 static const GCInfo info; 1457 static const GCInfo info;
1465 }; 1458 };
1466 1459
1467 template<typename T, typename Traits> 1460 template<typename T, typename Traits>
1468 const GCInfo GCInfoTrait<HeapVectorBacking<T, Traits> >::info = { 1461 const GCInfo GCInfoTrait<HeapVectorBacking<T, Traits> >::info = {
1469 "VectorBacking",
1470 TraceTrait<HeapVectorBacking<T, Traits> >::trace, 1462 TraceTrait<HeapVectorBacking<T, Traits> >::trace,
1471 FinalizerTrait<HeapVectorBacking<T, Traits> >::finalize, 1463 FinalizerTrait<HeapVectorBacking<T, Traits> >::finalize,
1472 Traits::needsDestruction, 1464 Traits::needsDestruction,
1473 }; 1465 };
1474 1466
1475 template<typename T, typename U, typename V, typename W, typename X> 1467 template<typename T, typename U, typename V, typename W, typename X>
1476 struct GCInfoTrait<HeapHashTableBacking<T, U, V, W, X> > { 1468 struct GCInfoTrait<HeapHashTableBacking<T, U, V, W, X> > {
1477 static const GCInfo* get() { return &info; } 1469 static const GCInfo* get() { return &info; }
1478 static const GCInfo info; 1470 static const GCInfo info;
1479 }; 1471 };
1480 1472
1481 template<typename T, typename U, typename V, typename Traits, typename W> 1473 template<typename T, typename U, typename V, typename Traits, typename W>
1482 const GCInfo GCInfoTrait<HeapHashTableBacking<T, U, V, Traits, W> >::info = { 1474 const GCInfo GCInfoTrait<HeapHashTableBacking<T, U, V, Traits, W> >::info = {
1483 "HashTableBacking",
1484 TraceTrait<HeapHashTableBacking<T, U, V, Traits, W> >::trace, 1475 TraceTrait<HeapHashTableBacking<T, U, V, Traits, W> >::trace,
1485 FinalizerTrait<HeapHashTableBacking<T, U, V, Traits, W> >::finalize, 1476 FinalizerTrait<HeapHashTableBacking<T, U, V, Traits, W> >::finalize,
1486 Traits::needsDestruction, 1477 Traits::needsDestruction,
1487 }; 1478 };
1488 1479
1489 template<bool markWeakMembersStrongly, typename T, typename Traits> 1480 template<bool markWeakMembersStrongly, typename T, typename Traits>
1490 struct BaseVisitVectorBackingTrait { 1481 struct BaseVisitVectorBackingTrait {
1491 static void mark(WebCore::Visitor* visitor, void* self) 1482 static void mark(WebCore::Visitor* visitor, void* self)
1492 { 1483 {
1493 // The allocator can oversize the allocation a little, according to 1484 // The allocator can oversize the allocation a little, according to
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1621 static void trace(WebCore::Visitor* visitor, void* self) 1612 static void trace(WebCore::Visitor* visitor, void* self)
1622 { 1613 {
1623 COMPILE_ASSERT(!Traits::isWeak, WeDontSupportWeaknessInHeapVectors); 1614 COMPILE_ASSERT(!Traits::isWeak, WeDontSupportWeaknessInHeapVectors);
1624 if (WTF::ShouldBeTraced<Traits>::value) 1615 if (WTF::ShouldBeTraced<Traits>::value)
1625 CollectionBackingTraceTrait<WTF::ShouldBeTraced<Traits>::value, fals e, false, HeapVectorBacking<T, Traits>, void>::mark(visitor, self); 1616 CollectionBackingTraceTrait<WTF::ShouldBeTraced<Traits>::value, fals e, false, HeapVectorBacking<T, Traits>, void>::mark(visitor, self);
1626 } 1617 }
1627 static void mark(Visitor* visitor, const Backing* backing) 1618 static void mark(Visitor* visitor, const Backing* backing)
1628 { 1619 {
1629 visitor->mark(backing, &trace); 1620 visitor->mark(backing, &trace);
1630 } 1621 }
1631 static void checkTypeMarker(Visitor* visitor, const Backing* backing) 1622 static void checkGCInfo(Visitor* visitor, const Backing* backing)
1632 { 1623 {
1633 #ifndef NDEBUG 1624 #ifndef NDEBUG
1634 visitor->checkTypeMarker(const_cast<Backing*>(backing), getTypeMarker<Ba cking>()); 1625 visitor->checkGCInfo(const_cast<Backing*>(backing), GCInfoTrait<Backing> ::get());
1635 #endif 1626 #endif
1636 } 1627 }
1637 }; 1628 };
1638 1629
1639 // The trace trait for the heap hashtable backing is used when we find a 1630 // The trace trait for the heap hashtable backing is used when we find a
1640 // direct pointer to the backing from the conservative stack scanner. This 1631 // direct pointer to the backing from the conservative stack scanner. This
1641 // normally indicates that there is an ongoing iteration over the table, and so 1632 // normally indicates that there is an ongoing iteration over the table, and so
1642 // we disable weak processing of table entries. When the backing is found 1633 // we disable weak processing of table entries. When the backing is found
1643 // through the owning hash table we mark differently, in order to do weak 1634 // through the owning hash table we mark differently, in order to do weak
1644 // processing. 1635 // processing.
1645 template<typename Key, typename Value, typename Extractor, typename Traits, type name KeyTraits> 1636 template<typename Key, typename Value, typename Extractor, typename Traits, type name KeyTraits>
1646 struct TraceTrait<HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> > { 1637 struct TraceTrait<HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> > {
1647 typedef HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> Backi ng; 1638 typedef HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> Backi ng;
1648 static void trace(WebCore::Visitor* visitor, void* self) 1639 static void trace(WebCore::Visitor* visitor, void* self)
1649 { 1640 {
1650 if (WTF::ShouldBeTraced<Traits>::value || Traits::isWeak) 1641 if (WTF::ShouldBeTraced<Traits>::value || Traits::isWeak)
1651 CollectionBackingTraceTrait<WTF::ShouldBeTraced<Traits>::value, Trai ts::isWeak, true, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> , void>::mark(visitor, self); 1642 CollectionBackingTraceTrait<WTF::ShouldBeTraced<Traits>::value, Trai ts::isWeak, true, HeapHashTableBacking<Key, Value, Extractor, Traits, KeyTraits> , void>::mark(visitor, self);
1652 } 1643 }
1653 static void mark(Visitor* visitor, const Backing* backing) 1644 static void mark(Visitor* visitor, const Backing* backing)
1654 { 1645 {
1655 if (WTF::ShouldBeTraced<Traits>::value || Traits::isWeak) 1646 if (WTF::ShouldBeTraced<Traits>::value || Traits::isWeak)
1656 visitor->mark(backing, &trace); 1647 visitor->mark(backing, &trace);
1657 else 1648 else
1658 visitor->mark(backing, 0); 1649 visitor->mark(backing, 0);
1659 } 1650 }
1660 static void checkTypeMarker(Visitor* visitor, const Backing* backing) 1651 static void checkGCInfo(Visitor* visitor, const Backing* backing)
1661 { 1652 {
1662 #ifndef NDEBUG 1653 #ifndef NDEBUG
1663 visitor->checkTypeMarker(const_cast<Backing*>(backing), getTypeMarker<Ba cking>()); 1654 visitor->checkGCInfo(const_cast<Backing*>(backing), GCInfoTrait<Backing> ::get());
1664 #endif 1655 #endif
1665 } 1656 }
1666 }; 1657 };
1667 1658
1668 template<typename T, typename U, typename V, typename W, typename X> 1659 template<typename T, typename U, typename V, typename W, typename X>
1669 struct GCInfoTrait<HeapHashMap<T, U, V, W, X> > : public GCInfoTrait<HashMap<T, U, V, W, X, HeapAllocator> > { }; 1660 struct GCInfoTrait<HeapHashMap<T, U, V, W, X> > : public GCInfoTrait<HashMap<T, U, V, W, X, HeapAllocator> > { };
1670 template<typename T, typename U, typename V> 1661 template<typename T, typename U, typename V>
1671 struct GCInfoTrait<HeapHashSet<T, U, V> > : public GCInfoTrait<HashSet<T, U, V, HeapAllocator> > { }; 1662 struct GCInfoTrait<HeapHashSet<T, U, V> > : public GCInfoTrait<HashSet<T, U, V, HeapAllocator> > { };
1672 template<typename T, size_t inlineCapacity> 1663 template<typename T, size_t inlineCapacity>
1673 struct GCInfoTrait<HeapVector<T, inlineCapacity> > : public GCInfoTrait<Vector<T , inlineCapacity, HeapAllocator> > { }; 1664 struct GCInfoTrait<HeapVector<T, inlineCapacity> > : public GCInfoTrait<Vector<T , inlineCapacity, HeapAllocator> > { };
(...skipping 17 matching lines...) Expand all
1691 // to export. This forces it to export all the methods from ThreadHeap. 1682 // to export. This forces it to export all the methods from ThreadHeap.
1692 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf o*); 1683 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf o*);
1693 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*); 1684 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*);
1694 extern template class HEAP_EXPORT ThreadHeap<FinalizedHeapObjectHeader>; 1685 extern template class HEAP_EXPORT ThreadHeap<FinalizedHeapObjectHeader>;
1695 extern template class HEAP_EXPORT ThreadHeap<HeapObjectHeader>; 1686 extern template class HEAP_EXPORT ThreadHeap<HeapObjectHeader>;
1696 #endif 1687 #endif
1697 1688
1698 } 1689 }
1699 1690
1700 #endif // Heap_h 1691 #endif // Heap_h
OLDNEW
« no previous file with comments | « no previous file | Source/heap/Visitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698