ALPS04579480 灭屏播放音乐

2024-02-09 19:48

本文主要是介绍ALPS04579480 灭屏播放音乐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 功耗现象

灭屏情况下,飞行模式+静音模式+插耳,播放音乐,电流异常

1.1测试数据

飞行模式+静音模式+插耳机

原生音乐播放器

DriverOnly

32.5mA

User版本

45mA

1.2电流波形现象

上述看怀疑 CPU 未进入 Deep idle 导致?

2. Deep idle 分析

Deep idle是一种CPU进入空闲后的状态,也就是在idle进程执行的。简单地说,MTK会在CPU进入空闲的情况下,再去关闭一些不必要的power domain,以达到最省电的目的。通俗的理解就是CPU的空闲状态,即 CPU0 单核运行,其他CPUX不运行,即处于关核状态

2.1是否能进 Deep idle

  1. 方法 :写入一个不释放的锁,查看待机电流和kernel日志
  • adb shell echo test > /sys/power/wake_lock
  1. 测试现象 测试机的电流还是比参考机大,即无法进入 Deep idle 状态

2.2分析deep idle被block的情况

  1. 看CNT(dpidle,rgidle),如果dpidle一点没变,说明从没进过deep idle;有变化也不说明一定是正常的,要看变化的量。
  2. 再看 dpidle_block_cnt 这一组数值的增加值,一般可以看到每个blocker的计数都有所增加,关键要看哪个是主要的:
  • 如果主要是cpu,说明系统不只一颗cpu在运行,检查cpu loading;
  • 如果主要是tmr,说明有任务繁忙,调度比较频繁,检查cpu loading;
  • 如果主要是clk,那么看dpidle_block_mask,bit不为0的clk id就是嫌疑对象。

以下是 Kernel 日志 灭屏时间段为 13:39:57 ~ 14:17:31

<6>[  187.391041]  (0)[180:wdtk-0][thread:180][RT:187391030060] 2019-06-06 13:39:59.895301 UTC;android time 2019-06-06 13:39:59.895301

<4>[  187.524049] -(0)[0:swapper/0][Power/swap]CNT(dpidle,rgidle): [0] = (0,252679), [1] = (0,43671), [2] = (0,36229), [3] = (0,30398),

<4>[  187.524068] -(0)[0:swapper/0][Power/swap]dpidle_block_cnt: [by_cpu] = 43533, [by_clk] = 17433, [by_tmr] = 0, [by_oth] = 0, [by_vtg] = 0, [by_frm] = 0,

<4>[  187.524089] -(0)[0:swapper/0][Power/swap]dpidle_block_mask: 0x00000000, 0x00000000, 0x00000000, 0x00000011, 0x00000000, 0x00000010, 0x00002c03, 0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

根据上述日志发现导致无法进入Deep idle原因是 dpidle_block_cnt: [by_cpu] 为主,CPU loading大导致,如何查cpu loading具体情况?这里的CPU loading信息我们需要抓Ftrace文件进行分析

3. Ftrace分析

抓取日志见其他博客的 Ftrace 抓取方法,可以使用本文的sh脚本

#!/system/bin/sh

rm -rf /sdcard/idle_log/*

mkdir /sdcard/idle_log;

i=0;

while [ i -le 3000 ];

do

## cat $i;

echo $i >> /sdcard/idle_log/dpidle_state.txt;

echo $i >> /sdcard/idle_log/soidle_state.txt;

echo $i >> /sdcard/idle_log/idle_state.txt;

echo $i >> /sdcard/idle_log/cpu.txt;

i=$(($i+1));

## print looping counts

cat /sys/kernel/debug/cpuidle/dpidle_state  >>/sdcard/idle_log/dpidle_state.txt;

cat /sys/kernel/debug/cpuidle/soidle_state  >>/sdcard/idle_log/soidle_state.txt;

cat /sys/kernel/debug/cpuidle/idle_state >> /sdcard/idle_log/idle_state.txt;

## cat /sys/devices/system/cpu/cpufreq/all_time_in_state >> /sdcard/idle_log/cpu.txt

echo cpu_online_info >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/online >> /sdcard/idle_log/cpu.txt;

## cat /sys/devices/system/cpu/cpu0/online >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/cpu1/online >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/cpu2/online >> /sdcard/idle_log/cpu.txt;

cat /sys/devices/system/cpu/cpu3/online >> /sdcard/idle_log/cpu.txt;

##busybox usleep 2000000;

sleep 2;

done

查看 Ftrace 分析结果,在Google浏览器输入下述调试网址,即可加载Ftrace文件

  • chrome://tracing/

综合上述不管是使用Ftrace 还是使用脚本工具,都检查到灭屏情况,功耗异常的机器无法进入Deep idle状态,且cpu loading 大,且2个CPU运行,由于这个问题是4.28号的修改导致,即内部改出来的问题,是否CPU策略变更?

4. CPU的实验测试

做一个 Disable CPU hotplug 实验

adb shell echo 0 > /proc/hps/enabled

关闭 CPU hotplug,机器电流恢复正常了

5. 查看CPU相关修改记录

  • git diff e7a305d576a44042c8fa4f36c57b1a4e9ebdf515 961171a11857523e1296b6ba572cbbc55582d73e

发现确实存在 CPU_hotplug 相关的修改记录

user@chuanghangren-Lenovo-Product:/local/sda/local_sourcecode/xxx/kernel-4.9-lc$ git diff e7a305d576a44042c8fa4f36c57b1a4e9ebdf515 961171a11857523e1296b6ba572cbbc55582d73e

diff --git a/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h b/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h

index b250cca..bad7a20 100755

--- a/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h

+++ b/drivers/misc/mediatek/include/mt-plat/mt_hotplug_strategy_internal.h

@@ -22,7 +22,7 @@

 /* CONFIG - compile time */

 #define HPS_TASK_PRIORITY              (MAX_RT_PRIO - 3)

-#define HPS_TIMER_INTERVAL_MS          100

+#define HPS_TIMER_INTERVAL_MS          20

 #define HPS_PERIODICAL_BY_WAIT_QUEUE        (1)

 #define HPS_PERIODICAL_BY_TIMER             (2)

@@ -35,17 +35,17 @@

 #define CPU_DMIPS_BIG_LITTLE_DIFF      70

 /* CONFIG - runtime (execute time interval : 100 ms */

-#define DEF_CPU_UP_THRESHOLD           95

-#define DEF_CPU_UP_TIMES               2

-#define DEF_CPU_DOWN_THRESHOLD         85

-#define DEF_CPU_DOWN_TIMES             8

+#define DEF_CPU_UP_THRESHOLD           75

+#define DEF_CPU_UP_TIMES               1

+#define DEF_CPU_DOWN_THRESHOLD         30

+#define DEF_CPU_DOWN_TIMES             50

 #define DEF_TLP_TIMES                  1

 #define EN_CPU_INPUT_BOOST             1

 #define DEF_CPU_INPUT_BOOST_CPU_NUM    2

 #define EN_CPU_RUSH_BOOST              1

-#define DEF_CPU_RUSH_BOOST_THRESHOLD   98

+#define DEF_CPU_RUSH_BOOST_THRESHOLD   80

 #define DEF_CPU_RUSH_BOOST_TIMES       1

 #define EN_HPS_LOG                     1

查看具体修改原因:产品需要dEQP-EGL CTS测试,就必须和入此patch,不然会导致CTS fail。这块芯片比较久了,性能不太好,需要尽量的去开核 确保perfect

CPU hotplug 的patch会导致dEQP-EGL

CTS fail。具体如下:

[Initial condition]

1. [gms]_alps-mp-p0.mp user

2. Select stay awake

3. Lock screen select none

4. connect WiFi AP

[Steps]

1. run cts in windows

2. input “run cts -m CtsDeqpTestCases -t dEQP-EGL.functional.get_frame_timestamps*

[Actual Result]

dEQP-EGL.functional.get_frame_timestamps#rgb565_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Buffer displayed before rendering completed.!(1292160634076 < -2)

dEQP-EGL.functional.get_frame_timestamps#rgb565_depth_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57889844 < 49642383)

dEQP-EGL.functional.get_frame_timestamps#rgb888_depth_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57920384 < 49665288)

dEQP-EGL.functional.get_frame_timestamps#rgb888_no_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Buffer displayed before rendering completed.!(1305430597769 < -2)

dEQP-EGL.functional.get_frame_timestamps#rgba8888_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57916176 < 49662132)

dEQP-EGL.functional.get_frame_timestamps#rgba8888_depth_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57910252 < 49657689)

dEQP-EGL.functional.get_frame_timestamps#rgba8888_no_depth_no_stencil fail === with config {glformat=rgba8888d24s8ms0,rotation=unspecified,surfacetype=window,required=true} === Fail: Composite to present latency is more than 3 vsyncs.!(57910944 < 49658208)

基于产品需求定义,需确保 CTS 测试通过,故维持该 CPU hotplug 修改策略。

这篇关于ALPS04579480 灭屏播放音乐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695130

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频播放器和歌词展示区域。使用<scroll-view>组件来实现歌词的滚动效果。 <template><view class="audio-co

QT项目实战之音乐播放器2.0版本

该版本相较于1.0版本最主要的不同在于连接数据库实现类似于歌曲收藏和取消收藏的功能。 详细情况看我的这篇文章http://t.csdnimg.cn/WS5s8。 效果展示 VSMyMusicShow2.0 define.h UseMySQL.h   musicInfo.h   VSMyMusicPlayer.h

Vue 中实现视频播放的艺术

随着前端技术的飞速发展,视频播放在 Web 应用中已经成为了一个不可或缺的功能。从社交媒体平台到教育网站,再到在线购物平台,视频元素无处不在。而 Vue.js 作为当今最流行的前端框架之一,在实现视频播放时提供了很多强大的工具和技巧。在这篇博客中,我们将深入探讨如何使用 Vue.js 实现视频播放功能,不仅仅是简单地嵌入视频,还要添加一些高级功能,如自定义播放器控件、播放进度条、视频切换、事件处理

《黑神话:悟空》专题合集MOD/修改器/壁纸/音乐/CG剧情

《黑神话:悟空》专题合集」 链接:https://pan.quark.cn/s/d67857f4e308 包含内容: 《黑神话:悟空》MOD合集 《黑神话:悟空》修改器(风灵月影) 《黑神话:悟空》壁纸合集 《黑神话:悟空》3小时CG完整剧情合集 4K120帧最高画质!国语 简中字幕 附:4K 结尾动画合集 ​​​国语 简中字幕 《黑神话:悟空》主题曲 《黑神话

28.8K Star,音乐新体验,开启你的高颜值音乐之旅

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 导语 音乐是生活中不可或缺的调味品,一个好的音乐播放器能够极大地提升我们的听觉享受。今天,我要向大家推荐一个名为 YesPlayMusic 的第三方网易云音乐播放器,它不仅拥有高颜值的界面设计,还支持跨平台使用,让你的音乐体验更上一层楼

浅析网页不安装插件播放RTSP/FLV视频的方法

早期很多摄像头视频流使用的是RTSP、RTMP协议,播放这类协议的视频通常是在网页上安装插件。但现在越来越多的用户,对于网页安装插件比较反感,且随着移动设备的普及,用户更多的希望使用手机、平板等移动设备,直接可以查看这些协议的视频。那是否有什么方案可以直接网页打开RTSP、RTMP协议的视频,直接观看不用安装插件呢?而且对于摄像头的数据,尽可能低延迟的获取实时画面。  其实很多摄像头厂家也注意到

使用WebRtcStreamer播放rtsp视频

一、使用步骤 1.安装WebRtcStreamer包 代码如下(示例): {"name": "default","version": "0.1.0","private": true,"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build"},"dependencies": {"core-js":