From b3c23ca03e297dbb027012a2fd54f90bbfe7f3b8 Mon Sep 17 00:00:00 2001 From: Thomas Farstrike Date: Fri, 7 Nov 2025 14:37:49 +0100 Subject: [PATCH] Remove benchmark app It was just a quick proof-of-concept. QuasiBird is better. --- .../META-INF/MANIFEST.JSON | 24 --- .../assets/benchmark.py | 144 ------------------ .../assets/benchmark_v1.py | 128 ---------------- .../res/mipmap-mdpi/icon_64x64.png | Bin 6187 -> 0 bytes 4 files changed, 296 deletions(-) delete mode 100644 internal_filesystem/apps/com.micropythonos.benchmark/META-INF/MANIFEST.JSON delete mode 100644 internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark.py delete mode 100644 internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark_v1.py delete mode 100644 internal_filesystem/apps/com.micropythonos.benchmark/res/mipmap-mdpi/icon_64x64.png diff --git a/internal_filesystem/apps/com.micropythonos.benchmark/META-INF/MANIFEST.JSON b/internal_filesystem/apps/com.micropythonos.benchmark/META-INF/MANIFEST.JSON deleted file mode 100644 index c3928488..00000000 --- a/internal_filesystem/apps/com.micropythonos.benchmark/META-INF/MANIFEST.JSON +++ /dev/null @@ -1,24 +0,0 @@ -{ -"name": "Benchmark", -"publisher": "MicroPythonOS", -"short_description": "Benchmark MicroPythonOS", -"long_description": "Different benchmarks to measure the speed of MicroPythonOS.", -"icon_url": "https://apps.micropythonos.com/apps/com.micropythonos.benchmark/icons/com.micropythonos.benchmark_0.0.1_64x64.png", -"download_url": "https://apps.micropythonos.com/apps/com.micropythonos.benchmark/mpks/com.micropythonos.benchmark_0.0.1.mpk", -"fullname": "com.micropythonos.benchmark", -"version": "0.0.1", -"category": "benchmark", -"activities": [ - { - "entrypoint": "assets/benchmark.py", - "classname": "Benchmark", - "intent_filters": [ - { - "action": "main", - "category": "launcher" - } - ] - } - ] -} - diff --git a/internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark.py b/internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark.py deleted file mode 100644 index b6e2d7dd..00000000 --- a/internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark.py +++ /dev/null @@ -1,144 +0,0 @@ -import time -import _thread - -from mpos.apps import Activity -import mpos.ui - -class Benchmark(Activity): - - fps_buffer = [0] # Buffer to store FPS - bird_x = 100 - bird_y = 0 - image_w = 296 - image_h = 240 - image_target_w = 160 - image_target_h = 120 - image_x = image_w - image_y = 0 - - #lvgl_w = 160 - #lvgl_h = 120 - - # Widgets: - canvas = None - image = None - - def onCreate(self): - screen = lv.obj() - # Make the screen focusable so it can be scrolled with the arrow keys - focusgroup = lv.group_get_default() - if focusgroup: - focusgroup.add_obj(screen) - screen.add_event_cb(self.key_cb, lv.EVENT.KEY, None) - self.image = lv.image(screen) - self.load_image("data/images/screenshots/snapshot_296x240_RGB565.raw") - scale_factor_w = round(self.image_target_w * 256 / self.image_w) - self.image.set_scale(scale_factor_w) - self.spinner = lv.spinner(screen) - self.spinner.set_size(16, 16) - self.setContentView(screen) - - def onResume(self, screen): - lv.log_register_print_cb(self.log_callback) - mpos.ui.th.add_event_cb(self.update_frame, 1) - - def onPause(self, screen): - mpos.ui.th.remove_event_cb(self.update_frame) - lv.log_register_print_cb(None) - - def key_cb(self, event): - key = event.get_key() - #print(f"got key {key}") - - if key == lv.KEY.UP: - self.image_target_w += 20 - scale_factor_w = round(self.image_target_w * 256 / self.image_w) - self.image.set_scale(scale_factor_w) - elif key == lv.KEY.DOWN: - self.image_target_w -= 20 - scale_factor_w = round(self.image_target_w * 256 / self.image_w) - self.image.set_scale(scale_factor_w) - elif key == lv.KEY.LEFT: - self.bird_x -= 10 - elif key == lv.KEY.RIGHT: - self.bird_x += 10 - elif key == lv.KEY.ENTER: - self.bird_y -= 25 - - def extract_dimensions_and_format(self, filename): - # Split the filename by '_' - parts = filename.split('_') - # Get the color format (last part before '.raw') - color_format = parts[-1].split('.')[0] # e.g., "RGB565" - # Get the resolution (second-to-last part) - resolution = parts[-2] # e.g., "240x240" - # Split resolution by 'x' to get width and height - width, height = map(int, resolution.split('x')) - return width, height, color_format.upper() - - def load_image(self, name): - if not name.lower().endswith(".raw"): - self.image.remove_flag(lv.obj.FLAG.HIDDEN) - self.image.set_src(f"M:{name}") - else: - f = open(name, 'rb') - image_data = f.read() - print(f"loaded {len(image_data)} bytes from .raw file") - f.close() - try: - width, height, color_format = self.extract_dimensions_and_format(name) - except ValueError as e: - print(f"Warning: could not extract dimensions and format from raw image: {e}") - return - print(f"Raw image has width: {width}, Height: {height}, Color Format: {color_format}") - stride = width * 2 - cf = lv.COLOR_FORMAT.RGB565 - if color_format != "RGB565": - print(f"WARNING: unknown color format {color_format}, assuming RGB565...") - self.current_image_dsc = lv.image_dsc_t({ - "header": { - "magic": lv.IMAGE_HEADER_MAGIC, - "w": width, - "h": height, - "stride": stride, - "cf": cf - }, - 'data_size': len(image_data), - 'data': image_data - }) - self.image.set_src(self.current_image_dsc) - - def touch_cb(self, event): - event_code=event.get_code() - #print(f"lv_event_t: code={event_code}") - if event_code == lv.EVENT.PRESSING: - self.runall() - - # Custom log callback to capture FPS - def log_callback(self,level, log_str): - # Convert log_str to string if it's a bytes object - log_str = log_str.decode() if isinstance(log_str, bytes) else log_str - # Optional: Print for debugging - #print(f"Level: {level}, Log: {log_str}") - # Log message format: "sysmon: 25 FPS (refr_cnt: 8 | redraw_cnt: 1), ..." - if "sysmon:" in log_str and "FPS" in log_str: - try: - # Extract FPS value (e.g., "25" from "sysmon: 25 FPS ...") - fps_part = log_str.split("FPS")[0].split("sysmon:")[1].strip() - fps = int(fps_part) - print("Current FPS:", fps) - self.fps_buffer[0] = fps - except (IndexError, ValueError): - pass - - - def update_frame(self, a, b): - self.spinner.set_pos(self.bird_x, self.bird_y) - self.image.set_x(self.image_x) - self.image_x -= 1 - if self.image_x < (-self.image_target_w*2): - self.image_x = self.image_w - self.bird_y += 1 - if self.bird_y > self.image_h: - self.bird_y = 0 - diff --git a/internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark_v1.py b/internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark_v1.py deleted file mode 100644 index 46c2dfe0..00000000 --- a/internal_filesystem/apps/com.micropythonos.benchmark/assets/benchmark_v1.py +++ /dev/null @@ -1,128 +0,0 @@ -import time -import _thread - -from mpos.apps import Activity -import mpos.ui - -indev_error_x = 160 -indev_error_y = 120 - -DARKPINK = lv.color_hex(0xEC048C) - -class Benchmark(Activity): - - hor_res = 0 - ver_res = 0 - layer = None - fps_buffer = [0] # Buffer to store FPS - - # Widgets: - canvas = None - - def onCreate(self): - screen = lv.obj() - self.canvas = lv.canvas(screen) - disp = lv.display_get_default() - self.hor_res = disp.get_horizontal_resolution() - self.ver_res = disp.get_vertical_resolution() - self.canvas.set_size(self.hor_res, self.ver_res) - self.canvas.set_style_bg_color(lv.color_white(), 0) - buffer = bytearray(self.hor_res * self.ver_res * 4) - self.canvas.set_buffer(buffer, self.hor_res, self.ver_res, lv.COLOR_FORMAT.NATIVE) - self.canvas.fill_bg(lv.color_white(), lv.OPA.COVER) - self.layer = lv.layer_t() - self.canvas.init_layer(self.layer) - self.canvas.add_flag(lv.obj.FLAG.CLICKABLE) - self.canvas.add_event_cb(self.touch_cb, lv.EVENT.ALL, None) - self.setContentView(screen) - - def onResume(self, screen): - #lv.perf_monitor_create(10, NULL, NULL) - lv.log_register_print_cb(self.log_callback) - #try: - # _thread.stack_size(mpos.apps.good_stack_size()) - # _thread.start_new_thread(self.runall, ()) - #except Exception as e: - # print("Could not start thread: ", e) - - def onStop(self, screen): - super().onStop(screen) - lv.log_register_print_cb(None) - - def touch_cb(self, event): - event_code=event.get_code() - #print(f"lv_event_t: code={event_code}") - if event_code == lv.EVENT.PRESSING: - self.runall() - - # Custom log callback to capture FPS - def log_callback(self,level, log_str): - # Convert log_str to string if it's a bytes object - log_str = log_str.decode() if isinstance(log_str, bytes) else log_str - # Optional: Print for debugging - #print(f"Level: {level}, Log: {log_str}") - # Log message format: "sysmon: 25 FPS (refr_cnt: 8 | redraw_cnt: 1), ..." - if "sysmon:" in log_str and "FPS" in log_str: - try: - # Extract FPS value (e.g., "25" from "sysmon: 25 FPS ...") - fps_part = log_str.split("FPS")[0].split("sysmon:")[1].strip() - fps = int(fps_part) - print("Current FPS:", fps) - self.fps_buffer[0] = fps - except (IndexError, ValueError): - pass - - def runall(self): - print("Waiting a bit before starting...") - time.sleep(1) # wait for top bar to go away - for _ in range(5): - self.draw_n_squares(10000) - - def draw_n_squares(self, n): - start = time.ticks_ms() - for _ in range(n): - self.draw_rect(100, 100) - end = time.ticks_ms() - diff = end - start - print(f"draw_rect x {n} took {diff}ms") - start = time.ticks_ms() - for _ in range(n): - self.draw_rect_viper(100, 100) - end = time.ticks_ms() - diff = end - start - print(f"draw_rect_viper x {n} took {diff}ms") - - def draw_rect(self, x: int, y: int): - draw_dsc = lv.draw_rect_dsc_t() - lv.draw_rect_dsc_t.init(draw_dsc) - draw_dsc.bg_color = lv.color_hex(0xffaaaa) - draw_dsc.border_color = lv.color_hex(0xff5555) - draw_dsc.border_width = 2 - draw_dsc.outline_color = lv.color_hex(0xff0000) - draw_dsc.outline_pad = 3 - draw_dsc.outline_width = 2 - a = lv.area_t() - a.x1 = x-10 - a.y1 = y-10 - a.x2 = x+10 - a.y2 = y+10 - lv.draw_rect(self.layer, draw_dsc, a) - self.canvas.finish_layer(self.layer) - - @micropython.viper # make it with native compilation - def draw_rect_viper(self, x: int, y: int): - draw_dsc = lv.draw_rect_dsc_t() - lv.draw_rect_dsc_t.init(draw_dsc) - draw_dsc.bg_color = lv.color_hex(0xffaaaa) - draw_dsc.border_color = lv.color_hex(0xff5555) - draw_dsc.border_width = 2 - draw_dsc.outline_color = lv.color_hex(0xff0000) - draw_dsc.outline_pad = 3 - draw_dsc.outline_width = 2 - a = lv.area_t() - a.x1 = x-10 - a.y1 = y-10 - a.x2 = x+10 - a.y2 = y+10 - lv.draw_rect(self.layer, draw_dsc, a) - self.canvas.finish_layer(self.layer) diff --git a/internal_filesystem/apps/com.micropythonos.benchmark/res/mipmap-mdpi/icon_64x64.png b/internal_filesystem/apps/com.micropythonos.benchmark/res/mipmap-mdpi/icon_64x64.png deleted file mode 100644 index ac0877f0cdab13fbc0d4e280962633ffc2c5869c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6187 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