Flutter framework engine源码初探

下图为flutter源码部分摘要:

源码链接

 

 

 

 


Engine::Engine(Delegate& delegate,
               const PointerDataDispatcherMaker& dispatcher_maker,
               DartVM& vm,
               fml::RefPtr<const DartSnapshot> isolate_snapshot,
               TaskRunners task_runners,
               const WindowData window_data,
               Settings settings,
               std::unique_ptr<Animator> animator,
               fml::WeakPtr<IOManager> io_manager,
               fml::RefPtr<SkiaUnrefQueue> unref_queue,
               fml::WeakPtr<SnapshotDelegate> snapshot_delegate)


void Engine::ScheduleFrame(bool regenerate_layer_tree) {
  animator_->RequestFrame(regenerate_layer_tree);
}


void Animator::RequestFrame(bool regenerate_layer_tree) {
  if (regenerate_layer_tree) {
    regenerate_layer_tree_ = true;
  }


public class VsyncWaiter {

   new Choreographer.FrameCallback() {
                    @Override
                    public void doFrame(long frameTimeNanos) {


Binding.dart
 

void Animator::BeginFrame(fml::TimePoint frame_start_time,
                          fml::TimePoint frame_target_time) {
  TRACE_EVENT_ASYNC_END0("flutter", "Frame Request Pending", frame_number_++);


Binding.dart

 void drawFrame() {


void Animator::AwaitVSync() {


void VsyncWaiter::AsyncWaitForVsync(const Callback& callback) {
  if (!callback) {
    return;
  }


// |VsyncWaiter|
void VsyncWaiterAndroid::AwaitVSync() {


  Choreographer.getInstance()
              .postFrameCallback(
                  new Choreographer.FrameCallback() {


上面为VSYNC注册流程图

Engine.ScheduleFrame Vsync  doFrame   

下面为Engine层绘制

import android.view.Choreographer;

public final class Choreographer {

    @FastNative
    private static native void nativeScheduleVsync(long receiverPtr);

// static
void VsyncWaiterAndroid::ConsumePendingCallback(

    shared_this->FireCallback(frame_start_time, frame_target_time);


RuntimeController::RuntimeController(

bool RuntimeController::BeginFrame(fml::TimePoint frame_time) {


void Window::BeginFrame(fml::TimePoint frameTime) {

Framework层绘制

packages/flutter/test/scheduler/scheduler_tester.dart
  SchedulerBinding.instance.handleBeginFrame(duration);
  SchedulerBinding.instance.handleDrawFrame();
}


  @override
  FrameCallback get onBeginFrame => _window.onBeginFrame;
  @override
  set onBeginFrame(FrameCallback callback) {
    _window.onBeginFrame = callback;
  }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值