Provide a convenience array buffer allocator
BUG=none R=ulan@chromium.org Review-Url: https://codereview.chromium.org/2101413002 Cr-Commit-Position: refs/heads/master@{#37365}
This commit is contained in:
parent
5c86692a5e
commit
356a85be5d
10
include/v8.h
10
include/v8.h
@ -3487,8 +3487,6 @@ class V8_EXPORT ArrayBuffer : public Object {
|
|||||||
*
|
*
|
||||||
* Note that it is unsafe to call back into V8 from any of the allocator
|
* Note that it is unsafe to call back into V8 from any of the allocator
|
||||||
* functions.
|
* functions.
|
||||||
*
|
|
||||||
* This API is experimental and may change significantly.
|
|
||||||
*/
|
*/
|
||||||
class V8_EXPORT Allocator { // NOLINT
|
class V8_EXPORT Allocator { // NOLINT
|
||||||
public:
|
public:
|
||||||
@ -3505,11 +3503,19 @@ class V8_EXPORT ArrayBuffer : public Object {
|
|||||||
* Memory does not have to be initialized.
|
* Memory does not have to be initialized.
|
||||||
*/
|
*/
|
||||||
virtual void* AllocateUninitialized(size_t length) = 0;
|
virtual void* AllocateUninitialized(size_t length) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free the memory block of size |length|, pointed to by |data|.
|
* Free the memory block of size |length|, pointed to by |data|.
|
||||||
* That memory is guaranteed to be previously allocated by |Allocate|.
|
* That memory is guaranteed to be previously allocated by |Allocate|.
|
||||||
*/
|
*/
|
||||||
virtual void Free(void* data, size_t length) = 0;
|
virtual void Free(void* data, size_t length) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* malloc/free based convenience allocator.
|
||||||
|
*
|
||||||
|
* Caller takes ownership.
|
||||||
|
*/
|
||||||
|
static Allocator* NewDefaultAllocator();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,17 +11,6 @@
|
|||||||
|
|
||||||
using namespace v8;
|
using namespace v8;
|
||||||
|
|
||||||
class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
||||||
public:
|
|
||||||
virtual void* Allocate(size_t length) {
|
|
||||||
void* data = AllocateUninitialized(length);
|
|
||||||
return data == NULL ? data : memset(data, 0, length);
|
|
||||||
}
|
|
||||||
virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
|
|
||||||
virtual void Free(void* data, size_t) { free(data); }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
// Initialize V8.
|
// Initialize V8.
|
||||||
V8::InitializeICUDefaultLocation(argv[0]);
|
V8::InitializeICUDefaultLocation(argv[0]);
|
||||||
@ -31,9 +20,9 @@ int main(int argc, char* argv[]) {
|
|||||||
V8::Initialize();
|
V8::Initialize();
|
||||||
|
|
||||||
// Create a new Isolate and make it the current one.
|
// Create a new Isolate and make it the current one.
|
||||||
ArrayBufferAllocator allocator;
|
|
||||||
Isolate::CreateParams create_params;
|
Isolate::CreateParams create_params;
|
||||||
create_params.array_buffer_allocator = &allocator;
|
create_params.array_buffer_allocator =
|
||||||
|
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
||||||
Isolate* isolate = Isolate::New(create_params);
|
Isolate* isolate = Isolate::New(create_params);
|
||||||
{
|
{
|
||||||
Isolate::Scope isolate_scope(isolate);
|
Isolate::Scope isolate_scope(isolate);
|
||||||
@ -68,5 +57,6 @@ int main(int argc, char* argv[]) {
|
|||||||
V8::Dispose();
|
V8::Dispose();
|
||||||
V8::ShutdownPlatform();
|
V8::ShutdownPlatform();
|
||||||
delete platform;
|
delete platform;
|
||||||
|
delete create_params.array_buffer_allocator;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -38,17 +38,6 @@
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace v8;
|
using namespace v8;
|
||||||
|
|
||||||
class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
||||||
public:
|
|
||||||
virtual void* Allocate(size_t length) {
|
|
||||||
void* data = AllocateUninitialized(length);
|
|
||||||
return data == NULL ? data : memset(data, 0, length);
|
|
||||||
}
|
|
||||||
virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
|
|
||||||
virtual void Free(void* data, size_t) { free(data); }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// These interfaces represent an existing request processing interface.
|
// These interfaces represent an existing request processing interface.
|
||||||
// The idea is to imagine a real application that uses these interfaces
|
// The idea is to imagine a real application that uses these interfaces
|
||||||
// and then add scripting capabilities that allow you to interact with
|
// and then add scripting capabilities that allow you to interact with
|
||||||
@ -699,9 +688,9 @@ int main(int argc, char* argv[]) {
|
|||||||
fprintf(stderr, "No script was specified.\n");
|
fprintf(stderr, "No script was specified.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ArrayBufferAllocator array_buffer_allocator;
|
|
||||||
Isolate::CreateParams create_params;
|
Isolate::CreateParams create_params;
|
||||||
create_params.array_buffer_allocator = &array_buffer_allocator;
|
create_params.array_buffer_allocator =
|
||||||
|
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
||||||
Isolate* isolate = Isolate::New(create_params);
|
Isolate* isolate = Isolate::New(create_params);
|
||||||
Isolate::Scope isolate_scope(isolate);
|
Isolate::Scope isolate_scope(isolate);
|
||||||
HandleScope scope(isolate);
|
HandleScope scope(isolate);
|
||||||
|
@ -63,17 +63,6 @@ void ReportException(v8::Isolate* isolate, v8::TryCatch* handler);
|
|||||||
static bool run_shell;
|
static bool run_shell;
|
||||||
|
|
||||||
|
|
||||||
class ShellArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
||||||
public:
|
|
||||||
virtual void* Allocate(size_t length) {
|
|
||||||
void* data = AllocateUninitialized(length);
|
|
||||||
return data == NULL ? data : memset(data, 0, length);
|
|
||||||
}
|
|
||||||
virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
|
|
||||||
virtual void Free(void* data, size_t) { free(data); }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
v8::V8::InitializeICUDefaultLocation(argv[0]);
|
v8::V8::InitializeICUDefaultLocation(argv[0]);
|
||||||
v8::V8::InitializeExternalStartupData(argv[0]);
|
v8::V8::InitializeExternalStartupData(argv[0]);
|
||||||
@ -81,9 +70,9 @@ int main(int argc, char* argv[]) {
|
|||||||
v8::V8::InitializePlatform(platform);
|
v8::V8::InitializePlatform(platform);
|
||||||
v8::V8::Initialize();
|
v8::V8::Initialize();
|
||||||
v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
|
v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
|
||||||
ShellArrayBufferAllocator array_buffer_allocator;
|
|
||||||
v8::Isolate::CreateParams create_params;
|
v8::Isolate::CreateParams create_params;
|
||||||
create_params.array_buffer_allocator = &array_buffer_allocator;
|
create_params.array_buffer_allocator =
|
||||||
|
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
||||||
v8::Isolate* isolate = v8::Isolate::New(create_params);
|
v8::Isolate* isolate = v8::Isolate::New(create_params);
|
||||||
run_shell = (argc == 1);
|
run_shell = (argc == 1);
|
||||||
int result;
|
int result;
|
||||||
@ -103,6 +92,7 @@ int main(int argc, char* argv[]) {
|
|||||||
v8::V8::Dispose();
|
v8::V8::Dispose();
|
||||||
v8::V8::ShutdownPlatform();
|
v8::V8::ShutdownPlatform();
|
||||||
delete platform;
|
delete platform;
|
||||||
|
delete create_params.array_buffer_allocator;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6749,6 +6749,11 @@ MaybeLocal<Proxy> Proxy::New(Local<Context> context, Local<Object> local_target,
|
|||||||
RETURN_ESCAPED(result);
|
RETURN_ESCAPED(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
v8::ArrayBuffer::Allocator* v8::ArrayBuffer::Allocator::NewDefaultAllocator() {
|
||||||
|
return new ArrayBufferAllocator();
|
||||||
|
}
|
||||||
|
|
||||||
bool v8::ArrayBuffer::IsExternal() const {
|
bool v8::ArrayBuffer::IsExternal() const {
|
||||||
return Utils::OpenHandle(this)->is_external();
|
return Utils::OpenHandle(this)->is_external();
|
||||||
}
|
}
|
||||||
|
@ -93,17 +93,6 @@ class ProgramOptions final {
|
|||||||
std::string test_function_name_;
|
std::string test_function_name_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ArrayBufferAllocator final : public v8::ArrayBuffer::Allocator {
|
|
||||||
public:
|
|
||||||
void* Allocate(size_t length) override {
|
|
||||||
void* data = AllocateUninitialized(length);
|
|
||||||
if (data != nullptr) memset(data, 0, length);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
void* AllocateUninitialized(size_t length) override { return malloc(length); }
|
|
||||||
void Free(void* data, size_t) override { free(data); }
|
|
||||||
};
|
|
||||||
|
|
||||||
class V8InitializationScope final {
|
class V8InitializationScope final {
|
||||||
public:
|
public:
|
||||||
explicit V8InitializationScope(const char* exec_path);
|
explicit V8InitializationScope(const char* exec_path);
|
||||||
@ -114,6 +103,7 @@ class V8InitializationScope final {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
v8::base::SmartPointer<v8::Platform> platform_;
|
v8::base::SmartPointer<v8::Platform> platform_;
|
||||||
|
v8::base::SmartPointer<v8::ArrayBuffer::Allocator> allocator_;
|
||||||
v8::Isolate* isolate_;
|
v8::Isolate* isolate_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(V8InitializationScope);
|
DISALLOW_COPY_AND_ASSIGN(V8InitializationScope);
|
||||||
@ -363,9 +353,9 @@ V8InitializationScope::V8InitializationScope(const char* exec_path)
|
|||||||
v8::V8::InitializePlatform(platform_.get());
|
v8::V8::InitializePlatform(platform_.get());
|
||||||
v8::V8::Initialize();
|
v8::V8::Initialize();
|
||||||
|
|
||||||
ArrayBufferAllocator allocator;
|
|
||||||
v8::Isolate::CreateParams create_params;
|
v8::Isolate::CreateParams create_params;
|
||||||
create_params.array_buffer_allocator = &allocator;
|
allocator_.Reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator());
|
||||||
|
create_params.array_buffer_allocator = allocator_.get();
|
||||||
|
|
||||||
isolate_ = v8::Isolate::New(create_params);
|
isolate_ = v8::Isolate::New(create_params);
|
||||||
}
|
}
|
||||||
|
@ -27,16 +27,6 @@ void DeleteFuzzerSupport() {
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
class FuzzerSupport::ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
||||||
public:
|
|
||||||
virtual void* Allocate(size_t length) {
|
|
||||||
void* data = AllocateUninitialized(length);
|
|
||||||
return data == NULL ? data : memset(data, 0, length);
|
|
||||||
}
|
|
||||||
virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
|
|
||||||
virtual void Free(void* data, size_t) { free(data); }
|
|
||||||
};
|
|
||||||
|
|
||||||
FuzzerSupport::FuzzerSupport(int* argc, char*** argv) {
|
FuzzerSupport::FuzzerSupport(int* argc, char*** argv) {
|
||||||
v8::internal::FLAG_expose_gc = true;
|
v8::internal::FLAG_expose_gc = true;
|
||||||
v8::V8::SetFlagsFromCommandLine(argc, *argv, true);
|
v8::V8::SetFlagsFromCommandLine(argc, *argv, true);
|
||||||
@ -46,7 +36,7 @@ FuzzerSupport::FuzzerSupport(int* argc, char*** argv) {
|
|||||||
v8::V8::InitializePlatform(platform_);
|
v8::V8::InitializePlatform(platform_);
|
||||||
v8::V8::Initialize();
|
v8::V8::Initialize();
|
||||||
|
|
||||||
allocator_ = new ArrayBufferAllocator;
|
allocator_ = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
||||||
v8::Isolate::CreateParams create_params;
|
v8::Isolate::CreateParams create_params;
|
||||||
create_params.array_buffer_allocator = allocator_;
|
create_params.array_buffer_allocator = allocator_;
|
||||||
isolate_ = v8::Isolate::New(create_params);
|
isolate_ = v8::Isolate::New(create_params);
|
||||||
|
@ -24,10 +24,9 @@ class FuzzerSupport {
|
|||||||
FuzzerSupport(const FuzzerSupport&);
|
FuzzerSupport(const FuzzerSupport&);
|
||||||
FuzzerSupport& operator=(const FuzzerSupport&);
|
FuzzerSupport& operator=(const FuzzerSupport&);
|
||||||
|
|
||||||
class ArrayBufferAllocator;
|
|
||||||
|
|
||||||
v8::Platform* platform_;
|
v8::Platform* platform_;
|
||||||
ArrayBufferAllocator* allocator_;
|
v8::ArrayBuffer::Allocator* allocator_;
|
||||||
v8::Isolate* isolate_;
|
v8::Isolate* isolate_;
|
||||||
v8::Global<v8::Context> context_;
|
v8::Global<v8::Context> context_;
|
||||||
};
|
};
|
||||||
|
@ -13,23 +13,11 @@
|
|||||||
|
|
||||||
namespace v8 {
|
namespace v8 {
|
||||||
|
|
||||||
class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
// static
|
||||||
public:
|
v8::ArrayBuffer::Allocator* TestWithIsolate::array_buffer_allocator_ = nullptr;
|
||||||
virtual void* Allocate(size_t length) {
|
|
||||||
void* data = AllocateUninitialized(length);
|
|
||||||
return data == NULL ? data : memset(data, 0, length);
|
|
||||||
}
|
|
||||||
virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
|
|
||||||
virtual void Free(void* data, size_t) { free(data); }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
ArrayBufferAllocator* TestWithIsolate::array_buffer_allocator_ = NULL;
|
Isolate* TestWithIsolate::isolate_ = nullptr;
|
||||||
|
|
||||||
// static
|
|
||||||
Isolate* TestWithIsolate::isolate_ = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
TestWithIsolate::TestWithIsolate()
|
TestWithIsolate::TestWithIsolate()
|
||||||
: isolate_scope_(isolate()), handle_scope_(isolate()) {}
|
: isolate_scope_(isolate()), handle_scope_(isolate()) {}
|
||||||
@ -43,7 +31,7 @@ void TestWithIsolate::SetUpTestCase() {
|
|||||||
Test::SetUpTestCase();
|
Test::SetUpTestCase();
|
||||||
EXPECT_EQ(NULL, isolate_);
|
EXPECT_EQ(NULL, isolate_);
|
||||||
v8::Isolate::CreateParams create_params;
|
v8::Isolate::CreateParams create_params;
|
||||||
array_buffer_allocator_ = new ArrayBufferAllocator;
|
array_buffer_allocator_ = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
||||||
create_params.array_buffer_allocator = array_buffer_allocator_;
|
create_params.array_buffer_allocator = array_buffer_allocator_;
|
||||||
isolate_ = v8::Isolate::New(create_params);
|
isolate_ = v8::Isolate::New(create_params);
|
||||||
EXPECT_TRUE(isolate_ != NULL);
|
EXPECT_TRUE(isolate_ != NULL);
|
||||||
|
@ -27,7 +27,7 @@ class TestWithIsolate : public virtual ::testing::Test {
|
|||||||
static void TearDownTestCase();
|
static void TearDownTestCase();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ArrayBufferAllocator* array_buffer_allocator_;
|
static v8::ArrayBuffer::Allocator* array_buffer_allocator_;
|
||||||
static Isolate* isolate_;
|
static Isolate* isolate_;
|
||||||
Isolate::Scope isolate_scope_;
|
Isolate::Scope isolate_scope_;
|
||||||
HandleScope handle_scope_;
|
HandleScope handle_scope_;
|
||||||
|
@ -45,16 +45,6 @@
|
|||||||
|
|
||||||
using namespace v8::internal;
|
using namespace v8::internal;
|
||||||
|
|
||||||
class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
|
|
||||||
public:
|
|
||||||
virtual void* Allocate(size_t length) {
|
|
||||||
void* data = AllocateUninitialized(length);
|
|
||||||
return data == NULL ? data : memset(data, 0, length);
|
|
||||||
}
|
|
||||||
virtual void* AllocateUninitialized(size_t length) { return malloc(length); }
|
|
||||||
virtual void Free(void* data, size_t) { free(data); }
|
|
||||||
};
|
|
||||||
|
|
||||||
class StringResource8 : public v8::String::ExternalOneByteStringResource {
|
class StringResource8 : public v8::String::ExternalOneByteStringResource {
|
||||||
public:
|
public:
|
||||||
StringResource8(const char* data, int length)
|
StringResource8(const char* data, int length)
|
||||||
@ -168,9 +158,9 @@ int main(int argc, char* argv[]) {
|
|||||||
fnames.push_back(std::string(argv[i]));
|
fnames.push_back(std::string(argv[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ArrayBufferAllocator array_buffer_allocator;
|
|
||||||
v8::Isolate::CreateParams create_params;
|
v8::Isolate::CreateParams create_params;
|
||||||
create_params.array_buffer_allocator = &array_buffer_allocator;
|
create_params.array_buffer_allocator =
|
||||||
|
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
|
||||||
v8::Isolate* isolate = v8::Isolate::New(create_params);
|
v8::Isolate* isolate = v8::Isolate::New(create_params);
|
||||||
{
|
{
|
||||||
v8::Isolate::Scope isolate_scope(isolate);
|
v8::Isolate::Scope isolate_scope(isolate);
|
||||||
@ -199,5 +189,6 @@ int main(int argc, char* argv[]) {
|
|||||||
v8::V8::Dispose();
|
v8::V8::Dispose();
|
||||||
v8::V8::ShutdownPlatform();
|
v8::V8::ShutdownPlatform();
|
||||||
delete platform;
|
delete platform;
|
||||||
|
delete create_params.array_buffer_allocator;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user