和合作公司一点打单,我提了几个方案。项目紧迫,需迅速评估以确定最终方案,因方案选择直接 影响项目实施、风险及工作量。为降低风险(这几个方案我们都没有POC过),我设定了穿刺目标,此任 务紧急且关键。我争取到的时间是一周。

我可以调动团队全部资源来达成目标,但前提是目标需明确且可拆解。在从合作方出差返回的火车上 ,我一直在思考这两大要点。穿刺点的时间控制很关键,我目标一周内完成。若未达成,将被迫选择工作 量加倍、时间风险大的方案。想提速,需聚焦核心。火车上,我反复思考如何简化穿刺设计,及如何通过 投入更多资源来缩短时间。无时间压力时,一人2-3天可完成穿刺程序设计。但遇问题,交叉排查或致耗 时超一周。

我倾向的方案旨在通过Nested Wayland Server对接双方的合成器,这个方案能最大程度复用我方系 统架构,既节约时间,又高效利用现有框架。同时,它降低了双方的耦合关系,显著减少了沟通成本。

虽然Nested Wayland Server概念成熟且有实现,但去年刚被蛇咬了一把,一些平台的差异性差 点把我逼上绝路,我不能再让团队陷入那种困境,而且,到时也没有时间让我们爬坑。

最终,我将穿刺设计成这么一个目标:通过两个最简单的画三角形的客户端连接Nested Wayland Server(即NestedComposer,下同),NestedComposer将这两个client端commit的buffer合成,送到系统合成 器上屏显示,或者不合成直接送给系统合成器上屏。主要穿刺点包括:Nested WaylandServer场景下的 EGL环境的正常使用,Nested Wayland Server读取并合成EGLImage的内容,Nested WaylandComposer Server拿到EGLImage并直接commit给系统合成器。  .
第二天一大早到公司,召集了团队的三个兄弟,把背景、目标和穿刺方案和大家同步了下,确认 大家理解了以后,接下来就是着手进行工作的拆解了。经过讨论,我们拆解成了三个部分,1)纯Nested Wayland Server的实现涵盖gbm buffer backend interface、wl_surface interface以及系统合成器的事件处理), 2)取出wl_buffer中的EGLImage进行合成或者EGLImage转buffer,3)一个基础框架来构建EGL环境、处理client端来 的buffer update并调用2的接口进行合成并上屏。

拆解保证在互相可以独立进行,依赖现有环境或者自己搭建环境就可以开始工作,而不需要对其他人有依赖, 同时也要保证大家之间继承的effort要尽量小,所以每个子模块,首选设计成可定义的输入输出型接口,做不到,则 要明确编程模型,模型尽量简单。最终,我们将第二项定义成了输入输出型接口(除了EGL环境外,其它基本上可以认为 拥有幂等特性),将任务三定义成了最简单的编程模型接入(三个接口),最后大家基于任务一来集成。
 
碰头会毕,半天飞逝,团队三个三兄弟各领任务,即刻开干。

约莫晚饭的时候,已经传来了任务一和任务三完成联调的好消息,但晚饭后任务二也集成上去的时候,问题如期而至。兄弟们自发地找了个会议室,投屏进行联合调试。良好的任务拆解分工,保证了问题出现的时候,大家有的放矢、不用做大量的排查。几个老炮一起联合调试,则让思路开阔很多,效率倍增。23点多,大家在投屏上看到了我们预期的界面。原定的周末加班,在大家的努力下,不再需要。

穿刺进展大大超越了我们的预期,每个人都发挥出了自己强大的战斗力,虽然很晚,但是还有意犹未尽的感觉。

带一个技术团队,最幸福的事,某过于有那么些志同道合的兄弟和你同频,并肩作战。

tomorrow.cyz@gmail.com


dlmu2001

stay foolish, stay hungry!