Skip to content

Non interactive for ci json output#109

Draft
paulwuertz wants to merge 8 commits intoHBehrens:masterfrom
paulwuertz:non-interactive-for-ci-json-output
Draft

Non interactive for ci json output#109
paulwuertz wants to merge 8 commits intoHBehrens:masterfrom
paulwuertz:non-interactive-for-ci-json-output

Conversation

@paulwuertz
Copy link

Adds export of worst-case stack usage for given functions as a JSON intended to be used with i.e. RTOS threads in a CI environment.

Add arguments to not run to website and to generate a report with a specific format and export name, currently only as a json with report.json the default name.

Adresses #85.

Example of an export when running

puncover --elf_file ~/git/cannectivity/build/zephyr/zephyr.elf --build_dir ~/git/cannectivity/build/ --report-max-static-stack-usage "bg_thread_main:1024" --report-max-static-stack-usage "led_thread:1024" --report-max-static-stack-usage "gs_usb_tx_thread:1024" --report-max-static-stack-usage "gs_usb_rx_thread:1024" --report-max-static-stack-usage "log_process_thread_func:768" 

we get a JSON of all worst stack size and the call path of this worst case

{
    "led_thread": {
        "max_static_stack_size": 200,
        "call_stack": [
            {
                "function": "led_thread",
                "name": "led_thread",
                "stack_size": 24
            },
            {
                "function": "z_impl_k_poll",
                "name": "z_impl_k_poll",
                "stack_size": 48
            },
            {
                "function": "z_pend_curr",
                "name": "z_pend_curr",
                "stack_size": 24
            },
            {
                "function": "add_to_waitq_locked",
                "name": "add_to_waitq_locked",
                "stack_size": 16
            },
            {
                "function": "unready_thread",
                "name": "unready_thread",
                "stack_size": 16
            },
            {
                "function": "z_reset_time_slice",
                "name": "z_reset_time_slice",
                "stack_size": 16
            },
            {
                "function": "z_add_timeout",
                "name": "z_add_timeout",
                "stack_size": 24
            },
            {
                "function": "next_timeout",
                "name": "next_timeout",
                "stack_size": 8
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 0
            },
            {
                "function": "sys_clock_elapsed",
                "name": "sys_clock_elapsed",
                "stack_size": 16
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 8
            }
        ],
        "max_stack_size": 1024
    },
    "log_process_thread_func": {
        "max_static_stack_size": 312,
        "call_stack": [
            {
                "function": "log_process_thread_func",
                "name": "log_process_thread_func",
                "stack_size": 32
            },
            {
                "function": "z_log_init",
                "name": "z_log_init",
                "stack_size": 40
            },
            {
                "function": "activate_foreach_backend",
                "name": "activate_foreach_backend",
                "stack_size": 32
            },
            {
                "function": "log_backend_enable",
                "name": "log_backend_enable",
                "stack_size": 0
            },
            {
                "function": "z_log_notify_backend_enabled",
                "name": "z_log_notify_backend_enabled",
                "stack_size": 8
            },
            {
                "function": "z_impl_k_sem_give",
                "name": "z_impl_k_sem_give",
                "stack_size": 16
            },
            {
                "function": "z_handle_obj_poll_events",
                "name": "z_handle_obj_poll_events",
                "stack_size": 16
            },
            {
                "function": "signal_poll_event",
                "name": "signal_poll_event",
                "stack_size": 24
            },
            {
                "function": "z_work_submit_to_queue",
                "name": "z_work_submit_to_queue",
                "stack_size": 16
            },
            {
                "function": "submit_to_queue_locked",
                "name": "submit_to_queue_locked",
                "stack_size": 24
            },
            {
                "function": "notify_queue_locked",
                "name": "notify_queue_locked",
                "stack_size": "???"
            },
            {
                "function": "z_sched_wake",
                "name": "z_sched_wake",
                "stack_size": 16
            },
            {
                "function": "ready_thread",
                "name": "ready_thread",
                "stack_size": 16
            },
            {
                "function": "z_reset_time_slice",
                "name": "z_reset_time_slice",
                "stack_size": 16
            },
            {
                "function": "z_add_timeout",
                "name": "z_add_timeout",
                "stack_size": 24
            },
            {
                "function": "next_timeout",
                "name": "next_timeout",
                "stack_size": 8
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 0
            },
            {
                "function": "sys_clock_elapsed",
                "name": "sys_clock_elapsed",
                "stack_size": 16
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 8
            }
        ],
        "max_stack_size": 768
    },
    "gs_usb_tx_thread": {
        "max_static_stack_size": 856,
        "call_stack": [
            {
                "function": "gs_usb_tx_thread",
                "name": "gs_usb_tx_thread",
                "stack_size": 176
            },
            {
                "function": "z_impl_can_send",
                "name": "z_impl_can_send",
                "stack_size": 120
            },
            {
                "function": "can_mcan_send",
                "name": "can_mcan_send",
                "stack_size": 72
            },
            {
                "function": "gs_usb_can_tx_callback",
                "name": "gs_usb_can_tx_callback",
                "stack_size": 72
            },
            {
                "function": "z_log_msg_static_create",
                "name": "z_log_msg_static_create",
                "stack_size": 0
            },
            {
                "function": "z_impl_z_log_msg_static_create",
                "name": "z_impl_z_log_msg_static_create",
                "stack_size": 136
            },
            {
                "function": "z_log_msg_finalize",
                "name": "z_log_msg_finalize",
                "stack_size": 16
            },
            {
                "function": "z_log_msg_commit",
                "name": "z_log_msg_commit",
                "stack_size": 8
            },
            {
                "function": "z_log_msg_post_finalize",
                "name": "z_log_msg_post_finalize",
                "stack_size": 16
            },
            {
                "function": "z_impl_log_process",
                "name": "z_impl_log_process",
                "stack_size": 16
            },
            {
                "function": "z_log_msg_free",
                "name": "z_log_msg_free",
                "stack_size": 0
            },
            {
                "function": "mpsc_pbuf_free",
                "name": "mpsc_pbuf_free",
                "stack_size": 24
            },
            {
                "function": "z_impl_k_sem_give",
                "name": "z_impl_k_sem_give",
                "stack_size": 16
            },
            {
                "function": "z_handle_obj_poll_events",
                "name": "z_handle_obj_poll_events",
                "stack_size": 16
            },
            {
                "function": "signal_poll_event",
                "name": "signal_poll_event",
                "stack_size": 24
            },
            {
                "function": "z_work_submit_to_queue",
                "name": "z_work_submit_to_queue",
                "stack_size": 16
            },
            {
                "function": "submit_to_queue_locked",
                "name": "submit_to_queue_locked",
                "stack_size": 24
            },
            {
                "function": "notify_queue_locked",
                "name": "notify_queue_locked",
                "stack_size": "???"
            },
            {
                "function": "z_sched_wake",
                "name": "z_sched_wake",
                "stack_size": 16
            },
            {
                "function": "ready_thread",
                "name": "ready_thread",
                "stack_size": 16
            },
            {
                "function": "z_reset_time_slice",
                "name": "z_reset_time_slice",
                "stack_size": 16
            },
            {
                "function": "z_add_timeout",
                "name": "z_add_timeout",
                "stack_size": 24
            },
            {
                "function": "next_timeout",
                "name": "next_timeout",
                "stack_size": 8
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 0
            },
            {
                "function": "sys_clock_elapsed",
                "name": "sys_clock_elapsed",
                "stack_size": 16
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 8
            }
        ],
        "max_stack_size": 1024
    },
    "gs_usb_rx_thread": {
        "max_static_stack_size": 552,
        "call_stack": [
            {
                "function": "gs_usb_rx_thread",
                "name": "gs_usb_rx_thread",
                "stack_size": 88
            },
            {
                "function": "usb_transfer_sync",
                "name": "usb_transfer_sync",
                "stack_size": 64
            },
            {
                "function": "usb_transfer",
                "name": "usb_transfer",
                "stack_size": 48
            },
            {
                "function": "usb_dc_ep_read_continue",
                "name": "usb_dc_ep_read_continue",
                "stack_size": 24
            },
            {
                "function": "z_log_msg_simple_create_0",
                "name": "z_log_msg_simple_create_0",
                "stack_size": "???"
            },
            {
                "function": "z_impl_z_log_msg_simple_create_0",
                "name": "z_impl_z_log_msg_simple_create_0",
                "stack_size": 16
            },
            {
                "function": "z_log_msg_simple_create",
                "name": "z_log_msg_simple_create",
                "stack_size": 32
            },
            {
                "function": "z_log_msg_finalize",
                "name": "z_log_msg_finalize",
                "stack_size": 16
            },
            {
                "function": "z_log_msg_commit",
                "name": "z_log_msg_commit",
                "stack_size": 8
            },
            {
                "function": "z_log_msg_post_finalize",
                "name": "z_log_msg_post_finalize",
                "stack_size": 16
            },
            {
                "function": "z_impl_log_process",
                "name": "z_impl_log_process",
                "stack_size": 16
            },
            {
                "function": "z_log_msg_free",
                "name": "z_log_msg_free",
                "stack_size": 0
            },
            {
                "function": "mpsc_pbuf_free",
                "name": "mpsc_pbuf_free",
                "stack_size": 24
            },
            {
                "function": "z_impl_k_sem_give",
                "name": "z_impl_k_sem_give",
                "stack_size": 16
            },
            {
                "function": "z_handle_obj_poll_events",
                "name": "z_handle_obj_poll_events",
                "stack_size": 16
            },
            {
                "function": "signal_poll_event",
                "name": "signal_poll_event",
                "stack_size": 24
            },
            {
                "function": "z_work_submit_to_queue",
                "name": "z_work_submit_to_queue",
                "stack_size": 16
            },
            {
                "function": "submit_to_queue_locked",
                "name": "submit_to_queue_locked",
                "stack_size": 24
            },
            {
                "function": "notify_queue_locked",
                "name": "notify_queue_locked",
                "stack_size": "???"
            },
            {
                "function": "z_sched_wake",
                "name": "z_sched_wake",
                "stack_size": 16
            },
            {
                "function": "ready_thread",
                "name": "ready_thread",
                "stack_size": 16
            },
            {
                "function": "z_reset_time_slice",
                "name": "z_reset_time_slice",
                "stack_size": 16
            },
            {
                "function": "z_add_timeout",
                "name": "z_add_timeout",
                "stack_size": 24
            },
            {
                "function": "next_timeout",
                "name": "next_timeout",
                "stack_size": 8
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 0
            },
            {
                "function": "sys_clock_elapsed",
                "name": "sys_clock_elapsed",
                "stack_size": 16
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 8
            }
        ],
        "max_stack_size": 1024
    },
    "bg_thread_main": {
        "max_static_stack_size": 712,
        "call_stack": [
            {
                "function": "bg_thread_main",
                "name": "bg_thread_main",
                "stack_size": 40
            },
            {
                "function": "main",
                "name": "main",
                "stack_size": 72
            },
            {
                "function": "gs_usb_register",
                "name": "gs_usb_register",
                "stack_size": 104
            },
            {
                "function": "can_add_rx_filter",
                "name": "can_add_rx_filter",
                "stack_size": 80
            },
            {
                "function": "z_impl_z_log_msg_static_create",
                "name": "z_impl_z_log_msg_static_create",
                "stack_size": 136
            },
            {
                "function": "z_log_msg_finalize",
                "name": "z_log_msg_finalize",
                "stack_size": 16
            },
            {
                "function": "z_log_msg_commit",
                "name": "z_log_msg_commit",
                "stack_size": 8
            },
            {
                "function": "z_log_msg_post_finalize",
                "name": "z_log_msg_post_finalize",
                "stack_size": 16
            },
            {
                "function": "z_impl_log_process",
                "name": "z_impl_log_process",
                "stack_size": 16
            },
            {
                "function": "z_log_msg_free",
                "name": "z_log_msg_free",
                "stack_size": 0
            },
            {
                "function": "mpsc_pbuf_free",
                "name": "mpsc_pbuf_free",
                "stack_size": 24
            },
            {
                "function": "z_impl_k_sem_give",
                "name": "z_impl_k_sem_give",
                "stack_size": 16
            },
            {
                "function": "z_handle_obj_poll_events",
                "name": "z_handle_obj_poll_events",
                "stack_size": 16
            },
            {
                "function": "signal_poll_event",
                "name": "signal_poll_event",
                "stack_size": 24
            },
            {
                "function": "z_work_submit_to_queue",
                "name": "z_work_submit_to_queue",
                "stack_size": 16
            },
            {
                "function": "submit_to_queue_locked",
                "name": "submit_to_queue_locked",
                "stack_size": 24
            },
            {
                "function": "notify_queue_locked",
                "name": "notify_queue_locked",
                "stack_size": "???"
            },
            {
                "function": "z_sched_wake",
                "name": "z_sched_wake",
                "stack_size": 16
            },
            {
                "function": "ready_thread",
                "name": "ready_thread",
                "stack_size": 16
            },
            {
                "function": "z_reset_time_slice",
                "name": "z_reset_time_slice",
                "stack_size": 16
            },
            {
                "function": "z_add_timeout",
                "name": "z_add_timeout",
                "stack_size": 24
            },
            {
                "function": "next_timeout",
                "name": "next_timeout",
                "stack_size": 8
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 0
            },
            {
                "function": "sys_clock_elapsed",
                "name": "sys_clock_elapsed",
                "stack_size": 16
            },
            {
                "function": "elapsed",
                "name": "elapsed",
                "stack_size": 8
            }
        ],
        "max_stack_size": 1024
    }
}

@paulwuertz paulwuertz marked this pull request as draft February 17, 2025 00:04
@noahp noahp self-requested a review December 3, 2025 17:24
@noahp noahp self-assigned this Dec 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants