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

Side by Side Diff: third_party/WebKit/Source/platform/heap/Heap.h

Issue 1609943003: Make platform/heap to use USING_FAST_MALLOC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed compile error Created 4 years, 11 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) 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 20 matching lines...) Expand all
31 #ifndef Heap_h 31 #ifndef Heap_h
32 #define Heap_h 32 #define Heap_h
33 33
34 #include "platform/PlatformExport.h" 34 #include "platform/PlatformExport.h"
35 #include "platform/heap/GCInfo.h" 35 #include "platform/heap/GCInfo.h"
36 #include "platform/heap/HeapPage.h" 36 #include "platform/heap/HeapPage.h"
37 #include "platform/heap/PageMemory.h" 37 #include "platform/heap/PageMemory.h"
38 #include "platform/heap/ThreadState.h" 38 #include "platform/heap/ThreadState.h"
39 #include "platform/heap/Visitor.h" 39 #include "platform/heap/Visitor.h"
40 #include "wtf/AddressSanitizer.h" 40 #include "wtf/AddressSanitizer.h"
41 #include "wtf/Allocator.h"
41 #include "wtf/Assertions.h" 42 #include "wtf/Assertions.h"
42 #include "wtf/Atomics.h" 43 #include "wtf/Atomics.h"
43 #include "wtf/Forward.h" 44 #include "wtf/Forward.h"
44 45
45 namespace blink { 46 namespace blink {
46 47
47 class CrossThreadPersistentRegion; 48 class CrossThreadPersistentRegion;
48 template<typename T> class Member; 49 template<typename T> class Member;
49 template<typename T> class WeakMember; 50 template<typename T> class WeakMember;
50 template<typename T> class UntracedMember; 51 template<typename T> class UntracedMember;
51 52
52 template<typename T, bool = NeedsAdjustAndMark<T>::value> class ObjectAliveTrait ; 53 template<typename T, bool = NeedsAdjustAndMark<T>::value> class ObjectAliveTrait ;
53 54
54 template<typename T> 55 template<typename T>
55 class ObjectAliveTrait<T, false> { 56 class ObjectAliveTrait<T, false> {
57 STATIC_ONLY(ObjectAliveTrait);
56 public: 58 public:
57 static bool isHeapObjectAlive(T* object) 59 static bool isHeapObjectAlive(T* object)
58 { 60 {
59 static_assert(sizeof(T), "T must be fully defined"); 61 static_assert(sizeof(T), "T must be fully defined");
60 return HeapObjectHeader::fromPayload(object)->isMarked(); 62 return HeapObjectHeader::fromPayload(object)->isMarked();
61 } 63 }
62 }; 64 };
63 65
64 template<typename T> 66 template<typename T>
65 class ObjectAliveTrait<T, true> { 67 class ObjectAliveTrait<T, true> {
68 STATIC_ONLY(ObjectAliveTrait);
66 public: 69 public:
67 static bool isHeapObjectAlive(T* object) 70 static bool isHeapObjectAlive(T* object)
68 { 71 {
69 static_assert(sizeof(T), "T must be fully defined"); 72 static_assert(sizeof(T), "T must be fully defined");
70 return object->isHeapObjectAlive(); 73 return object->isHeapObjectAlive();
71 } 74 }
72 }; 75 };
73 76
74 class PLATFORM_EXPORT Heap { 77 class PLATFORM_EXPORT Heap {
78 STATIC_ONLY(Heap);
75 public: 79 public:
76 static void init(); 80 static void init();
77 static void shutdown(); 81 static void shutdown();
78 static void doShutdown(); 82 static void doShutdown();
79 83
80 static CrossThreadPersistentRegion& crossThreadPersistentRegion(); 84 static CrossThreadPersistentRegion& crossThreadPersistentRegion();
81 85
82 #if ENABLE(ASSERT) 86 #if ENABLE(ASSERT)
83 static BasePage* findPageFromAddress(Address); 87 static BasePage* findPageFromAddress(Address);
84 static BasePage* findPageFromAddress(const void* pointer) { return findPageF romAddress(reinterpret_cast<Address>(const_cast<void*>(pointer))); } 88 static BasePage* findPageFromAddress(const void* pointer) { return findPageF romAddress(reinterpret_cast<Address>(const_cast<void*>(pointer))); }
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 static double s_estimatedMarkingTimePerByte; 299 static double s_estimatedMarkingTimePerByte;
296 #if ENABLE(ASSERT) 300 #if ENABLE(ASSERT)
297 static uint16_t s_gcGeneration; 301 static uint16_t s_gcGeneration;
298 #endif 302 #endif
299 303
300 friend class ThreadState; 304 friend class ThreadState;
301 }; 305 };
302 306
303 template<typename T> 307 template<typename T>
304 struct IsEagerlyFinalizedType { 308 struct IsEagerlyFinalizedType {
309 STATIC_ONLY(IsEagerlyFinalizedType);
305 private: 310 private:
306 typedef char YesType; 311 typedef char YesType;
307 struct NoType { 312 struct NoType {
308 char padding[8]; 313 char padding[8];
309 }; 314 };
310 315
311 template <typename U> static YesType checkMarker(typename U::IsEagerlyFinali zedMarker*); 316 template <typename U> static YesType checkMarker(typename U::IsEagerlyFinali zedMarker*);
312 template <typename U> static NoType checkMarker(...); 317 template <typename U> static NoType checkMarker(...);
313 318
314 public: 319 public:
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 public: \ 404 public: \
400 GC_PLUGIN_IGNORE("491488") \ 405 GC_PLUGIN_IGNORE("491488") \
401 void* operator new(size_t size) \ 406 void* operator new(size_t size) \
402 { \ 407 { \
403 return allocateObject(size, true); \ 408 return allocateObject(size, true); \
404 } 409 }
405 410
406 #define IS_EAGERLY_FINALIZED() (pageFromObject(this)->heap()->heapIndex() == Bli nkGC::EagerSweepHeapIndex) 411 #define IS_EAGERLY_FINALIZED() (pageFromObject(this)->heap()->heapIndex() == Bli nkGC::EagerSweepHeapIndex)
407 #if ENABLE(ASSERT) && ENABLE(OILPAN) 412 #if ENABLE(ASSERT) && ENABLE(OILPAN)
408 class VerifyEagerFinalization { 413 class VerifyEagerFinalization {
414 DISALLOW_NEW();
409 public: 415 public:
410 ~VerifyEagerFinalization() 416 ~VerifyEagerFinalization()
411 { 417 {
412 // If this assert triggers, the class annotated as eagerly 418 // If this assert triggers, the class annotated as eagerly
413 // finalized ended up not being allocated on the heap 419 // finalized ended up not being allocated on the heap
414 // set aside for eager finalization. The reason is most 420 // set aside for eager finalization. The reason is most
415 // likely that the effective 'operator new' overload for 421 // likely that the effective 'operator new' overload for
416 // this class' leftmost base is for a class that is not 422 // this class' leftmost base is for a class that is not
417 // eagerly finalized. Declaring and defining an 'operator new' 423 // eagerly finalized. Declaring and defining an 'operator new'
418 // for this class is what's required -- consider using 424 // for this class is what's required -- consider using
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 void VisitorHelper<Derived>::handleWeakCell(Visitor* self, void* object) 494 void VisitorHelper<Derived>::handleWeakCell(Visitor* self, void* object)
489 { 495 {
490 T** cell = reinterpret_cast<T**>(object); 496 T** cell = reinterpret_cast<T**>(object);
491 if (*cell && !ObjectAliveTrait<T>::isHeapObjectAlive(*cell)) 497 if (*cell && !ObjectAliveTrait<T>::isHeapObjectAlive(*cell))
492 *cell = nullptr; 498 *cell = nullptr;
493 } 499 }
494 500
495 } // namespace blink 501 } // namespace blink
496 502
497 #endif // Heap_h 503 #endif // Heap_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698