summaryrefslogtreecommitdiff
path: root/src/node_buffer.cc
diff options
context:
space:
mode:
authorKarl Skomski <karl@skomski.com>2015-09-09 18:35:04 +0200
committerTrevor Norris <trev.norris@gmail.com>2015-09-15 15:50:25 -0600
commite7a3ca3d313c0fd18795102df19d3ea9154d3cd3 (patch)
tree340a2cd407b1fb843bebaa8d2e82f3b2a9c90ec1 /src/node_buffer.cc
parent7d927ab506800428e4fbfc118b0efd414183487e (diff)
downloadandroid-node-v8-e7a3ca3d313c0fd18795102df19d3ea9154d3cd3.tar.gz
android-node-v8-e7a3ca3d313c0fd18795102df19d3ea9154d3cd3.tar.bz2
android-node-v8-e7a3ca3d313c0fd18795102df19d3ea9154d3cd3.zip
src: use subarray() in Buffer#slice() for speedup
Use the built-in Typed Array method subarray() to improve performance of Buffer#slice(). Benchmark improvements: benchmark/buffer-slice: 40% benchmark/buffer-creation (pool): 25% Additional tests also added. PR-URL: https://github.com/nodejs/node/pull/2777 Reviewed-By: Trevor Norris <trev.norris@gmail.com> Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>
Diffstat (limited to 'src/node_buffer.cc')
-rw-r--r--src/node_buffer.cc24
1 files changed, 0 insertions, 24 deletions
diff --git a/src/node_buffer.cc b/src/node_buffer.cc
index 878c6c5e00..dc0c742e3b 100644
--- a/src/node_buffer.cc
+++ b/src/node_buffer.cc
@@ -456,29 +456,6 @@ void CreateFromArrayBuffer(const FunctionCallbackInfo<Value>& args) {
}
-void Slice(const FunctionCallbackInfo<Value>& args) {
- CHECK(args[0]->IsUint8Array());
- CHECK(args[1]->IsNumber());
- CHECK(args[2]->IsNumber());
- Environment* env = Environment::GetCurrent(args);
- Local<Uint8Array> ab_ui = args[0].As<Uint8Array>();
- Local<ArrayBuffer> ab = ab_ui->Buffer();
- ArrayBuffer::Contents ab_c = ab->GetContents();
- size_t offset = ab_ui->ByteOffset();
- size_t start = args[1]->NumberValue() + offset;
- size_t end = args[2]->NumberValue() + offset;
- CHECK_GE(end, start);
- size_t size = end - start;
- CHECK_GE(ab_c.ByteLength(), start + size);
- Local<Uint8Array> ui = Uint8Array::New(ab, start, size);
- Maybe<bool> mb =
- ui->SetPrototype(env->context(), env->buffer_prototype_object());
- if (!mb.FromMaybe(false))
- return env->ThrowError("Unable to set Object prototype");
- args.GetReturnValue().Set(ui);
-}
-
-
template <encoding encoding>
void StringSlice(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);
@@ -1002,7 +979,6 @@ void Initialize(Local<Object> target,
env->SetMethod(target, "createFromString", CreateFromString);
env->SetMethod(target, "createFromArrayBuffer", CreateFromArrayBuffer);
- env->SetMethod(target, "slice", Slice);
env->SetMethod(target, "byteLengthUtf8", ByteLengthUtf8);
env->SetMethod(target, "compare", Compare);
env->SetMethod(target, "fill", Fill);