From c312af06c6f5c785f5b93d041ebc9c560349bdf3 Mon Sep 17 00:00:00 2001 From: chenwei Date: Mon, 4 Sep 2023 16:49:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9hitrace/bytrace=E7=9A=84?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?hitrace=E6=A8=A1=E5=9D=97=E7=9A=84=E4=BB=A3=E7=A0=81=E6=9E=84?= =?UTF-8?q?=E5=BB=BAbytrace=E4=BA=8C=E8=BF=9B=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenwei --- bin/BUILD.gn | 76 -- bin/config/bytrace.cfg | 190 --- bin/config/bytrace.rc | 224 ---- bin/example/bytrace_example.cpp | 97 -- bin/include/bytrace_osal.h | 43 - bin/src/bytrace_cmd.cpp | 1141 ----------------- bin/src/bytrace_osal.cpp | 47 - bundle.json | 6 - .../kits/js/napi/bytrace_napi_common.cpp | 72 +- 9 files changed, 36 insertions(+), 1860 deletions(-) delete mode 100644 bin/BUILD.gn delete mode 100644 bin/config/bytrace.cfg delete mode 100644 bin/config/bytrace.rc delete mode 100644 bin/example/bytrace_example.cpp delete mode 100644 bin/include/bytrace_osal.h delete mode 100644 bin/src/bytrace_cmd.cpp delete mode 100644 bin/src/bytrace_osal.cpp diff --git a/bin/BUILD.gn b/bin/BUILD.gn deleted file mode 100644 index 0119294..0000000 --- a/bin/BUILD.gn +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright (C) 2021 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import("//build/ohos.gni") -import("../bytrace.gni") - -config("bytrace_osal_inner_config") { - visibility = [ ":*" ] - include_dirs = [ "./include" ] -} - -ohos_static_library("bytrace_osal_inner") { - sources = [ "./src/bytrace_osal.cpp" ] - public_configs = [ ":bytrace_osal_inner_config" ] - external_deps = [ - "hitrace:hitrace_meter", - "init:libbegetutil", - ] - - subsystem_name = "developtools" - part_name = "bytrace" -} - -ohos_executable("bytrace") { - install_enable = true - sources = [ "./src/bytrace_cmd.cpp" ] - - deps = [ - ":bytrace_osal_inner", - "//third_party/zlib:libz", - ] - - external_deps = [ - "c_utils:utils", - "hitrace:hitrace_meter", - ] - - include_dirs = [ - "${bytrace_path}/bin/include", - "//third_party/zlib", - ] - subsystem_name = "developtools" - part_name = "bytrace" -} - -ohos_prebuilt_etc("bytrace.cfg") { - source = "./config/bytrace.cfg" - relative_install_dir = "init" - subsystem_name = "developtools" - part_name = "bytrace" -} - -ohos_executable("bytrace_example") { - sources = [ "example/bytrace_example.cpp" ] - external_deps = [ "hitrace:hitrace_meter" ] - install_enable = false - subsystem_name = "developtools" - part_name = "bytrace" -} - -group("bytrace_target") { - deps = [ - ":bytrace", - ":bytrace_example", - ] -} diff --git a/bin/config/bytrace.cfg b/bin/config/bytrace.cfg deleted file mode 100644 index 662b563..0000000 --- a/bin/config/bytrace.cfg +++ /dev/null @@ -1,190 +0,0 @@ -{ - "jobs" : [{ - "name" : "post-init", - "cmds" : [ - "write /proc/sys/kernel/sched_schedstats 1", - "write /sys/kernel/debug/tracing/tracing_on 0", - "chmod 0666 /sys/kernel/debug/tracing/buffer_size_kb", - "chmod 0666 /sys/kernel/debug/tracing/saved_cmdlines_size", - "chmod 0666 /sys/kernel/debug/tracing/trace", - "chmod 0666 /sys/kernel/debug/tracing/trace_clock", - "chmod 0222 /sys/kernel/debug/tracing/trace_marker", - "chmod 0666 /sys/kernel/debug/tracing/tracing_on", - "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_lock/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_locked/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_unlock/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction_received/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction_alloc_buf/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/cgroup/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/cpufreq_interactive/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/dma_fence/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/fence/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_read/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_write/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_result/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_reply/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_read/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_write/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_result/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_reply/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/kmem/rss_stat/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/kmem/ion_heap_grow/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/kmem/ion_heap_shrink/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/lowmemorykiller/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/lowmemorykiller/lowmemory_kill/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/mm_event/mm_event_record/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/oom/oom_score_adj_update/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_frequency/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_idle/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/power/clock_set_rate/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_frequency_limits/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/power/gpu_frequency/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_switch/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_blocked_reason/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_cpu_hotplug/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_pi_setprio/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_process_exit/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_waking/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/signal/signal_generate/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/signal/signal_deliver/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/sync/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/task/task_rename/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/task/task_newtask/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/block/block_rq_issue/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/block/block_rq_complete/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_da_write_begin/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_da_write_end/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_es_lookup_extent_enter/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_es_lookup_extent_exit/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_load_inode/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_exit/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_get_data_block/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_iget/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_enter/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_exit/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_write_begin/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_write_end/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/filemap/mm_filemap_add_to_page_cache/enable", - "chmod 0666 /sys/kernel/debug/tracing/events/filemap/mm_filemap_delete_from_page_cache/enable", - "chmod 0666 /sys/kernel/debug/tracing/options/overwrite", - "chmod 0666 /sys/kernel/debug/tracing/options/print-tgid", - "chmod 0666 /sys/kernel/debug/tracing/options/record-tgid", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu0/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu1/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu2/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu3/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu4/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu5/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu6/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu7/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu8/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu9/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu10/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu11/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu12/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu13/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu14/trace", - "chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu15/trace", - "write /sys/kernel/tracing/tracing_on 0", - "chmod 0666 /sys/kernel/tracing/buffer_size_kb", - "chmod 0666 /sys/kernel/tracing/saved_cmdlines_size", - "chmod 0666 /sys/kernel/tracing/trace", - "chmod 0666 /sys/kernel/tracing/trace_clock", - "chmod 0222 /sys/kernel/tracing/trace_marker", - "chmod 0666 /sys/kernel/tracing/tracing_on", - "chmod 0666 /sys/kernel/tracing/events/binder/binder_lock/enable", - "chmod 0666 /sys/kernel/tracing/events/binder/binder_locked/enable", - "chmod 0666 /sys/kernel/tracing/events/binder/binder_unlock/enable", - "chmod 0666 /sys/kernel/tracing/events/binder/binder_transaction/enable", - "chmod 0666 /sys/kernel/tracing/events/binder/binder_transaction_received/enable", - "chmod 0666 /sys/kernel/tracing/events/binder/binder_transaction_alloc_buf/enable", - "chmod 0666 /sys/kernel/tracing/events/cgroup/enable", - "chmod 0666 /sys/kernel/tracing/events/cpufreq_interactive/enable", - "chmod 0666 /sys/kernel/tracing/events/dma_fence/enable", - "chmod 0666 /sys/kernel/tracing/events/fence/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/i2c_read/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/i2c_write/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/i2c_result/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/i2c_reply/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/smbus_read/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/smbus_write/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/smbus_result/enable", - "chmod 0666 /sys/kernel/tracing/events/i2c/smbus_reply/enable", - "chmod 0666 /sys/kernel/tracing/events/kmem/rss_stat/enable", - "chmod 0666 /sys/kernel/tracing/events/kmem/ion_heap_grow/enable", - "chmod 0666 /sys/kernel/tracing/events/kmem/ion_heap_shrink/enable", - "chmod 0666 /sys/kernel/tracing/events/lowmemorykiller/enable", - "chmod 0666 /sys/kernel/tracing/events/lowmemorykiller/lowmemory_kill/enable", - "chmod 0666 /sys/kernel/tracing/events/mm_event/mm_event_record/enable", - "chmod 0666 /sys/kernel/tracing/events/oom/oom_score_adj_update/enable", - "chmod 0666 /sys/kernel/tracing/events/power/cpu_frequency/enable", - "chmod 0666 /sys/kernel/tracing/events/power/cpu_idle/enable", - "chmod 0666 /sys/kernel/tracing/events/power/clock_set_rate/enable", - "chmod 0666 /sys/kernel/tracing/events/power/cpu_frequency_limits/enable", - "chmod 0666 /sys/kernel/tracing/events/power/gpu_frequency/enable", - "chmod 0666 /sys/kernel/tracing/events/sched/sched_switch/enable", - "chmod 0666 /sys/kernel/tracing/events/sched/sched_wakeup/enable", - "chmod 0666 /sys/kernel/tracing/events/sched/sched_blocked_reason/enable", - "chmod 0666 /sys/kernel/tracing/events/sched/sched_cpu_hotplug/enable", - "chmod 0666 /sys/kernel/tracing/events/sched/sched_pi_setprio/enable", - "chmod 0666 /sys/kernel/tracing/events/sched/sched_process_exit/enable", - "chmod 0666 /sys/kernel/tracing/events/sched/sched_waking/enable", - "chmod 0666 /sys/kernel/tracing/events/signal/signal_generate/enable", - "chmod 0666 /sys/kernel/tracing/events/signal/signal_deliver/enable", - "chmod 0666 /sys/kernel/tracing/events/sync/enable", - "chmod 0666 /sys/kernel/tracing/events/task/task_rename/enable", - "chmod 0666 /sys/kernel/tracing/events/task/task_newtask/enable", - "chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable", - "chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable", - "chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable", - "chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable", - "chmod 0666 /sys/kernel/tracing/events/block/block_rq_issue/enable", - "chmod 0666 /sys/kernel/tracing/events/block/block_rq_complete/enable", - "chmod 0666 /sys/kernel/tracing/events/ext4/ext4_da_write_begin/enable", - "chmod 0666 /sys/kernel/tracing/events/ext4/ext4_da_write_end/enable", - "chmod 0666 /sys/kernel/tracing/events/ext4/ext4_es_lookup_extent_enter/enable", - "chmod 0666 /sys/kernel/tracing/events/ext4/ext4_es_lookup_extent_exit/enable", - "chmod 0666 /sys/kernel/tracing/events/ext4/ext4_load_inode/enable", - "chmod 0666 /sys/kernel/tracing/events/ext4/ext4_sync_file_enter/enable", - "chmod 0666 /sys/kernel/tracing/events/ext4/ext4_sync_file_exit/enable", - "chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_get_data_block/enable", - "chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_iget/enable", - "chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_sync_file_enter/enable", - "chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_sync_file_exit/enable", - "chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_write_begin/enable", - "chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_write_end/enable", - "chmod 0666 /sys/kernel/tracing/events/filemap/mm_filemap_add_to_page_cache/enable", - "chmod 0666 /sys/kernel/tracing/events/filemap/mm_filemap_delete_from_page_cache/enable", - "chmod 0666 /sys/kernel/tracing/options/overwrite", - "chmod 0666 /sys/kernel/tracing/options/print-tgid", - "chmod 0666 /sys/kernel/tracing/options/record-tgid", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu0/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu1/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu2/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu3/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu4/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu5/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu6/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu7/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu8/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu9/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu10/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu11/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu12/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu13/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu14/trace", - "chmod 0666 /sys/kernel/tracing/per_cpu/cpu15/trace", - "setparam debug.hitrace.tags.enableflags 0" - ] - } - ] -} diff --git a/bin/config/bytrace.rc b/bin/config/bytrace.rc deleted file mode 100644 index f045f1a..0000000 --- a/bin/config/bytrace.rc +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -on late-init - write /proc/sys/kernel/sched_schedstats 1 - - write /sys/kernel/debug/tracing/tracing_on 0 - chmod 0666 /sys/kernel/debug/tracing/buffer_size_kb - chmod 0666 /sys/kernel/debug/tracing/saved_cmdlines_size - chmod 0666 /sys/kernel/debug/tracing/trace - chmod 0666 /sys/kernel/debug/tracing/trace_clock - chmod 0222 /sys/kernel/debug/tracing/trace_marker - chmod 0666 /sys/kernel/debug/tracing/tracing_on - - # ftrace events - chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_lock/enable - chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_locked/enable - chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_unlock/enable - chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction/enable - chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction_received/enable - chmod 0666 /sys/kernel/debug/tracing/events/binder/binder_transaction_alloc_buf/enable - - chmod 0666 /sys/kernel/debug/tracing/events/cgroup/enable - chmod 0666 /sys/kernel/debug/tracing/events/cpufreq_interactive/enable - chmod 0666 /sys/kernel/debug/tracing/events/dma_fence/enable - chmod 0666 /sys/kernel/debug/tracing/events/fence/enable - - chmod 0666 /sys/kernel/debug/tracing/events/i2c/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_read/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_write/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_result/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/i2c_reply/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_read/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_write/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_result/enable - chmod 0666 /sys/kernel/debug/tracing/events/i2c/smbus_reply/enable - - chmod 0666 /sys/kernel/debug/tracing/events/kmem/rss_stat/enable - chmod 0666 /sys/kernel/debug/tracing/events/kmem/ion_heap_grow/enable - chmod 0666 /sys/kernel/debug/tracing/events/kmem/ion_heap_shrink/enable - chmod 0666 /sys/kernel/debug/tracing/events/lowmemorykiller/enable - chmod 0666 /sys/kernel/debug/tracing/events/lowmemorykiller/lowmemory_kill/enable - chmod 0666 /sys/kernel/debug/tracing/events/mm_event/mm_event_record/enable - chmod 0666 /sys/kernel/debug/tracing/events/oom/oom_score_adj_update/enable - - chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_frequency/enable - chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_idle/enable - chmod 0666 /sys/kernel/debug/tracing/events/power/clock_set_rate/enable - chmod 0666 /sys/kernel/debug/tracing/events/power/cpu_frequency_limits/enable - chmod 0666 /sys/kernel/debug/tracing/events/power/gpu_frequency/enable - - chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_switch/enable - chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_wakeup/enable - chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_blocked_reason/enable - chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_cpu_hotplug/enable - chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_pi_setprio/enable - chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_process_exit/enable - chmod 0666 /sys/kernel/debug/tracing/events/sched/sched_waking/enable - - chmod 0666 /sys/kernel/debug/tracing/events/signal/signal_generate/enable - chmod 0666 /sys/kernel/debug/tracing/events/signal/signal_deliver/enable - chmod 0666 /sys/kernel/debug/tracing/events/sync/enable - chmod 0666 /sys/kernel/debug/tracing/events/task/task_rename/enable - chmod 0666 /sys/kernel/debug/tracing/events/task/task_newtask/enable - - chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable - chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable - chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable - chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable - - chmod 0666 /sys/kernel/debug/tracing/events/block/block_rq_issue/enable - chmod 0666 /sys/kernel/debug/tracing/events/block/block_rq_complete/enable - chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_da_write_begin/enable - chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_da_write_end/enable - chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_es_lookup_extent_enter/enable - chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_es_lookup_extent_exit/enable - chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_load_inode/enable - chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable - chmod 0666 /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_exit/enable - chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_get_data_block/enable - chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_iget/enable - chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_enter/enable - chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_sync_file_exit/enable - chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_write_begin/enable - chmod 0666 /sys/kernel/debug/tracing/events/f2fs/f2fs_write_end/enable - chmod 0666 /sys/kernel/debug/tracing/events/filemap/mm_filemap_add_to_page_cache/enable - chmod 0666 /sys/kernel/debug/tracing/events/filemap/mm_filemap_delete_from_page_cache/enable - - chmod 0666 /sys/kernel/debug/tracing/options/overwrite - chmod 0666 /sys/kernel/debug/tracing/options/print-tgid - chmod 0666 /sys/kernel/debug/tracing/options/record-tgid - - # percpu - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu0/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu1/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu2/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu3/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu4/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu5/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu6/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu7/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu8/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu9/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu10/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu11/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu12/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu13/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu14/trace - chmod 0666 /sys/kernel/debug/tracing/per_cpu/cpu15/trace - - - write /sys/kernel/tracing/tracing_on 0 - chmod 0666 /sys/kernel/tracing/buffer_size_kb - chmod 0666 /sys/kernel/tracing/saved_cmdlines_size - chmod 0666 /sys/kernel/tracing/trace - chmod 0666 /sys/kernel/tracing/trace_clock - chmod 0222 /sys/kernel/tracing/trace_marker - chmod 0666 /sys/kernel/tracing/tracing_on - - # ftrace events - chmod 0666 /sys/kernel/tracing/events/binder/binder_lock/enable - chmod 0666 /sys/kernel/tracing/events/binder/binder_locked/enable - chmod 0666 /sys/kernel/tracing/events/binder/binder_unlock/enable - chmod 0666 /sys/kernel/tracing/events/binder/binder_transaction/enable - chmod 0666 /sys/kernel/tracing/events/binder/binder_transaction_received/enable - chmod 0666 /sys/kernel/tracing/events/binder/binder_transaction_alloc_buf/enable - - chmod 0666 /sys/kernel/tracing/events/cgroup/enable - chmod 0666 /sys/kernel/tracing/events/cpufreq_interactive/enable - chmod 0666 /sys/kernel/tracing/events/dma_fence/enable - chmod 0666 /sys/kernel/tracing/events/fence/enable - - chmod 0666 /sys/kernel/tracing/events/i2c/enable - chmod 0666 /sys/kernel/tracing/events/i2c/i2c_read/enable - chmod 0666 /sys/kernel/tracing/events/i2c/i2c_write/enable - chmod 0666 /sys/kernel/tracing/events/i2c/i2c_result/enable - chmod 0666 /sys/kernel/tracing/events/i2c/i2c_reply/enable - chmod 0666 /sys/kernel/tracing/events/i2c/smbus_read/enable - chmod 0666 /sys/kernel/tracing/events/i2c/smbus_write/enable - chmod 0666 /sys/kernel/tracing/events/i2c/smbus_result/enable - chmod 0666 /sys/kernel/tracing/events/i2c/smbus_reply/enable - - chmod 0666 /sys/kernel/tracing/events/kmem/rss_stat/enable - chmod 0666 /sys/kernel/tracing/events/kmem/ion_heap_grow/enable - chmod 0666 /sys/kernel/tracing/events/kmem/ion_heap_shrink/enable - chmod 0666 /sys/kernel/tracing/events/lowmemorykiller/enable - chmod 0666 /sys/kernel/tracing/events/lowmemorykiller/lowmemory_kill/enable - chmod 0666 /sys/kernel/tracing/events/mm_event/mm_event_record/enable - chmod 0666 /sys/kernel/tracing/events/oom/oom_score_adj_update/enable - - chmod 0666 /sys/kernel/tracing/events/power/cpu_frequency/enable - chmod 0666 /sys/kernel/tracing/events/power/cpu_idle/enable - chmod 0666 /sys/kernel/tracing/events/power/clock_set_rate/enable - chmod 0666 /sys/kernel/tracing/events/power/cpu_frequency_limits/enable - chmod 0666 /sys/kernel/tracing/events/power/gpu_frequency/enable - - chmod 0666 /sys/kernel/tracing/events/sched/sched_switch/enable - chmod 0666 /sys/kernel/tracing/events/sched/sched_wakeup/enable - chmod 0666 /sys/kernel/tracing/events/sched/sched_blocked_reason/enable - chmod 0666 /sys/kernel/tracing/events/sched/sched_cpu_hotplug/enable - chmod 0666 /sys/kernel/tracing/events/sched/sched_pi_setprio/enable - chmod 0666 /sys/kernel/tracing/events/sched/sched_process_exit/enable - chmod 0666 /sys/kernel/tracing/events/sched/sched_waking/enable - - chmod 0666 /sys/kernel/tracing/events/signal/signal_generate/enable - chmod 0666 /sys/kernel/tracing/events/signal/signal_deliver/enable - chmod 0666 /sys/kernel/tracing/events/sync/enable - chmod 0666 /sys/kernel/tracing/events/task/task_rename/enable - chmod 0666 /sys/kernel/tracing/events/task/task_newtask/enable - - chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable - chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_direct_reclaim_end/enable - chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_wake/enable - chmod 0666 /sys/kernel/tracing/events/vmscan/mm_vmscan_kswapd_sleep/enable - - chmod 0666 /sys/kernel/tracing/events/block/block_rq_issue/enable - chmod 0666 /sys/kernel/tracing/events/block/block_rq_complete/enable - chmod 0666 /sys/kernel/tracing/events/ext4/ext4_da_write_begin/enable - chmod 0666 /sys/kernel/tracing/events/ext4/ext4_da_write_end/enable - chmod 0666 /sys/kernel/tracing/events/ext4/ext4_es_lookup_extent_enter/enable - chmod 0666 /sys/kernel/tracing/events/ext4/ext4_es_lookup_extent_exit/enable - chmod 0666 /sys/kernel/tracing/events/ext4/ext4_load_inode/enable - chmod 0666 /sys/kernel/tracing/events/ext4/ext4_sync_file_enter/enable - chmod 0666 /sys/kernel/tracing/events/ext4/ext4_sync_file_exit/enable - chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_get_data_block/enable - chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_iget/enable - chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_sync_file_enter/enable - chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_sync_file_exit/enable - chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_write_begin/enable - chmod 0666 /sys/kernel/tracing/events/f2fs/f2fs_write_end/enable - chmod 0666 /sys/kernel/tracing/events/filemap/mm_filemap_add_to_page_cache/enable - chmod 0666 /sys/kernel/tracing/events/filemap/mm_filemap_delete_from_page_cache/enable - - chmod 0666 /sys/kernel/tracing/options/overwrite - chmod 0666 /sys/kernel/tracing/options/print-tgid - chmod 0666 /sys/kernel/tracing/options/record-tgid - - # percpu - chmod 0666 /sys/kernel/tracing/per_cpu/cpu0/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu1/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu2/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu3/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu4/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu5/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu6/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu7/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu8/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu9/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu10/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu11/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu12/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu13/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu14/trace - chmod 0666 /sys/kernel/tracing/per_cpu/cpu15/trace \ No newline at end of file diff --git a/bin/example/bytrace_example.cpp b/bin/example/bytrace_example.cpp deleted file mode 100644 index ffbb6ab..0000000 --- a/bin/example/bytrace_example.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include -#include "hitrace_meter.h" - -using namespace std; -namespace { -constexpr int SLEEP_ONE_SECOND = 1; -constexpr int SLEEP_TWO_SECOND = 2; -constexpr int CYCLE_TIMES = 5; -constexpr int32_t TASK_ID = 111; -constexpr uint64_t LABEL = HITRACE_TAG_OHOS; - -void FuncA() -{ - cout << "funcA" << endl; - sleep(SLEEP_ONE_SECOND); -} - -void FuncB() -{ - cout << "funcB" << endl; - sleep(SLEEP_TWO_SECOND); -} - -void FuncC() -{ - cout << "funcC" << endl; - int num = 0; - for (int i = 0; i < CYCLE_TIMES; i++) { - CountTrace(HITRACE_TAG_OHOS, "count number", ++num); - sleep(SLEEP_ONE_SECOND); - } -} - -void ThreadFunc1() -{ - StartAsyncTrace(LABEL, "testAsync", TASK_ID); - for (int i = 0; i < CYCLE_TIMES; ++i) { - cout << "t1" << endl; - sleep(SLEEP_ONE_SECOND); - } -} - -void ThreadFunc2() -{ - for (int i = 0; i < CYCLE_TIMES; ++i) { - cout << "t2" << endl; - sleep(SLEEP_ONE_SECOND); - } - FinishAsyncTrace(LABEL, "testAsync", TASK_ID); -} -} // namespace - -int main() -{ - thread t1(ThreadFunc1); - t1.join(); - - StartTrace(LABEL, "testStart"); - sleep(SLEEP_ONE_SECOND); - - StartTrace(LABEL, "funcAStart", SLEEP_ONE_SECOND); // 打印起始点 - FuncA(); - FinishTrace(LABEL); - sleep(SLEEP_TWO_SECOND); - - thread t2(ThreadFunc2); - t2.join(); - - StartTrace(LABEL, "funcBStart", SLEEP_TWO_SECOND); - FuncB(); - FinishTrace(LABEL); - sleep(SLEEP_TWO_SECOND); - - sleep(SLEEP_ONE_SECOND); - FinishTrace(LABEL); - FuncC(); - - return 0; -} diff --git a/bin/include/bytrace_osal.h b/bin/include/bytrace_osal.h deleted file mode 100644 index 8a66e69..0000000 --- a/bin/include/bytrace_osal.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2021-2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef BIN_INCLUDE_BYTRACE_CAPTURE_H -#define BIN_INCLUDE_BYTRACE_CAPTURE_H - -#include - -namespace OHOS { -namespace Developtools { -namespace BytraceOsal { -const int MAX_SYS_FILES = 11; -enum TraceType { USER, KERNEL }; -struct TagCategory { - std::string name; - std::string description; - uint64_t tag; - TraceType type; - struct { - std::string path; - } sysfiles[MAX_SYS_FILES]; -}; - -std::string GetPropertyInner(const std::string& property, const std::string& value); -bool SetPropertyInner(const std::string& property, const std::string& value); -bool RefreshBinderServices(void); -bool RefreshHalServices(void); -} -} -} -#endif // BIN_INCLUDE_BYTRACE_CAPTURE_H diff --git a/bin/src/bytrace_cmd.cpp b/bin/src/bytrace_cmd.cpp deleted file mode 100644 index 33e7141..0000000 --- a/bin/src/bytrace_cmd.cpp +++ /dev/null @@ -1,1141 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "hitrace_meter.h" -#include "bytrace_osal.h" -#include "securec.h" - -using namespace std; -using namespace OHOS::Developtools::BytraceOsal; - -namespace { -struct option g_longOptions[] = { - { "buffer_size", required_argument, nullptr, 0 }, - { "trace_clock", required_argument, nullptr, 0 }, - { "help", no_argument, nullptr, 0 }, - { "output", required_argument, nullptr, 0 }, - { "time", required_argument, nullptr, 0 }, // used to specify the time (in seconds) for trace to run. - { "trace_begin", no_argument, nullptr, 0 }, - { "trace_finish", no_argument, nullptr, 0 }, - { "trace_finish_nodump", no_argument, nullptr, 0 }, - { "trace_dump", no_argument, nullptr, 0 }, - { "list_categories", no_argument, nullptr, 0 }, - { "overwrite", no_argument, nullptr, 0 }, - { nullptr, 0, nullptr, 0 }, -}; -// char range -const unsigned int CHUNK_SIZE = 65536; -const int BLOCK_SIZE = 4096; -const int SHELL_UID = 2000; -const int WAIT_MILLISECONDS = 10; -const int SAVED_CMDLINES_SIZE = 1024; - -const string TRACE_TAG_PROPERTY = "debug.hitrace.tags.enableflags"; - -// various operating paths of ftrace -const string TRACING_ON_PATH = "tracing_on"; -const string TRACE_PATH = "trace"; -const string TRACE_MARKER_PATH = "trace_marker"; -const string BUFFER_SIZE_PATH = "buffer_size_kb"; -const string CURRENT_TRACER_PATH = "current_tracer"; -const string TRACE_CLOCK_PATH = "trace_clock"; -const string OVER_WRITE_PATH = "options/overwrite"; -const string RECORD_TGID_PATH = "options/record-tgid"; -const string SAVED_CMDLINES_PATH = "saved_cmdlines_size"; - -// support customization of some parameters - -const int MIN_BUFFER_SIZE = 256; -const int MAX_BUFFER_SIZE = 307200; // 300 MB -constexpr unsigned int MAX_OUTPUT_LEN = 255; -const int PAGE_SIZE_KB = 4; // 4 KB -int g_traceDuration = 5; // g_traceDuration -int g_bufferSizeKB = 2048; -string g_clock = "boot"; -bool g_overwrite = true; -string g_outputFile; -bool g_compress = false; - -string g_traceRootPath; // g_traceRootPath - -const unsigned int START_NONE = 0; -const unsigned int START_NORMAL = 1; -const unsigned int START_ASYNC = 2; -unsigned int g_traceStart = START_NORMAL; -bool g_traceStop = true; -bool g_traceDump = true; - -map g_tagMap; // stored tags -vector g_userEnabledTags; -vector g_kernelEnabledPaths; -} - -static bool IsTraceMounted() -{ - const string debugfsPath = "/sys/kernel/debug/tracing/"; - const string tracefsPath = "/sys/kernel/tracing/"; - // find debugfsPath first - if (access((debugfsPath + TRACE_MARKER_PATH).c_str(), F_OK) != -1) { - g_traceRootPath = debugfsPath; - return true; - } - if (access((tracefsPath + TRACE_MARKER_PATH).c_str(), F_OK) != -1) { - g_traceRootPath = tracefsPath; - return true; - } - - (void)fprintf(stderr, "Error: Did not find trace folder.\n"); // can't find trace folder - return false; -} - -static bool IsFileExit(const string& filename) -{ - return access((g_traceRootPath + filename).c_str(), F_OK) != -1; // verify if the file exists -} - -static bool IsWritableFile(const string& filename) -{ - return access((g_traceRootPath + filename).c_str(), W_OK) != -1; // verify if the file writable -} - -static bool WriteStrToFile(const string& filename, const std::string& str) -{ - ofstream out; - out.open(g_traceRootPath + filename, ios::out); - if (out.fail()) { - // can't open the file - fprintf(stderr, "Error: Did not open %s\n", filename.c_str()); - return false; - } - out << str; - if (out.bad()) { - fprintf(stderr, "Error: Did not write %s\n", filename.c_str()); - out.close(); - return false; - } - // release resources - out.flush(); - out.close(); - return true; -} - -static bool SetFtraceEnabled(const string& path, bool enabled) -{ - return WriteStrToFile(path, enabled ? "1" : "0"); // write 1 or 0 to file -} - -static bool IsTagSupported(const string& name) -{ - auto it = g_tagMap.find(name); - if (it == g_tagMap.end()) { - // can't find item from map - return false; - } - - TagCategory tagCategory = it->second; - if (tagCategory.type != KERNEL) { - g_userEnabledTags.push_back(tagCategory.tag); - return true; - } - - bool findPath = false; - for (int i = 0; i < MAX_SYS_FILES; i++) { - const string path = tagCategory.sysfiles[i].path; - if (path.size() == 0) { - continue; - } - if (IsWritableFile(path)) { - g_kernelEnabledPaths.push_back(path); - findPath = true; - } else if (IsFileExit(path)) { - fprintf(stderr, "Warning: category \"%s\" requires root privileges.\n", name.c_str()); - } - } - return findPath; -} - -static string CanonicalizeSpecPath(const char* src) -{ - // PATH_MAX is 4096, defined in linux/limits.h - if (src == nullptr || strlen(src) >= PATH_MAX) { - fprintf(stderr, "Error: CanonicalizeSpecPath %s failed\n", src); - return ""; - } - char resolvedPath[PATH_MAX] = { 0 }; -#if defined(_WIN32) - if (!_fullpath(resolvedPath, src, PATH_MAX)) { - fprintf(stderr, "Error: _fullpath %s failed\n", src); - return ""; - } -#else - if (access(src, F_OK) == 0) { - // function to find the absolute path of a file in the directory - if (realpath(src, resolvedPath) == nullptr) { - fprintf(stderr, "Error: realpath %s failed\n", src); - return ""; - } - } else { - // trace_clock file doesn't exist - string fileName(src); - if (fileName.find("..") == string::npos) { - if (sprintf_s(resolvedPath, PATH_MAX, "%s", src) == -1) { - fprintf(stderr, "Error: sprintf_s %s failed\n", src); - return ""; - } - } else { - // find file failed - fprintf(stderr, "Error: find .. %s failed\n", src); - return ""; - } - } -#endif - string res(resolvedPath); - return res; // return the string -} - -static string ReadFile(const string& filename) -{ - // standardize file paths - string resolvedPath = CanonicalizeSpecPath((g_traceRootPath + filename).c_str()); - ifstream fin(resolvedPath.c_str()); - if (!fin.is_open()) { - fprintf(stderr, "open file: %s failed!\n", (g_traceRootPath + filename).c_str()); - return ""; - } - - string str((istreambuf_iterator(fin)), istreambuf_iterator()); - // close a file handle - fin.close(); - return str; -} - -static bool SetBufferSize(int bufferSize) -{ - if (!WriteStrToFile(CURRENT_TRACER_PATH, "nop")) { - // process for current_tracer file does not have permission - fprintf(stderr, "Error: write \"nop\" to %s\n", CURRENT_TRACER_PATH.c_str()); - } - return WriteStrToFile(BUFFER_SIZE_PATH, to_string(bufferSize)); -} - -static bool SetClock(const string& timeclock) -{ - string allClocks = ReadFile(TRACE_CLOCK_PATH); - size_t begin = allClocks.find("["); - size_t end = allClocks.find("]"); - string newClock; - // if the clock to be set is the same as the existing clock, it will not be set - if (begin != string::npos && end != string::npos && - timeclock.compare(0, timeclock.size(), allClocks, begin + 1, end - begin - 1) == 0) { - return true; - } else if (allClocks.find(timeclock) != string::npos) { - newClock = timeclock; - } else if (allClocks.find("boot") != string::npos) { - // boot: This is the boot clock (CLOCK_BOOTTIME) and is based on the fast monotonic clock, - newClock = "boot"; - } else if (allClocks.find("mono") != string::npos) { - // mono: uses the fast monotonic clock (CLOCK_MONOTONIC) - // which is monotonic and is subject to NTP rate adjustments. - newClock = "mono"; - } else if (allClocks.find("global") != string::npos) { - newClock = "global"; - } else { - fprintf(stderr, "You can set trace clock in %s\n", allClocks.c_str()); - return false; - } - if (newClock.size() != 0) { - return WriteStrToFile(TRACE_CLOCK_PATH, newClock); - } - return true; -} - -static bool SetOverWriteEnable(bool enabled) -{ - return SetFtraceEnabled(OVER_WRITE_PATH, enabled); -} - -static bool SetTgidEnable(bool enabled) -{ - return SetFtraceEnabled(RECORD_TGID_PATH, enabled); -} - -static bool SetCmdLinesSize(int cmdLinesSize) -{ - return WriteStrToFile(SAVED_CMDLINES_PATH, std::to_string(cmdLinesSize)); -} - -static bool DisableAllFtraceEvents() -{ - bool isTrue = true; - // DisableAllFtraceEvents - for (auto it = g_tagMap.begin(); it != g_tagMap.end(); ++it) { - TagCategory tag = it->second; - if (tag.type != KERNEL) { - continue; - } - for (int i = 0; i < MAX_SYS_FILES; i++) { - const string path = tag.sysfiles[i].path; - if ((path.size() > 0) && IsWritableFile(path)) { - isTrue = isTrue && SetFtraceEnabled(path, false); // set false to ftraceEnabled - } - } - } - return isTrue; -} - -static bool SetProperty(const string& property, const string& value) -{ - // set the system property - return SetPropertyInner(property, value); -} - -static bool SetTraceTagsEnabled(uint64_t tags) -{ - string value = to_string(tags); - return SetProperty(TRACE_TAG_PROPERTY, value); -} - -static bool RefreshServices() -{ - bool res = false; - // refresh binderServices - res = RefreshBinderServices(); - if (!res) { - return res; - } - res = RefreshHalServices(); - return res; -} - -static bool SetUserSpaceSettings() -{ - // set userSpace settings - uint64_t enabledTags = 0; - for (auto tag: g_userEnabledTags) { - enabledTags |= tag; - } - return SetTraceTagsEnabled(enabledTags) && RefreshServices(); -} - -static bool ClearUserSpaceSettings() -{ - // clear userSpace settings - return SetTraceTagsEnabled(0) && RefreshServices(); -} - -static bool SetKernelSpaceSettings() -{ - // set kernelSpace settings - if (!(SetBufferSize(g_bufferSizeKB) && SetClock(g_clock) && - SetOverWriteEnable(g_overwrite) && SetTgidEnable(true) && SetCmdLinesSize(SAVED_CMDLINES_SIZE))) { - fprintf(stderr, "Set trace kernel settings failed.\n"); - return false; - } - if (DisableAllFtraceEvents() == false) { - fprintf(stderr, "Pre-clear kernel tracers failed.\n"); - return false; // pre-clear kernel tracers failed - } - for (const auto& path : g_kernelEnabledPaths) { - SetFtraceEnabled(path, true); - } - return true; -} - -static bool ClearKernelSpaceSettings() -{ - // clear kernelSpace settings - return DisableAllFtraceEvents() && SetOverWriteEnable(true) && SetBufferSize(1) && SetClock("boot"); -} - -static void ShowListCategory() -{ - printf(" %18s description:\n", "tagName:"); - for (auto it = g_tagMap.begin(); it != g_tagMap.end(); ++it) { - string key = it->first; // show categorys - TagCategory tag = it->second; - if (IsTagSupported(key)) { - printf(" %18s - %s\n", tag.name.c_str(), tag.description.c_str()); - } - } -} - -static void ShowHelp(const string& cmd) -{ - printf("usage: %s [options] [categories...]\n", cmd.c_str()); - printf("options include:\n" - " -b N Sets the size of the buffer (KB) for storing and reading traces. The default \n" - " buffer size is 2048 KB.\n" - " --buffer_size N Like \"-b N\".\n" - " -l Lists available bytrace categories.\n" - " --list_categories Like \"-l\".\n" - " -t N Sets the bytrace running duration in seconds (5s by default), which depends on \n" - " the time required for analysis.\n" - " --time N Like \"-t N\".\n" - " --trace_clock clock\n" - " Sets the type of the clock for adding a timestamp to a trace, which can be\n" - " boot (default), global, mono, uptime, or perf.\n" - " --trace_begin Starts capturing traces.\n" - " --trace_dump Dumps traces to a specified path (stdout by default).\n" - " --trace_finish Stops capturing traces and dumps traces to a specified path (stdout by default).\n" - " --trace_finish_nodump\n" - " Stops capturing traces and not dumps traces.\n" - " --overwrite Sets the action to take when the buffer is full. If this option is used,\n" - " the latest traces are discarded; if this option is not used (default setting),\n" - " the earliest traces are discarded.\n" - " -o filename Specifies the name of the target file (stdout by default).\n" - " --output filename\n" - " Like \"-o filename\".\n" - " -z Compresses a captured trace.\n" - ); -} - -template -inline bool StrToNum(const std::string& sString, T &tX) -{ - // str to num - std::istringstream iStream(sString); - return (iStream >> tX) ? true : false; -} - -static bool ParseControlOpt(int optionIndex, bool& isTrue) -{ - if (!strcmp(g_longOptions[optionIndex].name, "trace_begin")) { - g_traceStart = START_ASYNC; - g_traceStop = false; - g_traceDump = false; - return true; - } else if (!strcmp(g_longOptions[optionIndex].name, "trace_finish")) { - g_traceStart = START_NONE; - g_traceStop = true; - g_traceDump = true; - return true; - } else if (!strcmp(g_longOptions[optionIndex].name, "trace_finish_nodump")) { - g_traceStart = START_NONE; - g_traceStop = true; - g_traceDump = false; - return true; - } else if (!strcmp(g_longOptions[optionIndex].name, "trace_dump")) { - g_traceStart = START_NONE; - g_traceStop = false; - g_traceDump = true; - return true; - } else if (!strcmp(g_longOptions[optionIndex].name, "list_categories")) { - ShowListCategory(); - isTrue = false; - return true; - } - return false; -} - -static bool ParseBufferSizeOpt(int optionIndex, bool& isTrue) -{ - if (!strcmp(g_longOptions[optionIndex].name, "buffer_size")) { - if (!StrToNum(optarg, g_bufferSizeKB)) { - fprintf(stderr, "Error: buffer size is illegal input. eg: \"--buffer_size 1024\"\n"); - isTrue = false; - } else if (g_bufferSizeKB < MIN_BUFFER_SIZE || g_bufferSizeKB > MAX_BUFFER_SIZE) { - fprintf(stderr, "Error: buffer size must be from 256 KB to 300 MB. eg: \"--buffer_size 1024\"\n"); - isTrue = false; - } - g_bufferSizeKB = g_bufferSizeKB / PAGE_SIZE_KB * PAGE_SIZE_KB; - return true; - } - return false; -} - -static bool ParseTraceClockOpt(int optionIndex, bool& isTrue) -{ - if (!strcmp(g_longOptions[optionIndex].name, "trace_clock")) { - regex re("[a-zA-Z]{4,6}"); - if (regex_match(optarg, re)) { - g_clock = optarg; - } else { - fprintf(stderr, "Error: \"--trace_clock\" is illegal input. eg: \"--trace_clock boot\"\n"); - isTrue = false; - } - return true; - } else if (!strcmp(g_longOptions[optionIndex].name, "overwrite")) { - g_overwrite = false; - return true; - } - return false; -} - -static bool ParseOutputOpt(int optionIndex, bool& isTrue) -{ - if (!strcmp(g_longOptions[optionIndex].name, "output")) { - struct stat buf; - size_t len = strnlen(optarg, MAX_OUTPUT_LEN); - if (len == MAX_OUTPUT_LEN || len < 1 || (stat(optarg, &buf) == 0 && (buf.st_mode & S_IFDIR))) { - fprintf(stderr, "Error: output file is illegal\n"); - isTrue = false; - } else { - g_outputFile = optarg; - } - return true; - } - return false; -} - -static void ParseHelpTimeOpt(const string& cmd, int optionIndex, bool& isTrue) -{ - if (!strcmp(g_longOptions[optionIndex].name, "help")) { - ShowHelp(cmd); - isTrue = false; - } else if (!strcmp(g_longOptions[optionIndex].name, "time")) { - if (!StrToNum(optarg, g_traceDuration)) { - fprintf(stderr, "Error: the time is illegal input. eg: \"--time 5\"\n"); - isTrue = false; - } else if (g_traceDuration < 1) { - fprintf(stderr, "Error: \"-t %s\" to be greater than zero. eg: \"--time 5\"\n", optarg); - isTrue = false; - } - } -} - -static void ParseLongOpt(const string& cmd, int optionIndex, bool& isTrue) -{ - bool isFinish = ParseControlOpt(optionIndex, isTrue); - if (isFinish) { - return; - } - isFinish = ParseBufferSizeOpt(optionIndex, isTrue); - if (isFinish) { - return; - } - isFinish = ParseTraceClockOpt(optionIndex, isTrue); - if (isFinish) { - return; - } - isFinish = ParseOutputOpt(optionIndex, isTrue); - if (isFinish) { - return; - } - ParseHelpTimeOpt(cmd, optionIndex, isTrue); -} - -static bool ParseBOpt(int opt, bool& isTrue) -{ - if (opt == 'b') { - if (!StrToNum(optarg, g_bufferSizeKB)) { - fprintf(stderr, "Error: buffer size is illegal input. eg: \"--buffer_size 1024\"\n"); - isTrue = false; - } else if (g_bufferSizeKB < MIN_BUFFER_SIZE || g_bufferSizeKB > MAX_BUFFER_SIZE) { - fprintf(stderr, "Error: buffer size must be from 256 KB to 300 MB. eg: \"--buffer_size 1024\"\n"); - isTrue = false; - } - g_bufferSizeKB = g_bufferSizeKB / PAGE_SIZE_KB * PAGE_SIZE_KB; - return true; - } - return false; -} - -static bool ParseHltOpt(int opt, char** argv, bool& isTrue) -{ - if (opt == 'h') { - ShowHelp(argv[0]); - isTrue = false; - return true; - } else if (opt == 'l') { - ShowListCategory(); - isTrue = false; - return true; - } else if (opt == 't') { - if (!StrToNum(optarg, g_traceDuration)) { - fprintf(stderr, "Error: the time is illegal input. eg: \"--time 5\"\n"); - isTrue = false; - } else if (g_traceDuration < 1) { - fprintf(stderr, "Error: \"-t %s\" to be greater than zero. eg: \"--time 5\"\n", optarg); - isTrue = false; - } - return true; - } - return false; -} - -static bool ParseOzOpt(int opt, char** argv, bool& isTrue) -{ - if (opt == 'o') { - struct stat buf; - size_t len = strnlen(optarg, MAX_OUTPUT_LEN); - if (len == MAX_OUTPUT_LEN || len < 1 || (stat(optarg, &buf) == 0 && (buf.st_mode & S_IFDIR))) { - fprintf(stderr, "Error: output file is illegal\n"); - isTrue = false; - } else { - g_outputFile = optarg; - } - return true; - } else if (opt == 'z') { - g_compress = true; - return true; - } - return false; -} - -static void ParseDefaultOpt(int opt, char** argv, int optIndex, bool& isTrue) -{ - if (opt == 0) { - ParseLongOpt(argv[0], optIndex, isTrue); - } else { - ShowHelp(argv[0]); - isTrue = false; - } -} - -static bool ParseOpt(int opt, char** argv, int optIndex) -{ - bool isTrue = true; - bool isFinish = ParseBOpt(opt, isTrue); - if (isFinish) { - return isTrue; - } - isFinish = ParseHltOpt(opt, argv, isTrue); - if (isFinish) { - return isTrue; - } - isFinish = ParseOzOpt(opt, argv, isTrue); - if (isFinish) { - return isTrue; - } - ParseDefaultOpt(opt, argv, optIndex, isTrue); - return isTrue; -} - -static void IsInvalidOpt(int argc, char** argv) -{ - for (int i = optind; i < argc; i++) { - if (!IsTagSupported(argv[i])) { - fprintf(stderr, "Error: \"%s\" is not support category on this device\n", argv[i]); - // tag is not support, exit - exit(-1); - } - } -} - -static bool HandleOpt(int argc, char** argv) -{ - // handle opt - bool isTrue = true; - int opt = 0; - int optionIndex = 0; - string shortOption = "b:c:hlo:t:z"; - int argcSize = argc; - while (isTrue && argcSize-- > 0) { - opt = getopt_long(argc, argv, shortOption.c_str(), g_longOptions, &optionIndex); - if (opt < 0) { - IsInvalidOpt(argc, argv); - break; - } - isTrue = ParseOpt(opt, argv, optionIndex); // parse Opt - } - return isTrue; -} - -static bool TruncateFile(const string& path) -{ - // rebuild file - int fd = creat((g_traceRootPath + path).c_str(), 0); - if (fd == -1) { - fprintf(stderr, "Error: clear %s, errno: %d\n", (g_traceRootPath + path).c_str(), errno); - return false; - } - close(fd); - fd = -1; - return true; -} - -static bool ClearTrace() -{ - // truncate file - return TruncateFile(TRACE_PATH); -} - -static bool StartTrace() -{ - // set trace_on 1 - if (!SetFtraceEnabled(TRACING_ON_PATH, true)) { - return false; - } - ClearTrace(); - printf("capturing trace...\n"); - fflush(stdout); - return true; -} - -static void WaitForTraceDone(void) -{ - // wait for traceDone - struct timespec ts = {0, 0}; - ts.tv_sec = g_traceDuration; - ts.tv_nsec = 0; - while ((nanosleep(&ts, &ts) == -1) && (errno == EINTR)) {} -} - -static bool StopTrace() -{ - return SetFtraceEnabled(TRACING_ON_PATH, false); -} - -static void DumpCompressedTrace(int traceFd, int outFd) -{ - // dump compressedTrace - z_stream zs { nullptr }; - int flush = Z_NO_FLUSH; - ssize_t bytesWritten; - ssize_t bytesRead; - if (memset_s(&zs, sizeof(zs), 0, sizeof(zs)) != 0) { - fprintf(stderr, "Error: zip stream buffer init failed\n"); - return; - } - // begin deflate init - int ret = deflateInit(&zs, Z_DEFAULT_COMPRESSION); - if (ret != Z_OK) { - fprintf(stderr, "Error: initializing zlib: %d\n", ret); - return; - } - std::unique_ptr in = std::make_unique(CHUNK_SIZE); - std::unique_ptr out = std::make_unique(CHUNK_SIZE); - if (!in || !out) { - fprintf(stderr, "Error: couldn't allocate buffers\n"); - return; - } - zs.next_out = reinterpret_cast(out.get()); - zs.avail_out = CHUNK_SIZE; - - do { - // no flush - if (zs.avail_in == 0 && flush == Z_NO_FLUSH) { - bytesRead = TEMP_FAILURE_RETRY(read(traceFd, in.get(), CHUNK_SIZE)); - if (bytesRead == 0) { - flush = Z_FINISH; - } else if (bytesRead == -1) { - fprintf(stderr, "Error: reading trace, errno: %d\n", errno); - break; - } else { - zs.next_in = reinterpret_cast(in.get()); - zs.avail_in = bytesRead; - } - } - if (zs.avail_out == 0) { - bytesWritten = TEMP_FAILURE_RETRY(write(outFd, out.get(), CHUNK_SIZE)); - if (bytesWritten < CHUNK_SIZE) { - fprintf(stderr, "Error: writing deflated trace, errno: %d\n", errno); - break; - } - zs.next_out = reinterpret_cast(out.get()); - zs.avail_out = CHUNK_SIZE; - } - // deflate - ret = deflate(&zs, flush); - if (flush == Z_FINISH && ret == Z_STREAM_END) { - size_t have = CHUNK_SIZE - zs.avail_out; - bytesWritten = TEMP_FAILURE_RETRY(write(outFd, out.get(), have)); - if (static_cast(bytesWritten) < have) { - fprintf(stderr, "Error: writing deflated trace, errno: %d\n", errno); - } - break; - } else if (ret != Z_OK) { - if (ret == Z_ERRNO) { - fprintf(stderr, "Error: deflate failed with errno %d\n", errno); - } else { - fprintf(stderr, "Error: deflate failed return %d\n", ret); - } - break; - } - } while (ret == Z_OK); - - // deflate end - ret = deflateEnd(&zs); - if (ret != Z_OK) { - fprintf(stderr, "error cleaning up zlib: %d\n", ret); - } -} - -static void DumpTrace(int outFd, const string& path) -{ - // standardize file paths - string resolvedPath = CanonicalizeSpecPath((g_traceRootPath + path).c_str()); - int traceFd = open(resolvedPath.c_str(), O_RDWR); - if (traceFd == -1) { - fprintf(stderr, "error opening %s, errno: %d\n", path.c_str(), errno); - return; - } - ssize_t bytesWritten; - ssize_t bytesRead; - if (g_compress) { - // dump and compress trace - DumpCompressedTrace(traceFd, outFd); - } else { - char buffer[BLOCK_SIZE]; - do { - bytesRead = TEMP_FAILURE_RETRY(read(traceFd, buffer, BLOCK_SIZE)); - if ((bytesRead == 0) || (bytesRead == -1)) { - break; - } - bytesWritten = TEMP_FAILURE_RETRY(write(outFd, buffer, bytesRead)); - } while (bytesWritten > 0); - } - // close fd - close(traceFd); -} - -static bool MarkOthersClockSync() -{ - constexpr unsigned int bufferSize = 128; // buffer size - char buffer[bufferSize] = { 0 }; - // standardize file paths - string resolvedPath = CanonicalizeSpecPath((g_traceRootPath + TRACE_MARKER_PATH).c_str()); - int fd = open(resolvedPath.c_str(), O_WRONLY); - if (fd == -1) { - fprintf(stderr, "Error: opening %s, errno: %d\n", TRACE_MARKER_PATH.c_str(), errno); - return false; - } - - struct timespec mts = {0, 0}; - struct timespec rts = {0, 0}; - if (clock_gettime(CLOCK_REALTIME, &rts) == -1) { // get timestamp from 1970s - fprintf(stderr, "Error: get realtime, errno: %d\n", errno); - close(fd); - return false; - } else if (clock_gettime(CLOCK_MONOTONIC, &mts) == -1) { // get timestamp from machine startup - fprintf(stderr, "Error: get parent_ts, errno: %d\n", errno); - close(fd); - return false; - } - constexpr unsigned int nanoSeconds = 1000000000; // seconds converted to nanoseconds - constexpr unsigned int nanoToMill = 1000000; // millisecond converted to nanoseconds - constexpr float nanoToSecond = 1000000000.0f; // consistent with the ftrace timestamp format - int len = snprintf_s(buffer, sizeof(buffer), sizeof(buffer) - 1, - "trace_event_clock_sync: realtime_ts=%" PRId64 "\n", - static_cast((rts.tv_sec * nanoSeconds + rts.tv_nsec) / nanoToMill)); - if (len < 0) { // entering data into buffer error - fprintf(stderr, "Error: entering data into buffer, errno: %d\n", errno); - close(fd); - return false; - } - if (write(fd, buffer, len) < 0) { - fprintf(stderr, "Warning: writing clock sync marker, errno: %d\n", errno); - fprintf(stderr, "the buffer is not enough, please increase the buffer\n"); - } - len = snprintf_s(buffer, sizeof(buffer), sizeof(buffer) - 1, "trace_event_clock_sync: parent_ts=%f\n", - static_cast(((static_cast(mts.tv_sec)) * nanoSeconds + mts.tv_nsec) / nanoToSecond)); - if (len < 0) { // entering data into buffer error - fprintf(stderr, "Error: entering data into buffer, errno: %d\n", errno); - close(fd); - return false; - } - if (write(fd, buffer, len) < 0) { - fprintf(stderr, "Warning: writing clock sync marker, errno: %d\n", errno); - fprintf(stderr, "the buffer is not enough, please increase the buffer\n"); - } - close(fd); - return true; -} - -static void InitDiskSupportTags() -{ - // disk support tags - g_tagMap["disk"] = { "disk", "Disk I/O", 0, KERNEL, { - { "events/f2fs/f2fs_sync_file_enter/enable" }, - { "events/f2fs/f2fs_sync_file_exit/enable" }, - { "events/f2fs/f2fs_write_begin/enable" }, - { "events/f2fs/f2fs_write_end/enable" }, - { "events/ext4/ext4_da_write_begin/enable" }, - { "events/ext4/ext4_da_write_end/enable" }, - { "events/ext4/ext4_sync_file_enter/enable" }, - { "events/ext4/ext4_sync_file_exit/enable" }, - { "events/block/block_rq_issue/enable" }, - { "events/block/block_rq_complete/enable" }, - }}; - g_tagMap["mmc"] = { "mmc", "eMMC commands", 0, KERNEL, { - { "events/mmc/enable" }, - }}; - g_tagMap["ufs"] = { "ufs", "UFS commands", 0, KERNEL, { - { "events/ufs/enable" }, - }}; -} - -static void InitHardwareSupportTags() -{ - // hardware support tags - g_tagMap["irq"] = { "irq", "IRQ Events", 0, KERNEL, { - { "events/irq/enable" }, - { "events/ipi/enable" }, - }}; - g_tagMap["irqoff"] = { "irqoff", "IRQ-disabled code section tracing", 0, KERNEL, { - { "events/preemptirq/irq_enable/enable" }, - { "events/preemptirq/irq_disable/enable" }, - }}; - InitDiskSupportTags(); - g_tagMap["i2c"] = { "i2c", "I2C Events", 0, KERNEL, { - { "events/i2c/enable" }, - { "events/i2c/i2c_read/enable" }, - { "events/i2c/i2c_write/enable" }, - { "events/i2c/i2c_result/enable" }, - { "events/i2c/i2c_reply/enable" }, - { "events/i2c/smbus_read/enable" }, - { "events/i2c/smbus_write/enable" }, - { "events/i2c/smbus_result/enable" }, - { "events/i2c/smbus_reply/enable" }, - }}; - g_tagMap["regulators"] = { "regulators", "Voltage and Current Regulators", 0, KERNEL, { - { "events/regulator/enable" }, - }}; - g_tagMap["membus"] = { "membus", "Memory Bus Utilization", 0, KERNEL, { - { "events/memory_bus/enable" }, - }}; -} - -static void InitCpuSupportTags() -{ - // cpu support tags - g_tagMap["freq"] = { "freq", "CPU Frequency", 0, KERNEL, { - { "events/power/cpu_frequency/enable" }, - { "events/power/clock_set_rate/enable" }, - { "events/power/clock_disable/enable" }, - { "events/power/clock_enable/enable" }, - { "events/clk/clk_set_rate/enable" }, - { "events/clk/clk_disable/enable" }, - { "events/clk/clk_enable/enable" }, - { "events/power/cpu_frequency_limits/enable" }, - }}; - g_tagMap["idle"] = { "idle", "CPU Idle", 0, KERNEL, { - { "events/power/cpu_idle/enable" }, - }}; - g_tagMap["load"] = { "load", "CPU Load", 0, KERNEL, { - { "events/cpufreq_interactive/enable" }, - }}; -} - -static void InitKernelSupportTags() -{ - // kernel support tags - g_tagMap["sched"] = { "sched", "CPU Scheduling", 0, KERNEL, { - { "events/sched/sched_switch/enable" }, - { "events/sched/sched_wakeup/enable" }, - { "events/sched/sched_wakeup_new/enable" }, - { "events/sched/sched_waking/enable" }, - { "events/sched/sched_blocked_reason/enable" }, - { "events/sched/sched_pi_setprio/enable" }, - { "events/sched/sched_process_exit/enable" }, - { "events/cgroup/enable" }, - { "events/oom/oom_score_adj_update/enable" }, - { "events/task/task_newtask/enable" }, - { "events/task/task_rename/enable" }, - }}; - g_tagMap["preemptoff"] = { "preemptoff", "Preempt-disabled code section tracing", 0, KERNEL, { - { "events/preemptirq/preempt_enable/enable" }, - { "events/preemptirq/preempt_disable/enable" }, - }}; - - g_tagMap["binder"] = { "binder", "Binder kernel Info", 0, KERNEL, { - { "events/binder/binder_transaction/enable" }, - { "events/binder/binder_transaction_received/enable" }, - { "events/binder/binder_transaction_alloc_buf/enable" }, - { "events/binder/binder_set_priority/enable" }, - { "events/binder/binder_lock/enable" }, - { "events/binder/binder_unlock/enable" }, - { "events/binder/binder_locked/enable" }, - }}; - - g_tagMap["sync"] = { "sync", "Synchronization", 0, KERNEL, { - // linux kernel > 4.9 - { "events/dma_fence/enable" }, - }}; - g_tagMap["workq"] = { "workq", "Kernel Workqueues", 0, KERNEL, { - { "events/workqueue/enable" }, - }}; - g_tagMap["memreclaim"] = { "memreclaim", "Kernel Memory Reclaim", 0, KERNEL, { - { "events/vmscan/mm_vmscan_direct_reclaim_end/enable" }, - { "events/vmscan/mm_vmscan_direct_reclaim_begin/enable" }, - { "events/vmscan/mm_vmscan_kswapd_wake/enable" }, - { "events/vmscan/mm_vmscan_kswapd_sleep/enable" }, - { "events/lowmemorykiller/enable" }, - }}; - g_tagMap["pagecache"] = { "pagecache", "Page cache", 0, KERNEL, { - { "events/filemap/enable" }, - }}; - g_tagMap["memory"] = { "memory", "Memory", 0, KERNEL, { - { "events/kmem/rss_stat/enable" }, - { "events/kmem/ion_heap_shrink/enable" }, - { "events/kmem/ion_heap_grow/enable" }, - }}; - InitCpuSupportTags(); - InitHardwareSupportTags(); -} - -static void InitOtherUserTags() -{ - g_tagMap["dhfwk"] = { "dhfwk", "Distributed Hardware FWK", HITRACE_TAG_DISTRIBUTED_HARDWARE_FWK, USER, {}}; - g_tagMap["account"] = { "account", "Account Manager", HITRACE_TAG_ACCOUNT_MANAGER, USER, {}}; - g_tagMap["daudio"] = { "daudio", "Distributed Audio", HITRACE_TAG_DISTRIBUTED_AUDIO, USER, {}}; - g_tagMap["dscreen"] = { "dscreen", "Distributed Screen", HITRACE_TAG_DISTRIBUTED_SCREEN, USER, {}}; - g_tagMap["dcamera"] = { "dcamera", "Distributed Camera", HITRACE_TAG_DISTRIBUTED_CAMERA, USER, {}}; - g_tagMap["dinput"] = { "dinput", "Distributed Input", HITRACE_TAG_DISTRIBUTED_INPUT, USER, {}}; - g_tagMap["devicemanager"] = { "devicemanager", "Device Manager", HITRACE_TAG_DEVICE_MANAGER, USER, {}}; - g_tagMap["deviceprofile"] = { "deviceprofile", "Device Profile", HITRACE_TAG_DEVICE_PROFILE, USER, {}}; - g_tagMap["dsched"] = { "dsched", "Distributed Schedule", HITRACE_TAG_DISTRIBUTED_SCHEDULE, USER, {}}; - g_tagMap["huks"] = { "huks", "Universal KeyStore", HITRACE_TAG_HUKS, USER, {}}; - g_tagMap["dlpcre"] = { "dlpcre", "Dlp Credential Service", HITRACE_TAG_DLP_CREDENTIAL, USER, {}}; - g_tagMap["app"] = { "app", "APP Module", HITRACE_TAG_APP, USER, {}}; - g_tagMap["samgr"] = { "samgr", "samgr", HITRACE_TAG_SAMGR, USER, {}}; - g_tagMap["zbinder"] = { "zbinder", "OpenHarmony binder communication", 0, KERNEL, { - { "events/zbinder/enable" }, - }}; - g_tagMap["gresource"] = { "gresource", "Global Resource Manager", HITRACE_TAG_GLOBAL_RESMGR, USER, {}}; - g_tagMap["power"] = { "power", "Power Manager", HITRACE_TAG_POWER, USER, {}}; - g_tagMap["filemanagement"] = { "filemanagement", "filemanagement", HITRACE_TAG_FILEMANAGEMENT, USER, {}}; - g_tagMap["dslm"] = {"dslm", "device security level", HITRACE_TAG_DLSM, USER, {}}; - g_tagMap["nweb"] = {"nweb", "NWEB Module", HITRACE_TAG_NWEB, USER, {}}; - g_tagMap["useriam"] = {"useriam", "useriam", HITRACE_TAG_USERIAM, USER, {}}; - g_tagMap["net"] = {"net", "net", HITRACE_TAG_NET, USER, {}}; - g_tagMap["accesscontrol"] = {"accesscontrol", "Access Control Module", HITRACE_TAG_ACCESS_CONTROL, USER, {}}; - g_tagMap["interconn"] = {"interconn", "Interconnection subsystem", HITRACE_TAG_INTERCONNECTION, USER, {}}; - g_tagMap["commonlibrary"] = {"commonlibrary", "Commonlibrary subsystem", HITRACE_TAG_COMMONLIBRARY, USER, {}}; - g_tagMap["musl"] = {"musl", "Musl Module", HITRACE_TAG_MUSL, USER, {}}; - g_tagMap["ffrt"] = {"ffrt", "Ffrt Tasks", HITRACE_TAG_FFRT, USER, {}}; - g_tagMap["virse"] = {"virse", "Virtualization Service", HITRACE_TAG_VIRSE, USER, {}}; -} - -static void InitAllSupportTags() -{ - // OHOS - g_tagMap["ability"] = { "ability", "Ability Manager", HITRACE_TAG_ABILITY_MANAGER, USER, {}}; - g_tagMap["ohos"] = { "ohos", "OpenHarmony", HITRACE_TAG_OHOS, USER, {}}; - g_tagMap["zcamera"] = { "zcamera", "OpenHarmony Camera Module", HITRACE_TAG_ZCAMERA, USER, {}}; - g_tagMap["zmedia"] = { "zmedia", "OpenHarmony Media Module", HITRACE_TAG_ZMEDIA, USER, {}}; - g_tagMap["zimage"] = { "zimage", "OpenHarmony Image Module", HITRACE_TAG_ZIMAGE, USER, {}}; - g_tagMap["zaudio"] = { "zaudio", "OpenHarmony Audio Module", HITRACE_TAG_ZAUDIO, USER, {}}; - g_tagMap["distributeddatamgr"] = { "distributeddatamgr", "Distributed Data Manager", - HITRACE_TAG_DISTRIBUTEDDATA, USER, {}}; - g_tagMap["mdfs"] = { "mdfs", "Mobile Distributed File System", HITRACE_TAG_MDFS, USER, {}}; - g_tagMap["graphic"] = { "graphic", "Graphic Module", HITRACE_TAG_GRAPHIC_AGP, USER, {}}; - g_tagMap["ace"] = { "ace", "ACE development framework", HITRACE_TAG_ACE, USER, {}}; - g_tagMap["notification"] = { "notification", "Notification Module", HITRACE_TAG_NOTIFICATION, USER, {}}; - g_tagMap["multimodalinput"] = { "multimodalinput", "Multimodal Input Module", - HITRACE_TAG_MULTIMODALINPUT, USER, {}}; - g_tagMap["misc"] = { "misc", "Misc Module", HITRACE_TAG_MISC, USER, {}}; - g_tagMap["sensors"] = { "sensors", "Sensors Module", HITRACE_TAG_SENSORS, USER, {}}; - g_tagMap["msdp"] = { "msdp", "Multimodal Sensor Data Platform", HITRACE_TAG_MSDP, USER, {}}; - g_tagMap["dsoftbus"] = { "dsoftbus", "Distributed Softbus", HITRACE_TAG_DSOFTBUS, USER, {}}; - g_tagMap["rpc"] = { "rpc", "RPC and IPC", HITRACE_TAG_RPC, USER, {}}; - g_tagMap["ark"] = { "ark", "ARK Module", HITRACE_TAG_ARK, USER, {}}; - g_tagMap["window"] = { "window", "Window Manager", HITRACE_TAG_WINDOW_MANAGER, USER, {}}; - g_tagMap["accessibility"] = { "accessibility", "Accessibility Manager", - HITRACE_TAG_ACCESSIBILITY_MANAGER, USER, {}}; - InitOtherUserTags(); - - // Kernel os - InitKernelSupportTags(); -} - -static void InterruptExit(int signo) -{ - _exit(-1); -} - -static void DumpTrace(bool& isTrue) -{ - if (isTrue && g_traceDump) { - int outFd = STDOUT_FILENO; - if (g_outputFile.size() > 0) { - printf("write trace to %s\n", g_outputFile.c_str()); - string resolvedPath = CanonicalizeSpecPath(g_outputFile.c_str()); - outFd = open(resolvedPath.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - } - if (outFd == -1) { - fprintf(stderr, "Failed to open file '%s', err=%d", g_outputFile.c_str(), errno); - isTrue = false; - } else { - dprintf(outFd, "TRACE:\n"); - DumpTrace(outFd, TRACE_PATH); - if (outFd != STDOUT_FILENO) { - close(outFd); - outFd = -1; - } - } - ClearTrace(); - } -} - -int main(int argc, char **argv) -{ - setgid(SHELL_UID); - (void)signal(SIGKILL, InterruptExit); - (void)signal(SIGINT, InterruptExit); - - if (!IsTraceMounted()) { - exit(-1); - } - - InitAllSupportTags(); - - if (!HandleOpt(argc, argv)) { - exit(-1); - } - - if (g_traceStart != START_NONE) { - if (!SetKernelSpaceSettings()) { - ClearKernelSpaceSettings(); - exit(-1); - } - } - - bool isTrue = true; - if (g_traceStart != START_NONE) { - isTrue = isTrue && StartTrace(); - if (!SetUserSpaceSettings()) { - ClearKernelSpaceSettings(); - ClearUserSpaceSettings(); - exit(-1); - } - if (g_traceStart == START_ASYNC) { - return isTrue ? 0 : -1; - } - WaitForTraceDone(); - } - - // following is dump and stop handling - isTrue = isTrue && MarkOthersClockSync(); - - if (g_traceStop) { - // clear user tags first and sleep a little to let apps already be notified. - ClearUserSpaceSettings(); - std::this_thread::sleep_for(std::chrono::milliseconds(WAIT_MILLISECONDS)); - isTrue = isTrue && StopTrace(); - } - DumpTrace(isTrue); - if (g_traceStop) { - // clear kernel setting including clock type after dump(MUST) and tracing_on is off. - ClearKernelSpaceSettings(); - } - return isTrue ? 0 : -1; -} diff --git a/bin/src/bytrace_osal.cpp b/bin/src/bytrace_osal.cpp deleted file mode 100644 index 20ac96d..0000000 --- a/bin/src/bytrace_osal.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "bytrace_osal.h" -#include "parameters.h" - -namespace OHOS { -namespace Developtools { -namespace BytraceOsal { -bool SetPropertyInner(const std::string& property, const std::string& value) -{ - bool result = OHOS::system::SetParameter(property, value); - if (!result) { - fprintf(stderr, "Error: Failed to set %s property.\n", value.c_str()); - } - return result; -} - -std::string GetPropertyInner(const std::string& property, const std::string& value) -{ - return OHOS::system::GetParameter(property, value); -} - -bool RefreshBinderServices(void) -{ - return true; -} - -bool RefreshHalServices(void) -{ - return true; -} -} -} -} diff --git a/bundle.json b/bundle.json index 238fb4d..07a1ecf 100644 --- a/bundle.json +++ b/bundle.json @@ -19,21 +19,15 @@ "ram": "720KB", "deps": { "components": [ - "c_utils", "hitrace", "hilog", "init", "ipc", "napi" - ], - "third_party": [ - "zlib" ] }, "build": { "sub_component": [ - "//developtools/bytrace/bin:bytrace_target", - "//developtools/bytrace/bin:bytrace.cfg", "//developtools/bytrace/interfaces/kits:jsapi_kits_target" ], "inner_kits": [ diff --git a/interfaces/kits/js/napi/bytrace_napi_common.cpp b/interfaces/kits/js/napi/bytrace_napi_common.cpp index fc4ecc6..c1f80e4 100644 --- a/interfaces/kits/js/napi/bytrace_napi_common.cpp +++ b/interfaces/kits/js/napi/bytrace_napi_common.cpp @@ -22,13 +22,13 @@ using namespace OHOS::HiviewDFX; namespace { -constexpr int FIRST_ARG_INDEX = 0; -constexpr int SECOND_ARG_INDEX = 1; -constexpr int THIRD_ARG_INDEX = 2; -constexpr int ARGC_NUMBER_TWO = 2; -constexpr int ARGC_NUMBER_THREE = 3; -constexpr uint64_t HITRACE_METER_TAG = 0xD002D33; -constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HITRACE_METER_TAG, "HITRACE_METER_JS"}; +constexpr int FIRST_ARGC_INDEX = 0; +constexpr int SECOND_ARGC_INDEX = 1; +constexpr int THIRD_ARGC_INDEX = 2; +constexpr int ARGC_NUMBER_TWICE = 2; +constexpr int ARGC_NUMBER_TRIPLE = 3; +constexpr uint64_t HITRACE_METER_LABEL = 0xD002D33; +constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HITRACE_METER_LABEL, "HITRACE_METER_JS"}; using STR_NUM_PARAM_FUNC = std::function; napi_value ParseParams(napi_env& env, napi_callback_info& info, size_t& argc, napi_value* argv) @@ -43,11 +43,11 @@ bool TypeCheck(const napi_env& env, const napi_value& value, const napi_valuetyp napi_valuetype valueType; napi_status status = napi_typeof(env, value, &valueType); if (status != napi_ok) { - HiLog::Error(LABEL, "Failed to get the type of the argument."); + HiLog::Error(LABEL, "Failed to get the type of the argument"); return false; } if (valueType != expectType) { - HiLog::Error(LABEL, "Type of the parameter is invalid."); + HiLog::Error(LABEL, "Type of the parameter is invalid"); return false; } return true; @@ -56,10 +56,10 @@ bool TypeCheck(const napi_env& env, const napi_value& value, const napi_valuetyp void GetStringParam(const napi_env& env, const napi_value& value, std::string& dest) { // parsing the value of string type into dest - constexpr int nameMaxSize = 1024; - char buf[nameMaxSize] = {0}; + constexpr int maxNameSize = 1024; + char buf[maxNameSize] = {0}; size_t len = 0; - napi_get_value_string_utf8(env, value, buf, nameMaxSize, &len); + napi_get_value_string_utf8(env, value, buf, maxNameSize, &len); dest = std::string {buf}; } @@ -76,15 +76,15 @@ bool ParseStringParam(const napi_env& env, const napi_value& value, std::string& dest = std::to_string(destI64); return true; } - if (TypeCheck(env, value, napi_undefined)) { - dest = "undefined"; - return true; - } // if it's napi_null, then handle it as 'null' if (TypeCheck(env, value, napi_null)) { dest = "null"; return true; } + if (TypeCheck(env, value, napi_undefined)) { + dest = "undefined"; + return true; + } return false; } @@ -127,18 +127,18 @@ bool ParseNullParam(const napi_env& env, const napi_value& value) bool JsStrNumParamsFunc(napi_env& env, napi_callback_info& info, STR_NUM_PARAM_FUNC nativeCall) { - size_t argc = ARGC_NUMBER_TWO; - napi_value argv[ARGC_NUMBER_TWO]; + size_t argc = ARGC_NUMBER_TWICE; + napi_value argv[ARGC_NUMBER_TWICE]; ParseParams(env, info, argc, argv); - if (argc != ARGC_NUMBER_TWO) { + if (argc != ARGC_NUMBER_TWICE) { HiLog::Error(LABEL, "Wrong number of parameters."); return false; } std::string name; - if (!ParseStringParam(env, argv[FIRST_ARG_INDEX], name)) { + if (!ParseStringParam(env, argv[FIRST_ARGC_INDEX], name)) { return false; } - if (!nativeCall(name, argv[SECOND_ARG_INDEX])) { + if (!nativeCall(name, argv[SECOND_ARGC_INDEX])) { return false; } return true; @@ -147,27 +147,27 @@ bool JsStrNumParamsFunc(napi_env& env, napi_callback_info& info, STR_NUM_PARAM_F static napi_value JSTraceStart(napi_env env, napi_callback_info info) { - size_t argc = ARGC_NUMBER_THREE; - napi_value argv[ARGC_NUMBER_THREE]; + size_t argc = ARGC_NUMBER_TRIPLE; + napi_value argv[ARGC_NUMBER_TRIPLE]; ParseParams(env, info, argc, argv); - NAPI_ASSERT(env, argc >= ARGC_NUMBER_TWO, "Wrong number of arguments"); - if (argc < ARGC_NUMBER_TWO) { + NAPI_ASSERT(env, argc >= ARGC_NUMBER_TWICE, "Wrong number of arguments"); + if (argc < ARGC_NUMBER_TWICE) { HiLog::Error(LABEL, "Wrong number of parameters."); } std::string name; - if (!ParseStringParam(env, argv[FIRST_ARG_INDEX], name)) { + if (!ParseStringParam(env, argv[FIRST_ARGC_INDEX], name)) { return nullptr; } int taskId = 0; - if (!ParseInt32Param(env, argv[SECOND_ARG_INDEX], taskId)) { + if (!ParseInt32Param(env, argv[SECOND_ARGC_INDEX], taskId)) { return nullptr; } - if (argc == ARGC_NUMBER_TWO) { + if (argc == ARGC_NUMBER_TWICE) { StartAsyncTrace(HITRACE_TAG_APP, name, taskId); } else { double limit = 0.0; - if (!ParseDoubleParam(env, argv[THIRD_ARG_INDEX], limit) && !ParseUndefinedParam(env, argv[THIRD_ARG_INDEX]) && - !ParseNullParam(env, argv[THIRD_ARG_INDEX])) { + if (!ParseDoubleParam(env, argv[THIRD_ARGC_INDEX], limit) && !ParseUndefinedParam(env, argv[THIRD_ARGC_INDEX]) && + !ParseNullParam(env, argv[THIRD_ARGC_INDEX])) { HiLog::Error(LABEL, "the third param is not number, not undefined, not null."); return nullptr; } @@ -178,11 +178,11 @@ static napi_value JSTraceStart(napi_env env, napi_callback_info info) static napi_value JSTraceFinish(napi_env env, napi_callback_info info) { - size_t argc = ARGC_NUMBER_TWO; - napi_value argv[ARGC_NUMBER_TWO]; + size_t argc = ARGC_NUMBER_TWICE; + napi_value argv[ARGC_NUMBER_TWICE]; napi_value thisVar; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); - NAPI_ASSERT(env, argc >= ARGC_NUMBER_TWO, "Wrong number of arguments"); + NAPI_ASSERT(env, argc >= ARGC_NUMBER_TWICE, "Wrong number of arguments"); (void)JsStrNumParamsFunc(env, info, [&env] (std::string name, napi_value& nValue) -> bool { int taskId = 0; if (!ParseInt32Param(env, nValue, taskId)) { @@ -196,11 +196,11 @@ static napi_value JSTraceFinish(napi_env env, napi_callback_info info) static napi_value JSTraceCount(napi_env env, napi_callback_info info) { - size_t argc = ARGC_NUMBER_TWO; - napi_value argv[ARGC_NUMBER_TWO]; + size_t argc = ARGC_NUMBER_TWICE; + napi_value argv[ARGC_NUMBER_TWICE]; napi_value thisVar; NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); - NAPI_ASSERT(env, argc == ARGC_NUMBER_TWO, "Wrong number of arguments"); + NAPI_ASSERT(env, argc == ARGC_NUMBER_TWICE, "Wrong number of arguments"); (void)JsStrNumParamsFunc(env, info, [&env] (std::string name, napi_value& nValue) -> bool { int64_t count = 0; if (!ParseInt64Param(env, nValue, count)) { -- Gitee From 3750c0fb8421be188f5f007544ec6f2040e9e6fd Mon Sep 17 00:00:00 2001 From: chenwei Date: Mon, 4 Sep 2023 17:15:08 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8F=98=E9=87=8FTHIRD=5FARG=5FINDEX?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=88=90THIRD=5FARGC=5FINDEX=E4=BB=A5?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E8=B6=85=E5=87=BA120=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E7=9A=84=E8=A1=8C=E5=AE=BD=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenwei --- interfaces/kits/js/napi/bytrace_napi_common.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/kits/js/napi/bytrace_napi_common.cpp b/interfaces/kits/js/napi/bytrace_napi_common.cpp index c1f80e4..5d9b386 100644 --- a/interfaces/kits/js/napi/bytrace_napi_common.cpp +++ b/interfaces/kits/js/napi/bytrace_napi_common.cpp @@ -166,8 +166,8 @@ static napi_value JSTraceStart(napi_env env, napi_callback_info info) StartAsyncTrace(HITRACE_TAG_APP, name, taskId); } else { double limit = 0.0; - if (!ParseDoubleParam(env, argv[THIRD_ARGC_INDEX], limit) && !ParseUndefinedParam(env, argv[THIRD_ARGC_INDEX]) && - !ParseNullParam(env, argv[THIRD_ARGC_INDEX])) { + if (!ParseDoubleParam(env, argv[THIRD_ARGC_INDEX], limit) && + !ParseUndefinedParam(env, argv[THIRD_ARGC_INDEX]) && !ParseNullParam(env, argv[THIRD_ARGC_INDEX])) { HiLog::Error(LABEL, "the third param is not number, not undefined, not null."); return nullptr; } -- Gitee