在msm8905平台上,QRD方案使用了一个SPI panel,一直想搞明白刷屏过程,今天难得有机会使用手机跟踪一下display过程,为防止自己遗忘,故写下此博客
刷屏过程大致如下:
1、SurfaceFlinger::doComposition()
SurfaceFlinger::postFramebuffer()
HWComposer::commit()
hwc_set()
hwc_set_primary()
Overlay::displayCommit()
mdp_wrapper::displayCommit()
ioctl(fd,MSMFB_DISPLAY_COMMIT, &info)
mdss_fb_display_commit()
mdss_fb_pan_display_ex()
atomic_inc(&mfd->commits_pending);
2、在kernel中专门启动了一个thread,用于输出图像数据
__mdss_fb_display_thread()
wait_event(mfd->commit_wait_q,(atomic_read(&mfd->commits_pending) || kthread_should_stop()))
__mdss_fb_perform_commit()
mdp3_ctrl_display_commit_kickoff()
mdss_spi_panel_kickoff()
mdss_spi_tx_pixel(tx_buf,ctrl_pdata->byte_pre_frame)