From b8bc0c3daea80ed936a5b1feed9badd9f767d8cb Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Wed, 18 Aug 2021 22:56:43 +0200 Subject: [PATCH] Add basic memory use widget --- gdb-port/gui.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gdb-port/gui.py b/gdb-port/gui.py index 22944e3..07b915a 100644 --- a/gdb-port/gui.py +++ b/gdb-port/gui.py @@ -17,10 +17,13 @@ class PresentationLayer(): self.backtrace = None + self.top_parser_mem_use = None + def set_top_parser(self,parser): self.top_parser = parser self.top_parser_name.set(self.top_parser.name) self.top_parser_address.set(hex(self.top_parser.address)) + self.top_parser_mem_use.set(self.extract_top_parser_mem_use(self.top_parser)) def set_input_chunk(self, input_chunk): self.input_chunk.set(input_chunk) @@ -31,7 +34,15 @@ class PresentationLayer(): def set_backtrace(self, backtrace): self.backtrace.set(backtrace) + # Helper for set_top_parser + def extract_top_parser_mem_use(self, parser): + # Join key-value pairs into a string, and put them in a list + mem_use_list = [": ".join((hex(k), str(v))) for k,v in parser.bytes_used.items()] + # Return the list as string joined by newlines + return "\n".join(mem_use_list) + # TODO: this is a bad reimplementation of hammer-parser-backtrace + # TODO: can be moved to set_backtrace def parser_stack_to_backtrace_string(self, parser_stack): string_stack = [str(p) for p in parser_stack.p_stack[-1:-10:-1]] @@ -65,6 +76,9 @@ class PresentationLayer(): self.backtrace = StringVar() self.backtrace.set(self.parser_stack_to_backtrace_string(top_level_parse.peek_parserstack())) + self.top_parser_mem_use = StringVar() + self.top_parser_mem_use.set(self.extract_top_parser_mem_use(self.top_parser)) + #"Current parser" widgets ttk.Label(self.frame, text="Current parser", anchor='w').grid(column=1, row=1) ttk.Label(self.frame, textvariable=self.top_parser_name, anchor='w').grid(column=1, row=2) @@ -84,6 +98,9 @@ class PresentationLayer(): ttk.Label(self.frame, textvariable=self.backtrace).grid(column=2, row=6) #ttk.Label(self.frame, text="[Placeholder, Placeholder, Placeholder]").grid(column=2, row=6) + ttk.Label(self.frame, text="Memory use (Arena: bytes)").grid(column=3, row=1) + ttk.Label(self.frame, textvariable=self.top_parser_mem_use).grid(column=3, row=2) + ttk.Button(self.frame, text="Step", command=step).grid(column=1, row=4) def mainloop(self): -- GitLab