高通平台屏幕自动息屏时亮度突然变亮

场景:Android系统设备,当设备无操作到达设置自动息屏时间,屏幕会先变暗,然后突然变量

流程:USER_ACTIVITY_SCREEN_BRIGHT(亮屏) → USER_ACTIVITY_SCREEN_DIM(DIM) → USER_ACTIVITY_SCREEN_DREAM(灭屏)变化,最终进入ASLEEP后。在息屏时会执行一个变暗的动画

:frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java

private void animateScreenBrightness(float target, float sdrTarget, float rate) {

if (DEBUG) {

Slog.d(TAG, "Animating brightness: target=" + target + ", sdrTarget=" + sdrTarget

+ ", rate=" + rate);

}

if (mScreenBrightnessRampAnimator.animateTo(target, sdrTarget, rate)) {

Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", (int) target);

// TODO(b/153319140) remove when we can get this from the above trace invocation

SystemProperties.set("debug.tracing.screen_brightness", String.valueOf(target));

noteScreenBrightness(target);

}

}

执行动画代码中 会获取屏幕亮度,并且把亮度值进行转换:frameworks/base/services/core/java/com/android/server/display/RampAnimator.java

private void setPropertyValue(float val) {

final float linearVal = BrightnessUtils.convertGammaToLinear(val);

mProperty.setValue(mObject, linearVal);

}

问题分析:

原因就出现在亮度值设置时mProperty.setValue(mObject, linearVal);追溯代码提交记录,因是谷歌开发人员修改设置亮度代码忘记全部替换新的亮度设置代码,修改部分具体如下:

原代码:if (!BrightnessSynchronizer.floatEquals(oldCurrentValue, mCurrentValue)) {

mProperty.setValue(mObject, mCurrentValue);

}

修改:

if (!BrightnessSynchronizer.floatEquals(oldCurrentValue, mCurrentValue)) {

setPropertyValue(mCurrentValue);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值