From 83d8af06b8750e8e7c14af1c6bedfec67372c4dd Mon Sep 17 00:00:00 2001 From: Caleb Hearon Date: Sat, 22 Apr 2023 14:58:11 -0400 Subject: [PATCH] optimize fillStyle to be 10% faster this is possibly a hot path, and avoiding the C++ string helps a little bit --- src/CanvasRenderingContext2d.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/CanvasRenderingContext2d.cc b/src/CanvasRenderingContext2d.cc index a9e6ce3d7..427bc104a 100644 --- a/src/CanvasRenderingContext2d.cc +++ b/src/CanvasRenderingContext2d.cc @@ -2097,8 +2097,11 @@ Context2d::_setFillColor(Napi::Value arg) { short ok; if (stringValue.IsJust()) { - std::string str = stringValue.Unwrap().Utf8Value(); - uint32_t rgba = rgba_from_string(str.c_str(), &ok); + Napi::String str = stringValue.Unwrap(); + char buf[128] = {0}; + napi_status status = napi_get_value_string_utf8(env, str, buf, sizeof(buf) - 1, nullptr); + if (status != napi_ok) return; + uint32_t rgba = rgba_from_string(buf, &ok); if (!ok) return; state->fillPattern = state->fillGradient = NULL; state->fill = rgba_create(rgba);