openthos / multidisp-analysis

1 stars 1 forks source link

Daily report 2016-7-4 wangjianxing #17

Open faxiang1230 opened 8 years ago

faxiang1230 commented 8 years ago

开始调查屏幕分辨率问题: 再次明确工作内容: bug:T45外接显示屏,在cmdline模式可以正常clone,在图形模式下不能正常工作 陈工的神州笔记本外接显示屏时,可以clone双屏,但是外接屏因为尺寸比笔记本固定屏分辨率要大,外接屏只显示部分内容; 凤凰新发布版本OS,添加了调节分辨率功能。我们的OS也需要这个功能;

调查内容: 了解显示模块的部分,重点是KMS部分; 通过modetest工具,查看KMS的几个部分,没有明显状态问题,比较难入手; 通过比较cmdline和图形模式下的部分,发现CRTC部分存在部分差异: cmdline:CRTC 的buffer id是相同的 图形模式下:CRTC的buffer id是不同的

目前只有同方笔记本存在这个问题,可能和具体的驱动相关;我会使用最新的ubuntu试一下这个问题;

调查问题过程:https://github.com/openthos/multidisp-analysis/issues/16

faxiang1230 commented 8 years ago

Daily report 2016-7-5 wangjianxing 尝试了两种修改 分辨率的方法: 1.使用fbset修改/dev/fb0,从修改反馈信息来看修改成功了,但是在视觉上看没有效果。 2.修改DPI设置,但是没有生效。可能是修改的位置不对,还需要继续尝试;

调查中的方向和遇到的问题:https://github.com/openthos/multidisp-analysis/issues/16

faxiang1230 commented 8 years ago

Daily report 2016-7-6 wangjianxing 主要是开始调查在同房精锐500上背景图片是黑色的问题; 使用android自带的截图工具看到的背景图片是黑色的,所以现在暂时排除了底层显示问题; 使用壁纸选择工具手动选择壁纸也是无效的,所以暂时排除了壁纸本身问题; android中的surfaceflinger对内存的管理应该问题也不大,所以现在主要是调查launcher应用的布局问题; 添加一些log查看应用的布局和各层在Z轴上的顺序。

faxiang1230 commented 8 years ago

Daily report 2016-7-7 wangjianxing 背景图片显示为黑色的bug,目前的结论是:上层应用把图片已经发送给fw,但是从/dev/fb0的截图工具来看没有背景图片,出问题的点位于FW部分; 中间最可能的部分是:将图片传递给surface,到surfacelinger合成这一段出现了一些问题; 因为涉及到复杂的AIDL,windowmanager,surfaceflinger,JNI,Bp/Bn等过程,可能进度会比预期要慢一些;

faxiang1230 commented 8 years ago

Daily report 2016-7-8 wangjianxing 通过查看截屏工具的代码和抓取出的图像,问题已经可以确认是出在framework了; 通过添加log的方式,将所有图层打印出来,可能是图层顺序有些问题,wallpaper和launcher的顺序可能颠倒了;

faxiang1230 commented 8 years ago

Daily report 2016-7-11 wangjianxing 1.背景图片显示为黑色的问题已经移交给陈工 2.开始调查T45双屏显示,而第二个屏只能显示文本模式而不显示图形的问题; 通过使用external/drm/tests/modetest/下生成的modetest工具,拷贝到/data/下,切换到命令行模式执行如下命令:modetest -s 44@25:1920_1080 44:connector id 25:crtc id 1920_1080:分辨率 connector id和crtd id可以通过: cat /sys/kernel/debug/dri/0/i915_display_info 找到第二个显示屏使用的是哪一个connetor和crtc;

通过这个方式可以点亮第二个屏幕,说明底层是没有问题的,可能是gralloc部分没有很好地支持HDMI的显示;

faxiang1230 commented 8 years ago

Daily report 2016-7-12 wangjianxing 接着上面的调查过程说: modetest和gralloc在初始化过程中干的事情基本一致, 1.监听到显示设备插入事件 2.检查到哪个connector的状态改变了 3.根据connector,匹配encoder,crtc 4.寻找合适的mode(宽,高,bpp,色彩模式等约束) 5.确定宽,高,bpp,dpi,物理宽高 6.分配GEM对象 7.创建一个fb设备 8.将fb和crtc绑定 不一致的地方在于分配GEM对象时的类型不同,modetest刷一次就可以了,gralloc需呀不停地flush;

faxiang1230 commented 8 years ago

Daily report 2016-7-14 wangjianxing 显示的过程: 1.找到已经连接的connector,显示设备在插入时kernel已经帮我们做好了 2.通过connector找到encoder,crtc,确定一种可用的组合; 3.确定显示模式:宽,高,位模式 4.向内核申请内存:通过显卡相关的gralloc管理器,申请一块内存,返回一个framebufferout(这部分和intel相关的driver还没有仔细看);我可以做的是调整申请内存时的参数来试验 5.在显示的时候会由FLIP事件周期性产生(目前不管是硬件产生还是软件定时产生vsync事件,我现在看到的是framebuffer post事件),第一次的时候会使用2&&3&&4 step的组合drm_kms_set_crtc 6.下面就是周期性的flip事件,将primary的buffer传送到hdmi的buffer,然后drmModePageFlip

但是目前primary好像不走这个步骤(在单屏时没有这些log产生)