From 571f1b55d3f143a3ce12091bfc42528e88dc12b0 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Wed, 29 Jul 2015 12:41:10 +0300 Subject: [PATCH] implement simple array buffer allocator --- src/jni/Android.mk | 2 +- src/jni/SimpleAllocator.cpp | 38 ++++++++++++++++++++++++++++++++++++ src/jni/SimpleAllocator.h | 24 +++++++++++++++++++++++ src/jni/com_tns_Platform.cpp | 4 ++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/jni/SimpleAllocator.cpp create mode 100644 src/jni/SimpleAllocator.h diff --git a/src/jni/Android.mk b/src/jni/Android.mk index e06a0753b..9b9411f27 100644 --- a/src/jni/Android.mk +++ b/src/jni/Android.mk @@ -63,7 +63,7 @@ include $(CLEAR_VARS) LOCAL_CPPFLAGS += -std=c++11 LOCAL_MODULE := NativeScript LOCAL_SRC_FILES := com_tns_Platform.cpp com_tns_JsDebugger.cpp com_tns_AssetExtractor.cpp com_tns_NativeScriptActity.cpp \ - JEnv.cpp DirectBuffer.cpp \ + JEnv.cpp DirectBuffer.cpp SimpleAllocator.cpp \ JsDebugger.cpp \ NativeScriptRuntime.cpp MetadataNode.cpp MetadataTreeNode.cpp MetadataReader.cpp \ MethodCache.cpp JavaObjectArrayCache.cpp \ diff --git a/src/jni/SimpleAllocator.cpp b/src/jni/SimpleAllocator.cpp new file mode 100644 index 000000000..115ded125 --- /dev/null +++ b/src/jni/SimpleAllocator.cpp @@ -0,0 +1,38 @@ +#include "SimpleAllocator.h" +#include + + +using namespace tns; + + +SimpleAllocator::SimpleAllocator() +{ +} + + + +SimpleAllocator::~SimpleAllocator() +{ +} + +void* SimpleAllocator::Allocate(size_t length) +{ + void *data = calloc(length, 1); + return data; +} + +void* SimpleAllocator::AllocateUninitialized(size_t length) +{ + void *data = malloc(length); + return data; + +} + +void SimpleAllocator::Free(void* data, size_t length) +{ + free(data); +} + + + + diff --git a/src/jni/SimpleAllocator.h b/src/jni/SimpleAllocator.h new file mode 100644 index 000000000..88cd3e5e8 --- /dev/null +++ b/src/jni/SimpleAllocator.h @@ -0,0 +1,24 @@ +#ifndef SIMPLEALLOCATOR_H_ +#define SIMPLEALLOCATOR_H_ + +#include "v8.h" + +namespace tns +{ + class SimpleAllocator : public v8::ArrayBuffer::Allocator + { + public: + SimpleAllocator(); + + ~SimpleAllocator() override; + + void* Allocate(size_t length) override; + + void* AllocateUninitialized(size_t length) override; + + void Free(void* data, size_t length) override; + }; +} + + +#endif /* SIMPLEALLOCATOR_H_ */ diff --git a/src/jni/com_tns_Platform.cpp b/src/jni/com_tns_Platform.cpp index d10d128d6..277a2db8a 100644 --- a/src/jni/com_tns_Platform.cpp +++ b/src/jni/com_tns_Platform.cpp @@ -18,6 +18,7 @@ #include "NativeScriptAssert.h" #include "JsDebugger.h" #include "SimpleProfiler.h" +#include "SimpleAllocator.h" #include "File.h" #include #include @@ -39,6 +40,8 @@ Context::Scope *context_scope = nullptr; bool tns::LogEnabled = true; Isolate *g_isolate = nullptr; std::string Constants::APP_ROOT_FOLDER_PATH = ""; +SimpleAllocator g_allocator; + ObjectManager *g_objectManager = nullptr; @@ -165,6 +168,7 @@ extern "C" void Java_com_tns_Platform_initNativeScript(JNIEnv *_env, jobject obj Platform* platform = v8::platform::CreateDefaultPlatform(); V8::InitializePlatform(platform); V8::Initialize(); + V8::SetArrayBufferAllocator(&g_allocator); g_isolate = Isolate::New(); auto isolate = g_isolate;