| Index: third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md
|
| diff --git a/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md b/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md
|
| index 8a7abc56a84ccd036835109a2e530d043d572ef2..8891f5da6d649b8cd8abe6580c6bd3066d86ffdd 100644
|
| --- a/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md
|
| +++ b/third_party/WebKit/Source/platform/heap/BlinkGCAPIReference.md
|
| @@ -202,10 +202,40 @@ Especially, avoid defining a pre-finalizer in a class that can be allocated a lo
|
|
|
| ### EAGERLY_FINALIZE
|
|
|
| -### DISALLOW_NEW_EXCEPT_PLACEMENT_NEW
|
| +A class-level annotation to indicate that class instances that the GC have determined as unreachable, should be eagerly
|
| +swept and finalized by the garbage collector, before the Blink thread (the mutator) resumes after a garbage
|
| +collection. The C++ destructor runs as part of this step. The default sweeping behavior is incremental, sweeping
|
| +pages as demanded by later heap allocations.
|
| +
|
| +Like for the pre-finalizer mechanism, an `EAGERLY_FINALIZE()`d class is allowed to touch other heap objects, which
|
| +is sometimes required, but the main use case for eager finalization is to promptly let go of off-heap resources
|
| +and associations, by unregistering and destructing those eagerly. If not done, these external references would
|
| +otherwise attempt to unsafely access an effectively-dead object (pending lazy sweeping of its heap page.)
|
| +
|
| +`EAGERLY_FINALIZE()` solves the same problem as pre-finalizers, but it arguably fits more naturally with the host
|
| +language's mechanism for finalization (C++ destructors.) One `EAGERLY_FINALIZE()` caveat is that the destructor
|
| +is not allowed to touch another eagerly finalized object (their finalization ordering isn't deterministic) nor
|
| +any pre-finalized objects. Choose the one you think best fits your need for prompt finalization.
|
|
|
| ### STACK_ALLOCATED
|
|
|
| +Class level annotation that should be used if the object is only stack allocated; it disallows use
|
| +of `operator new`. Any garbage-collected objects should be kept as `Member<T>` references, but you do not
|
| +need to define a `trace()` method as they are on the stack, and automatically traced and kept alive should
|
| +a conservative GC be required.
|
| +
|
| +### DISALLOW_NEW()
|
| +
|
| +Class-level annotation declaring the class a part object that cannot be separately allocated using `operator new`.
|
| +If the class has `Member<T>` references, you need a `trace()` method which the object containing the `DISALLOW_NEW()`
|
| +part object must call upon. The clang Blink GC plugin checks and enforces this.
|
| +
|
| +### DISALLOW_NEW_EXCEPT_PLACEMENT_NEW
|
| +
|
| +Class-level annotation allowing only the use of the placement `new` operator. This disallows general allocation of the
|
| +object but allows putting the object as a value object in collections. If the class has `Member<T>` references,
|
| +you need to declare a `trace()` method. That trace method will be called automatically by the on-heap collections.
|
| +
|
| ## Handles
|
|
|
| Class templates in this section are smart pointers, each carrying a pointer to an on-heap object (think of `RefPtr<T>`
|
|
|