RK3568 副屏开机动画与主屏同步

1. 描述:
副屏开机动画播放开始播放的时间点比主屏开机动画播放的时间点晚
2. SurfaceFlinger修改
在SurfaceFlinger的init初始化方法中,原生代码,只是在此处初始化了主屏的displayState,背屏的displayState初始化流程貌似从Frameworks中的DisplayManagerService往下初始化的(这个猜测,还未仔细研究),这就导致了背屏开机动画播放开始播放的时间点比主屏开机动画播放的时间点晚(实际上背屏开机线程已经起来,送图已经开始了一段时间,但dispalyState未初始化完成,导致背屏开机动画part0中的图片未显示).为了解决这个问题,在SurfaceFlinger的init方法中,初始化主屏的displayState时,同时初始化背屏的displayState,即可实现同步播放
3.在SurfaceFlinger.cpp修改
+++ b/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp

在这里插入代码片
frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
```d.what = DisplayState::eDisplayProjectionChanged |
              DisplayState::eLayerStackChanged;
     d.token = token;
@@ -4306,7 +4311,37 @@ void SurfaceFlinger::onInitializeDisplays() {
     d.width = 0;
     d.height = 0;
     displays.add(d);
-    setTransactionState(state, displays, 0, nullptr, mPendingInputWindowCommands, -1, {}, false,
+       
+       //hwt add Secondary screen startup animation synchronized with main screen 24.03.21  start
+       for (const auto& [id, token] : mPhysicalDisplayTokens) {
+        const auto displayExt = getDisplayDeviceLocked(token);
+               const sp<IBinder> backToken  = displayExt->getDisplayToken().promote();
+               LOG_ALWAYS_FATAL_IF(backToken == nullptr);
+               ALOGE("hwt SurfaceFlinger backDisplay: %d", displayExt? 1 : 0 );
+               if (displayExt!=display) {
+            DisplayState backDisplayState;
+               backDisplayState.what = DisplayState::eDisplayProjectionChanged | DisplayState::eLayerStackChanged;
+                       backDisplayState.token = backToken;
+               backDisplayState.layerStack = 0;//背屏的display id
+                       backDisplayState.orientation = ui::ROTATION_0;//强制转90度
+                       //backDisplayState.orientedDisplaySpaceRect.makeInvalid();
+               //backDisplayState.layerStackSpaceRect.makeInvalid();
+                       backDisplayState.frame.makeInvalid();
+                       backDisplayState.viewport.makeInvalid();
+                       backDisplayState.viewport =  Rect(getDisplayDeviceLocked(token)->getWidth(),getDisplayDeviceLocked(token)->getHeight());
+               backDisplayState.width = 0;
+               backDisplayState.height = 0;
+               displays.add(backDisplayState);
+                       setPowerModeInternal(displayExt, hal::PowerMode::ON);
+                       ALOGE("hwt Secondary screen token 11 ");
+        }
+               
+               ALOGE("hwt Secondary screen : %s",__FUNCTION__);
+    }
+       
+       //end
+               
+        setTransactionState(state, displays, 0, nullptr, mPendingInputWindowCommands, -1, {}, false,
                         {});
 
     setPowerModeInternal(display, hal::PowerMode::ON);
	
	
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值