美文网首页
Camera 冷启动阶段分解

Camera 冷启动阶段分解

作者: 程序员Android1 | 来源:发表于2020-09-27 19:47 被阅读0次

一、Camx trace 调试开关设置
二、Camx 调试开关设置懒人脚本
三、Camera 冷启动阶段分解分析

一、Camx trace 调试开关设置

1.设置 camxoverridesettings trace开关

    adb  root
    adb  remount
    adb  shell "echo traceGroupsEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
    adb  shell "echo traceErrorEnable=TRUE     >> /vendor/etc/camera/camxoverridesettings.txt"
    adb  shell "echo traceOutputEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
    adb reboot

2. 重启后设置开启camx trace 开关

因为 camxoverridesettings 只有重启之后可以生效,所以重启完成后需要开启trace 开关,既可以开始抓取Camera的 Systrace。

 adb shell "echo 1 > d/tracing/events/camera/enable"

二、Camx 调试开关设置懒人脚本

下面脚本主要用来设置Camx debug trace 开关的,内容如下:

#bin/bash

# setting camxoverridesettings prop
funSetCamxoverridesettings(){

    adb  shell "echo traceGroupsEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
    adb  shell "echo traceErrorEnable=TRUE     >> /vendor/etc/camera/camxoverridesettings.txt"
    adb  shell "echo traceOutputEnable=0x10080 >> /vendor/etc/camera/camxoverridesettings.txt"
}

# setting CameraTrace prop
funEnableCameraTrace(){

    adb shell "echo 1 > d/tracing/events/camera/enable"
}

# cat setting result
funCatCameraProp(){
    echo "--------------------------------------------"
    echo "please check Camera trace prop is set sucess"
    echo "--------------------------------------------"
    echo "camxoverridesettings prop :*****************"
    adb shell cat /vendor/etc/camera/camxoverridesettings.txt
    echo "tracing prop :******************************"
    adb shell cat d/tracing/events/camera/enable
}

# it's only used in debug version
funRemountDevice(){
    adb root
    adb remount
    
    if [ $? -eq 0 ]; then

     echo "remount success"
     funSetCamxoverridesettings
     adb shell cat  /vendor/etc/camera/camxoverridesettings.txt

     for((i=0;$i<=10;i++))
         do
         sleep 1
         echo "waring !!! the phone will reboot after $i s"
         done

     adb reboot
    
    for((i=0;$i<=50;i++))
         do
         sleep 1
         echo "waiting phone is reboot after  $i s "
         done
         adb root
         adb remount
         funEnableCameraTrace
         funCatCameraProp
    else
    
     echo "remount failed,please remount the devices"
     
    fi
}


# main 
funRemountDevice
echo "input any num exit "
read num

查看Camera 相关进程

测试后查看下Camera 相关进程,有助于后续Systrace 有选择的分析查看。

C:\Users\ProgramAndroid>adb shell  ps | findstr camera
cameraserver   810     1 4396356 124740 0                   0 S android.hardware.camera.provider@2.4-service_64
cameraserver   807     1   37792   3240 0                   0 S vendor.oneplus.hardware.camera@1.0-service
cameraserver  1418     1   69628  11096 0                   0 S cameraserver
system        6519   683 5221532  33168 0                   0 S com.oneplus.camera.service
u0_a130       9163   683 6052676  46388 0                   0 S com.oneplus.camera.pictureprocessing
system       10641   683 5594508  84672 0                   0 S com.wingtech.cameraCalibration
u0_a138      12467   683 7046152 135544 0                   0 S com.oneplus.camera

三、Camera 冷启动阶段分解分析

1. 从 TouchUp 到 ActivityStart 耗时

从Touch UP 到 ActivityStart 阶段,系统创建App进程耗时:

  • 1.PostFork 耗时需要排查 Zygote.java 代码

Zygote.java frameworks\base\core\java\com\android\internal\os

    1. ZygoteInit 耗时需要排查ZygoteInit.java 代码

ZygoteInit.java frameworks\base\core\java\com\android\internal\os

  • 3.ActivityThreadMain耗时需要排查ActivityThread.java代码

ActivityThread.java frameworks\base\core\java\android\app

    1. bindApplication 耗时需要排查ActivityThread.java代码,同上

2. 从 ActivityStart 到 App 层 OpenCamera 耗时

1. App 开始执行 MainActivity 一系列 onCreate,onStart,onResume,openCamera等操作
2.Framework层 cameraserver 开始响应App getCameraCharacteristics 、connectDevice 等操作。
camera Server 在此期间的行为
    1. activityStart 耗时需要排查 LaunchActivityItem.java 代码
      LaunchActivityItem.java frameworks\base\core\java\android\app\servertransaction
    1. ResumeActivityItem耗时需要排查 ResumeActivityItem.java 代码
      ResumeActivityItem.java frameworks\base\core\java\android\app\servertransaction
    1. Choreographer#doFrame 耗时需要排查 Choreographer.java 代码
      Choreographer.java frameworks\base\core\java\android\view

3.HAL 层 OpenCamera耗时

HAL 层开始响应 APP OpenCamera的操作,并返回 open状态 给APP。


Camera HAL OpenCamera 耗时
    1. camera_module->open 耗时需要排查hal 层 CameraModule.cpp open 方法中的耗时

CameraModule.cpp hardware\interface\camera\common\1.0\default

4.APP 层 OpenCameraDone 到ConfigureStreams

5.HAL 层 ConfigureStreams 耗时

6. APP 层 ConfigureStreams Done 到 SetRepeatingRequests

7.SetRepeatingRequests 到 第一帧HAL3ProcessCaptureResult

8.HAL3ProcessCaptureResult 到第一帧Preview

9.Camera APP冷启动总耗时

相关文章

  • Camera 冷启动阶段分解

    一、Camx trace 调试开关设置二、Camx 调试开关设置懒人脚本三、Camera 冷启动阶段分解分析 一...

  • 初洋:丁香医生是怎么成功的?

    丁香医生新媒体的成长经历可以分为如下四 个阶段: 冷启动 寻找增长引擎 3增长停滞 重启增长 冷启动 在冷启动阶段...

  • 产品经理如何解决产品冷启动的问题?

    冷启动——早期产品如何获取核心用户,以及如何运营的问题,今天和大家一起了解下产品冷启动阶段的难点、冷启动阶段目标以...

  • App启动流程

    App的完整启动流程(冷启动流程) 冷启动主要分为三个阶段: main() 函数执行前(pre-main阶段) m...

  • iOS 冷启动

    iOS 冷启动分为几个阶段,每个阶段的的过程是什么 冷启动的过程定义为:从用户点击 App 图标开始到 appDe...

  • 运营笔记之内容运营(四)UGC内容专业化运营

    文/清源 在前面文章我说到了UGC社区内容运营的第一阶段,也就是冷启动阶段。在冷启动阶段,运营的核心就是要往产品填...

  • 面试题:APP启动优化

    一、APP启动分为冷启动和热启动 二、APP冷启动三大阶段 三、APP启动优化 四、共享缓存机制

  • IOS性能优化

    启动优化 1、ios启动分为冷启动与热启动2、app冷启动分为三个阶段:dyld、runtime、main2、通过...

  • 从0到1,关于产品冷启动阶段。

    冷启动是什么? 冷启动是一个产品(或者新功能)刚诞生的一个阶段,此阶段的产品面临着以下问题: 1.缺少用户及相关资...

  • 启动优化 二进制重排

    一、启动优化 冷启动:第一次启动App热启动 启动优化一般讲的是冷启动 启动阶段:main函数之前、main函数之...

网友评论

      本文标题:Camera 冷启动阶段分解

      本文链接:https://www.haomeiwen.com/subject/fsiluktx.html