From 6210d2612ebf690800e8bf59b41218da784acba8 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 14 May 2021 11:37:46 +0200 Subject: [PATCH] Profiler: Avoid JsonArray copying during perfcore parsing Use JsonObject::get_ptr() to access array values without copying them. --- Userland/DevTools/Profiler/Profile.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Userland/DevTools/Profiler/Profile.cpp b/Userland/DevTools/Profiler/Profile.cpp index b422531869..c525d7972b 100644 --- a/Userland/DevTools/Profiler/Profile.cpp +++ b/Userland/DevTools/Profiler/Profile.cpp @@ -212,11 +212,11 @@ Result, String> Profile::load_from_perfcore_file(const St if (!file_or_error.is_error()) kernel_elf = make(file_or_error.value()->bytes()); - auto events_value = object.get("events"); - if (!events_value.is_array()) + auto events_value = object.get_ptr("events"); + if (!events_value || !events_value->is_array()) return String { "Malformed profile (events is not an array)" }; - auto& perf_events = events_value.as_array(); + auto& perf_events = events_value->as_array(); NonnullOwnPtrVector all_processes; HashMap current_processes; @@ -299,7 +299,9 @@ Result, String> Profile::load_from_perfcore_file(const St continue; } - auto stack_array = perf_event.get("stack").as_array(); + auto* stack = perf_event.get_ptr("stack"); + VERIFY(stack); + auto& stack_array = stack->as_array(); for (ssize_t i = stack_array.values().size() - 1; i >= 0; --i) { auto& frame = stack_array.at(i); auto ptr = frame.to_number();