其他分享
首页 > 其他分享> > dgbbr

dgbbr

作者:互联网

 
  1.             FlutterJNI.nativeOnVsync(

  2.               frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie);

  3.           }

  4.         });

  5. }

在整个流程中,除了来自 Android SDK 的 Choreographer 以外,大多数逻辑几乎都由 C++ 和 Java 的基础 SDK 实现,可以直接在鸿蒙上复用,问题是鸿蒙目前的 API 文档中尚没有开放类似 Choreographer 的能力。所以现阶段我们可以借用鸿蒙提供的类似 iOS Grand Central Dispatch 的线程 API,模拟出 VSync 的信号触发与回调:

 
  1. @Override

  2. public void asyncWaitForVsync(long cookie) {

  3.   // 模拟每秒 60 帧的屏幕刷新间隔:向主线程发送一个异步任务, 16ms 后调用

  4.   applicationContext.getUITaskDispatcher().delayDispatch(() -> {

  5.     float fps = 60; // 设备刷新帧率,HarmonyOS 未暴露获取帧率 API,先写死 60 帧

  6.     long refreshPeriodNanos = (long) (1000000000.0 / fps);

  7.     long frameTimeNanos = System.nanoTime();

  8.     FlutterJNI.nativeOnVsync(frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie);

  9.   }, 16);

  10. };

渲染窗口的构建及传递

在这一部分,我们需要在鸿蒙系统上构建平台容器,为 Flutter 引擎的图形渲染提供用于上屏的窗口对象。同样,我们参考 Flutter for Android 的实现,看一下 Android 系统是怎么做的:

标签:鸿蒙,frameTimeNanos,long,API,refreshPeriodNanos,dgbbr,Android
来源: https://blog.csdn.net/qq_38513601/article/details/113091649