| Index: include/v8.h
|
| diff --git a/include/v8.h b/include/v8.h
|
| index e99c6d9a98035d9b6abe7d26705c7ae1b02a280e..f3e753e690dd8457b9919e933d38c2e7afd8be8c 100644
|
| --- a/include/v8.h
|
| +++ b/include/v8.h
|
| @@ -2370,30 +2370,6 @@ class V8EXPORT Function : public Object {
|
| static void CheckCast(Value* obj);
|
| };
|
|
|
| -/**
|
| - * The contents of an |ArrayBuffer|. Externalization of |ArrayBuffer|
|
| - * populates an instance of this class with a pointer to data and byte length.
|
| - *
|
| - * |ArrayBufferContents| is the owner of its data. When an instance of
|
| - * this class is destructed, the |Data| is freed.
|
| - *
|
| - * This API is experimental and may change significantly.
|
| - */
|
| -class V8EXPORT ArrayBufferContents {
|
| - public:
|
| - ArrayBufferContents() : data_(NULL), byte_length_(0) {}
|
| - ~ArrayBufferContents();
|
| -
|
| - void* Data() const { return data_; }
|
| - size_t ByteLength() const { return byte_length_; }
|
| -
|
| - private:
|
| - void* data_;
|
| - size_t byte_length_;
|
| -
|
| - friend class ArrayBuffer;
|
| -};
|
| -
|
| #ifndef V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT
|
| #define V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT 2
|
| #endif
|
| @@ -2405,6 +2381,53 @@ class V8EXPORT ArrayBufferContents {
|
| class V8EXPORT ArrayBuffer : public Object {
|
| public:
|
| /**
|
| + * Allocator that V8 uses to allocate |ArrayBuffer|'s memory.
|
| + * The allocator is a global V8 setting. It should be set with
|
| + * V8::SetArrayBufferAllocator prior to creation of a first ArrayBuffer.
|
| + *
|
| + * This API is experimental and may change significantly.
|
| + */
|
| + class V8EXPORT Allocator { // NOLINT
|
| + public:
|
| + virtual ~Allocator() {}
|
| +
|
| + /**
|
| + * Allocate |length| bytes. Return NULL if allocation is not successful.
|
| + */
|
| + virtual void* Allocate(size_t length) = 0;
|
| + /**
|
| + * Free the memory pointed to |data|. That memory is guaranteed to be
|
| + * previously allocated by |Allocate|.
|
| + */
|
| + virtual void Free(void* data) = 0;
|
| + };
|
| +
|
| + /**
|
| + * The contents of an |ArrayBuffer|. Externalization of |ArrayBuffer|
|
| + * returns an instance of this class, populated, with a pointer to data
|
| + * and byte length.
|
| + *
|
| + * The Data pointer of ArrayBuffer::Contents is always allocated with
|
| + * Allocator::Allocate that is set with V8::SetArrayBufferAllocator.
|
| + *
|
| + * This API is experimental and may change significantly.
|
| + */
|
| + class V8EXPORT Contents { // NOLINT
|
| + public:
|
| + Contents() : data_(NULL), byte_length_(0) {}
|
| +
|
| + void* Data() const { return data_; }
|
| + size_t ByteLength() const { return byte_length_; }
|
| +
|
| + private:
|
| + void* data_;
|
| + size_t byte_length_;
|
| +
|
| + friend class ArrayBuffer;
|
| + };
|
| +
|
| +
|
| + /**
|
| * Data length in bytes.
|
| */
|
| size_t ByteLength() const;
|
| @@ -2440,14 +2463,18 @@ class V8EXPORT ArrayBuffer : public Object {
|
| void Neuter();
|
|
|
| /**
|
| - * Pass the ownership of this ArrayBuffer's backing store to
|
| - * a given ArrayBufferContents.
|
| + * Make this ArrayBuffer external. The pointer to underlying memory block
|
| + * and byte length are returned as |Contents| structure. After ArrayBuffer
|
| + * had been etxrenalized, it does no longer owns the memory block. The caller
|
| + * should take steps to free memory when it is no longer needed.
|
| + *
|
| + * The memory block is guaranteed to be allocated with |Allocator::Allocate|
|
| + * that has been set with V8::SetArrayBufferAllocator.
|
| */
|
| - void Externalize(ArrayBufferContents* contents);
|
| + Contents Externalize();
|
|
|
| V8_INLINE(static ArrayBuffer* Cast(Value* obj));
|
|
|
| -
|
| static const int kInternalFieldCount = V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT;
|
|
|
| private:
|
| @@ -4193,6 +4220,14 @@ class V8EXPORT V8 {
|
| AllowCodeGenerationFromStringsCallback that);
|
|
|
| /**
|
| + * Set allocator to use for ArrayBuffer memory.
|
| + * The allocator should be set only once. The allocator should be set
|
| + * before any code tha uses ArrayBuffers is executed.
|
| + * This allocator is used in all isolates.
|
| + */
|
| + static void SetArrayBufferAllocator(ArrayBuffer::Allocator* allocator);
|
| +
|
| + /**
|
| * Ignore out-of-memory exceptions.
|
| *
|
| * V8 running out of memory is treated as a fatal error by default.
|
|
|