improve memory allocations (#889)
* improve memory allocations * Update src/main.zig Co-authored-by: erikarvstedt <36110478+erikarvstedt@users.noreply.github.com> * add missing 0x21 Co-authored-by: erikarvstedt <36110478+erikarvstedt@users.noreply.github.com>
This commit is contained in:
parent
21b103c158
commit
4423a5face
@ -1334,7 +1334,7 @@ fn completeFieldAccess(server: *Server, handle: *const DocumentStore.Handle, sou
|
||||
return try completions.toOwnedSlice(allocator);
|
||||
}
|
||||
|
||||
fn formatDetailledLabel(item: *types.CompletionItem, alloc: std.mem.Allocator) error{OutOfMemory}!void {
|
||||
fn formatDetailledLabel(item: *types.CompletionItem, arena: std.mem.Allocator) error{OutOfMemory}!void {
|
||||
// NOTE: this is not ideal, we should build a detailled label like we do for label/detail
|
||||
// because this implementation is very loose, nothing is formated properly so we need to clean
|
||||
// things a little bit, wich is quite messy
|
||||
@ -1345,7 +1345,7 @@ fn formatDetailledLabel(item: *types.CompletionItem, alloc: std.mem.Allocator) e
|
||||
return;
|
||||
|
||||
var detailLen: usize = item.detail.?.len;
|
||||
var it: []u8 = try alloc.alloc(u8, detailLen);
|
||||
var it: []u8 = try arena.alloc(u8, detailLen);
|
||||
|
||||
detailLen -= std.mem.replace(u8, item.detail.?, " ", " ", it) * 3;
|
||||
it = it[0..detailLen];
|
||||
@ -1695,7 +1695,7 @@ fn initializeHandler(server: *Server, request: types.InitializeParams) Error!typ
|
||||
// so we can now format the prebuilt builtins items for labelDetails
|
||||
if (server.client_capabilities.label_details_support) {
|
||||
for (server.builtin_completions.items) |*item| {
|
||||
try formatDetailledLabel(item, std.heap.page_allocator);
|
||||
try formatDetailledLabel(item, server.arena.allocator());
|
||||
}
|
||||
}
|
||||
|
||||
|
15
src/main.zig
15
src/main.zig
@ -48,9 +48,18 @@ fn loop(
|
||||
var buffered_writer = std.io.bufferedWriter(std_out);
|
||||
const writer = buffered_writer.writer();
|
||||
|
||||
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
||||
defer arena.deinit();
|
||||
|
||||
while (true) {
|
||||
var arena = std.heap.ArenaAllocator.init(server.allocator);
|
||||
defer arena.deinit();
|
||||
defer {
|
||||
// Mom, can we have garbage collection?
|
||||
// No, we already have garbage collection at home.
|
||||
// at home:
|
||||
if (arena.queryCapacity() > 128 * 1024) {
|
||||
_ = arena.reset(.free_all);
|
||||
}
|
||||
}
|
||||
|
||||
// write server -> client messages
|
||||
for (server.outgoing_messages.items) |outgoing_message| {
|
||||
@ -340,7 +349,7 @@ const stack_frames = switch (zig_builtin.mode) {
|
||||
|
||||
pub fn main() !void {
|
||||
var gpa_state = std.heap.GeneralPurposeAllocator(.{ .stack_trace_frames = stack_frames }){};
|
||||
defer _ = gpa_state.deinit();
|
||||
defer std.debug.assert(!gpa_state.deinit());
|
||||
|
||||
var tracy_state = if (tracy.enable_allocation) tracy.tracyAllocator(gpa_state.allocator()) else void{};
|
||||
const inner_allocator: std.mem.Allocator = if (tracy.enable_allocation) tracy_state.allocator() else gpa_state.allocator();
|
||||
|
Loading…
Reference in New Issue
Block a user