| OLD | NEW |
| 1 #!/bin/bash | 1 #!/bin/bash |
| 2 | 2 |
| 3 # Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. | 3 # Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. |
| 4 # | 4 # |
| 5 # Use of this source code is governed by a BSD-style license | 5 # Use of this source code is governed by a BSD-style license |
| 6 # that can be found in the LICENSE file in the root of the source | 6 # that can be found in the LICENSE file in the root of the source |
| 7 # tree. An additional intellectual property rights grant can be found | 7 # tree. An additional intellectual property rights grant can be found |
| 8 # in the file PATENTS. All contributing project authors may | 8 # in the file PATENTS. All contributing project authors may |
| 9 # be found in the AUTHORS file in the root of the source tree. | 9 # be found in the AUTHORS file in the root of the source tree. |
| 10 # | 10 # |
| 11 # Usage: | 11 # Usage: |
| 12 # | 12 # |
| 13 # It is assumed that a release build of AppRTCMobile exists and has been | 13 # It is assumed that a release build of AppRTCMobile exists and has been |
| 14 # installed on an Android device which supports USB debugging. | 14 # installed on an Android device which supports USB debugging. |
| 15 # | 15 # |
| 16 # Source this script once from the WebRTC src/ directory and resolve any | 16 # Source this script once from the WebRTC src/ directory and resolve any |
| 17 # reported issues. Add relative path to build directory as parameter. | 17 # reported issues. Add relative path to build directory as parameter. |
| 18 # Required tools will be downloaded if they don't already exist. | 18 # Required tools will be downloaded if they don't already exist. |
| 19 # | 19 # |
| 20 # Once all tests are passed, a list of available functions will be given. | 20 # Once all tests are passed, a list of available functions will be given. |
| 21 # Use these functions to do the actual profiling and visualization of the | 21 # Use these functions to do the actual profiling and visualization of the |
| 22 # results. | 22 # results. |
| 23 # | 23 # |
| 24 # Note that, using a rooted device is recommended since it allows us to | 24 # Note that, using a rooted device is recommended since it allows us to |
| 25 # resolve kernel symbols (kallsyms) as well. | 25 # resolve kernel symbols (kallsyms) as well. |
| 26 # | 26 # |
| 27 # Example usage: | 27 # Example usage: |
| 28 # | 28 # |
| 29 # > . tools-webrtc/android/profiling/perf_setup.sh out/Release | 29 # > . tools_webrtc/android/profiling/perf_setup.sh out/Release |
| 30 # > perf_record 120 | 30 # > perf_record 120 |
| 31 # > flame_graph | 31 # > flame_graph |
| 32 # > plot_flame_graph | 32 # > plot_flame_graph |
| 33 # > perf_cleanup | 33 # > perf_cleanup |
| 34 | 34 |
| 35 if [ -n "$ZSH_VERSION" ]; then | 35 if [ -n "$ZSH_VERSION" ]; then |
| 36 # Running inside zsh. | 36 # Running inside zsh. |
| 37 SCRIPT_PATH="${(%):-%N}" | 37 SCRIPT_PATH="${(%):-%N}" |
| 38 else | 38 else |
| 39 # Running inside something else (most likely bash). | 39 # Running inside something else (most likely bash). |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 copy_native_shared_library_to_symbol_cache | 402 copy_native_shared_library_to_symbol_cache |
| 403 ok "native library copied to ${SYMBOL_DIR}/data/app/${APP_NAME}" | 403 ok "native library copied to ${SYMBOL_DIR}/data/app/${APP_NAME}" |
| 404 | 404 |
| 405 # Verify that the application is installed on the device. | 405 # Verify that the application is installed on the device. |
| 406 if ! app_is_installed "${APP_NAME}"; then | 406 if ! app_is_installed "${APP_NAME}"; then |
| 407 error "${APP_NAME} is not installed on the device" | 407 error "${APP_NAME} is not installed on the device" |
| 408 return 1 | 408 return 1 |
| 409 fi | 409 fi |
| 410 ok "${APP_NAME} is installed on the device" | 410 ok "${APP_NAME} is installed on the device" |
| 411 | 411 |
| 412 # Download simpleperf to <src>/tools-webrtc/android/profiling/simpleperf/. | 412 # Download simpleperf to <src>/tools_webrtc/android/profiling/simpleperf/. |
| 413 # Cloning will only take place if the target does not already exist. | 413 # Cloning will only take place if the target does not already exist. |
| 414 # The PATH variable will also be updated. | 414 # The PATH variable will also be updated. |
| 415 # TODO(henrika): would it be better to use a target outside the WebRTC repo? | 415 # TODO(henrika): would it be better to use a target outside the WebRTC repo? |
| 416 local simpleperf_dir="${SCRIPT_DIR}/simpleperf" | 416 local simpleperf_dir="${SCRIPT_DIR}/simpleperf" |
| 417 if is_not_dir "${simpleperf_dir}"; then | 417 if is_not_dir "${simpleperf_dir}"; then |
| 418 echo "Dowloading simpleperf..." | 418 echo "Dowloading simpleperf..." |
| 419 git clone https://android.googlesource.com/platform/prebuilts/simpleperf \ | 419 git clone https://android.googlesource.com/platform/prebuilts/simpleperf \ |
| 420 "${simpleperf_dir}" | 420 "${simpleperf_dir}" |
| 421 chmod u+x "${simpleperf_dir}/report_sample.py" | 421 chmod u+x "${simpleperf_dir}/report_sample.py" |
| 422 fi | 422 fi |
| (...skipping 15 matching lines...) Expand all Loading... |
| 438 error "failed to install simpleperf on the device" | 438 error "failed to install simpleperf on the device" |
| 439 return 1 | 439 return 1 |
| 440 fi | 440 fi |
| 441 ok "simpleperf is installed on the device" | 441 ok "simpleperf is installed on the device" |
| 442 | 442 |
| 443 # Refresh the symbol cache and read kernal symbols from device if not | 443 # Refresh the symbol cache and read kernal symbols from device if not |
| 444 # already done. | 444 # already done. |
| 445 perf_update | 445 perf_update |
| 446 ok "symbol cache is updated" | 446 ok "symbol cache is updated" |
| 447 | 447 |
| 448 # Download Flame Graph to <src>/tools-webrtc/android/profiling/flamegraph/. | 448 # Download Flame Graph to <src>/tools_webrtc/android/profiling/flamegraph/. |
| 449 # Cloning will only take place if the target does not already exist. | 449 # Cloning will only take place if the target does not already exist. |
| 450 # The PATH variable will also be updated. | 450 # The PATH variable will also be updated. |
| 451 # TODO(henrika): would it be better to use a target outside the WebRTC repo? | 451 # TODO(henrika): would it be better to use a target outside the WebRTC repo? |
| 452 local flamegraph_dir="${SCRIPT_DIR}/flamegraph" | 452 local flamegraph_dir="${SCRIPT_DIR}/flamegraph" |
| 453 if is_not_dir "${flamegraph_dir}"; then | 453 if is_not_dir "${flamegraph_dir}"; then |
| 454 echo "Dowloading Flame Graph visualization tool..." | 454 echo "Dowloading Flame Graph visualization tool..." |
| 455 git clone https://github.com/brendangregg/FlameGraph.git "${flamegraph_dir}" | 455 git clone https://github.com/brendangregg/FlameGraph.git "${flamegraph_dir}" |
| 456 fi | 456 fi |
| 457 path_add "${flamegraph_dir}" | 457 path_add "${flamegraph_dir}" |
| 458 ok "${flamegraph_dir}" is added to PATH | 458 ok "${flamegraph_dir}" is added to PATH |
| 459 | 459 |
| 460 print_function_help | 460 print_function_help |
| 461 | 461 |
| 462 cleanup | 462 cleanup |
| 463 | 463 |
| 464 return 0 | 464 return 0 |
| 465 } | 465 } |
| 466 | 466 |
| 467 # Only call main() if proper input parameter has been provided. | 467 # Only call main() if proper input parameter has been provided. |
| 468 if is_set $BUILD_DIR; then | 468 if is_set $BUILD_DIR; then |
| 469 main "$@" | 469 main "$@" |
| 470 fi | 470 fi |
| OLD | NEW |