Camera 冷启动阶段分解

一、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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MxaJ010x-1611021583363)(https://upload-images.jianshu.io/upload_images/2118860-a7485ec48232cca3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

##7.SetRepeatingRequests 到 第一帧HAL3ProcessCaptureResult

##8.HAL3ProcessCaptureResult 到第一帧Preview

##9.Camera APP冷启动总耗时

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
进行相机冷启动分析时,可以采取以下思路: 1. 确定冷启动时间:首先,测量相机应用程序从启动到完全可用所需的时间。可以使用性能分析工具或自定义代码来测量冷启动时间。 2. 定位性能瓶颈:确定导致冷启动时间延长的性能瓶颈。可能的性能瓶颈包括应用程序初始化、资源加载、设备初始化、权限检查等。可以使用性能分析工具来帮助确定性能瓶颈。 3. 分析应用程序初始化过程:分析相机应用程序在冷启动过程中的初始化步骤。这可能涉及到加载配置文件、初始化相机模块、创建相机预览界面等。通过仔细分析初始化过程,可以确定可能导致冷启动延迟的具体步骤。 4. 检查资源加载:检查相机应用程序在冷启动过程中是否存在资源加载延迟。这可能包括加载图像、预加载相机设置、加载第三方库等。确保资源加载过程高效,并优化加载时间。 5. 优化设备初始化:如果设备初始化是冷启动时间延长的原因之一,可以考虑优化设备初始化流程。这可能包括通过异步初始化来减少等待时间、延迟初始化某些设备功能等。 6. 权限检查优化:相机应用程序可能需要获取相机、存储等权限。如果权限检查导致冷启动延迟,可以考虑优化权限检查的逻辑,例如延迟权限检查、并行进行权限检查等。 7. 启动优化:考虑使用启动优化技术,如预加载、懒加载等,来减少冷启动时间。这可以通过提前初始化一些关键资源、延迟加载非必要资源等方式来实现。 8. 性能测试和验证:在进行优化后,进行性能测试和验证,确保应用程序的冷启动时间得到显著改善,并在不同情况下保持稳定性。 总之,进行相机冷启动分析时,需要确定冷启动时间、定位性能瓶颈、分析初始化过程、检查资源加载、优化设备初始化和权限检查等步骤来改善冷启动性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值