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

Side by Side Diff: include/v8.h

Issue 1950963002: Introduce a new phantom weakness type without finalization callback. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: comment Created 4 years, 7 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
« no previous file with comments | « no previous file | src/api.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project 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 /** \mainpage V8 API Reference Guide 5 /** \mainpage V8 API Reference Guide
6 * 6 *
7 * V8 is Google's open source JavaScript engine. 7 * V8 is Google's open source JavaScript engine.
8 * 8 *
9 * This set of documents provides reference material generated from the 9 * This set of documents provides reference material generated from the
10 * V8 header file, include/v8.h. 10 * V8 header file, include/v8.h.
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 * NOTE: There is no guarantee as to *when* or even *if* the callback is 538 * NOTE: There is no guarantee as to *when* or even *if* the callback is
539 * invoked. The invocation is performed solely on a best effort basis. 539 * invoked. The invocation is performed solely on a best effort basis.
540 * As always, GC-based finalization should *not* be relied upon for any 540 * As always, GC-based finalization should *not* be relied upon for any
541 * critical form of resource management! 541 * critical form of resource management!
542 */ 542 */
543 template <typename P> 543 template <typename P>
544 V8_INLINE void SetWeak(P* parameter, 544 V8_INLINE void SetWeak(P* parameter,
545 typename WeakCallbackInfo<P>::Callback callback, 545 typename WeakCallbackInfo<P>::Callback callback,
546 WeakCallbackType type); 546 WeakCallbackType type);
547 547
548 /**
549 * Turns this handle into a weak phantom handle without finalization callback.
550 * The handle will be reset automatically when the garbage collector detects
551 * that the object is no longer reachable.
552 * A related function Isolate::NumberOfPhantomHandleResetsSinceLastCall
553 * returns how many phantom handles were reset by the garbage collector.
554 */
555 V8_INLINE void SetWeak();
556
548 template<typename P> 557 template<typename P>
549 V8_INLINE P* ClearWeak(); 558 V8_INLINE P* ClearWeak();
550 559
551 // TODO(dcarney): remove this. 560 // TODO(dcarney): remove this.
552 V8_INLINE void ClearWeak() { ClearWeak<void>(); } 561 V8_INLINE void ClearWeak() { ClearWeak<void>(); }
553 562
554 /** 563 /**
555 * Allows the embedder to tell the v8 garbage collector that a certain object 564 * Allows the embedder to tell the v8 garbage collector that a certain object
556 * is alive. Only allowed when the embedder is asked to trace its heap by 565 * is alive. Only allowed when the embedder is asked to trace its heap by
557 * EmbedderHeapTracer. 566 * EmbedderHeapTracer.
(...skipping 5219 matching lines...) Expand 10 before | Expand all | Expand 10 after
5777 * allocated memory alive. 5786 * allocated memory alive.
5778 * 5787 *
5779 * \param change_in_bytes the change in externally allocated memory that is 5788 * \param change_in_bytes the change in externally allocated memory that is
5780 * kept alive by JavaScript objects. 5789 * kept alive by JavaScript objects.
5781 * \returns the adjusted value. 5790 * \returns the adjusted value.
5782 */ 5791 */
5783 V8_INLINE int64_t 5792 V8_INLINE int64_t
5784 AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes); 5793 AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes);
5785 5794
5786 /** 5795 /**
5796 * Returns the number of phantom handles without callbacks that were reset
5797 * by the garbage collector since the last call to this function.
5798 */
5799 size_t NumberOfPhantomHandleResetsSinceLastCall();
5800
5801 /**
5787 * Returns heap profiler for this isolate. Will return NULL until the isolate 5802 * Returns heap profiler for this isolate. Will return NULL until the isolate
5788 * is initialized. 5803 * is initialized.
5789 */ 5804 */
5790 HeapProfiler* GetHeapProfiler(); 5805 HeapProfiler* GetHeapProfiler();
5791 5806
5792 /** 5807 /**
5793 * Returns CPU profiler for this isolate. Will return NULL unless the isolate 5808 * Returns CPU profiler for this isolate. Will return NULL unless the isolate
5794 * is initialized. It is the embedder's responsibility to stop all CPU 5809 * is initialized. It is the embedder's responsibility to stop all CPU
5795 * profiling activities if it has started any. 5810 * profiling activities if it has started any.
5796 */ 5811 */
(...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after
6621 */ 6636 */
6622 static void ShutdownPlatform(); 6637 static void ShutdownPlatform();
6623 6638
6624 private: 6639 private:
6625 V8(); 6640 V8();
6626 6641
6627 static internal::Object** GlobalizeReference(internal::Isolate* isolate, 6642 static internal::Object** GlobalizeReference(internal::Isolate* isolate,
6628 internal::Object** handle); 6643 internal::Object** handle);
6629 static internal::Object** CopyPersistent(internal::Object** handle); 6644 static internal::Object** CopyPersistent(internal::Object** handle);
6630 static void DisposeGlobal(internal::Object** global_handle); 6645 static void DisposeGlobal(internal::Object** global_handle);
6631 static void MakeWeak(internal::Object** global_handle, void* data, 6646 static void MakeWeak(internal::Object** location, void* data,
6632 WeakCallbackInfo<void>::Callback weak_callback, 6647 WeakCallbackInfo<void>::Callback weak_callback,
6633 WeakCallbackType type); 6648 WeakCallbackType type);
6634 static void MakeWeak(internal::Object** global_handle, void* data, 6649 static void MakeWeak(internal::Object** location, void* data,
6635 // Must be 0 or -1. 6650 // Must be 0 or -1.
6636 int internal_field_index1, 6651 int internal_field_index1,
6637 // Must be 1 or -1. 6652 // Must be 1 or -1.
6638 int internal_field_index2, 6653 int internal_field_index2,
6639 WeakCallbackInfo<void>::Callback weak_callback); 6654 WeakCallbackInfo<void>::Callback weak_callback);
6640 static void* ClearWeak(internal::Object** global_handle); 6655 static void MakeWeak(internal::Object*** location_addr);
6656 static void* ClearWeak(internal::Object** location);
6641 static void Eternalize(Isolate* isolate, 6657 static void Eternalize(Isolate* isolate,
6642 Value* handle, 6658 Value* handle,
6643 int* index); 6659 int* index);
6644 static Local<Value> GetEternal(Isolate* isolate, int index); 6660 static Local<Value> GetEternal(Isolate* isolate, int index);
6645 6661
6646 static void RegisterExternallyReferencedObject(internal::Object** object, 6662 static void RegisterExternallyReferencedObject(internal::Object** object,
6647 internal::Isolate* isolate); 6663 internal::Isolate* isolate);
6648 template <class K, class V, class T> 6664 template <class K, class V, class T>
6649 friend class PersistentValueMapBase; 6665 friend class PersistentValueMapBase;
6650 6666
(...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after
7602 template <class T> 7618 template <class T>
7603 template <typename P> 7619 template <typename P>
7604 V8_INLINE void PersistentBase<T>::SetWeak( 7620 V8_INLINE void PersistentBase<T>::SetWeak(
7605 P* parameter, typename WeakCallbackInfo<P>::Callback callback, 7621 P* parameter, typename WeakCallbackInfo<P>::Callback callback,
7606 WeakCallbackType type) { 7622 WeakCallbackType type) {
7607 typedef typename WeakCallbackInfo<void>::Callback Callback; 7623 typedef typename WeakCallbackInfo<void>::Callback Callback;
7608 V8::MakeWeak(reinterpret_cast<internal::Object**>(this->val_), parameter, 7624 V8::MakeWeak(reinterpret_cast<internal::Object**>(this->val_), parameter,
7609 reinterpret_cast<Callback>(callback), type); 7625 reinterpret_cast<Callback>(callback), type);
7610 } 7626 }
7611 7627
7628 template <class T>
7629 void PersistentBase<T>::SetWeak() {
7630 V8::MakeWeak(reinterpret_cast<internal::Object***>(&this->val_));
7631 }
7612 7632
7613 template <class T> 7633 template <class T>
7614 template <typename P> 7634 template <typename P>
7615 P* PersistentBase<T>::ClearWeak() { 7635 P* PersistentBase<T>::ClearWeak() {
7616 return reinterpret_cast<P*>( 7636 return reinterpret_cast<P*>(
7617 V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_))); 7637 V8::ClearWeak(reinterpret_cast<internal::Object**>(this->val_)));
7618 } 7638 }
7619 7639
7620 template <class T> 7640 template <class T>
7621 void PersistentBase<T>::RegisterExternalReference(Isolate* isolate) const { 7641 void PersistentBase<T>::RegisterExternalReference(Isolate* isolate) const {
(...skipping 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after
8705 */ 8725 */
8706 8726
8707 8727
8708 } // namespace v8 8728 } // namespace v8
8709 8729
8710 8730
8711 #undef TYPE_CHECK 8731 #undef TYPE_CHECK
8712 8732
8713 8733
8714 #endif // INCLUDE_V8_H_ 8734 #endif // INCLUDE_V8_H_
OLDNEW
« no previous file with comments | « no previous file | src/api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698