这一年一直在看chromium for android的代码,边看边想骂,谷歌这帮人。。
一开始搞了个牛逼的架构,在安卓4.4上把以前android webkit团队的简单版替换掉了,
结果发现性能大不如简单版的。
简单版本的思路其实很赞,
主要就是分块渲染,然后录制,回放
这个模式很屌。
据说chrome自己的团队接手安卓的webview后,赶紧把安卓团队的经验学过来(此处乃听说,未求证)。
然后移植到chrome上搞了个更加复杂的架构。
这才把性能追上来。
这个框架大概原理,就是渲染的时候,webkit负责录制需要绘制哪些东西,
比如绘制文本,绘制矩形,
这些都是录下来的,
然后到另外个线程回放出来,
一边回放一边调用opengl命令,
最后生成一块块的瓦片,
然后再上屏。
这个瓦片还是有优先级的,
方便在滚动的时候做策略的优化,
哪些命令在哪些瓦片里可以先绘制个模糊的,
这样性能就很高了。
chromium团队接手后,大重构先,
结果第一版搞的架构,还不如安卓team当年的效率高
然后又继续重构,弄了个更复杂的架构
最后性能确实不错了,比安卓team封装的简化版webkit要好些
不过架构复杂太多了。。。
最近又在搞slimming paint,想大幅优化重绘和分层逻辑,不过搞了一两年了,还没做稳定,现在的slimming paint 2一打开就各种断言错误。。。

另外,就代码风格上来说,chromium接手后,喜欢这样写代码:随便写个简单的功能,先要host一下,然后client一下,再delegate一下,
最后impl一下。看了几千行代码后,你发现一句有用的都没有,实现不在这里面,那种感动。。。
以至于,让我产生了幻觉,觉得写C++代码的风格是这样的:
类偏不直接访问,
全部加到TypeList,必须用元编程使用常值去索引,
所有参数和返回值上各种类型推演、enable_if。
对象怎能简单new一个了事,当然要搞个超复杂的工厂函数,
利用static变量的特性,加上模板推演技术,进行自动化的注册,
让他找都找不到这个对象到底在哪里生成的。还要用一堆type_info加智能指针转来转去,
把他的头转晕。能用预处理元、模板元编程的地方,要么用python、perl自动生成代码,就不手写代码。
既然用到了模板元,当然要深度引用各种库,让别人如读天书,
为了增强代码的不可读性,还要大量使用半吊子的lamda。
还要大量使用C++标准中含糊的、误导性的代码,比如说std::remove根本不会删除元素,st::list::size竟然是O(n)的。。。。

话说回来,还是以前的webkit版本架构易读。
超喜欢以前的架构,
可惜清爽版在安卓4.4后就不维护了,统一叫chromium for android webview。
其实我就是想吐槽下chromium,哈哈

边看chromium的代码,边想骂人...的更多相关文章

  1. 【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!

    写在前面 随着前端领域的发展和社会化分工的需要,继前端攻城湿之后,又一重要岗位横空出世——重构攻城湿!所谓的重构攻城湿,他们的一大特点之一,就是精通CSS配置文件的编写...前端攻城湿跟重构攻城湿是一 ...

  2. (转)【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!

    原文地址:http://www.cnblogs.com/chyingp/archive/2013/06/30/front-end-tmplate-start.html 写在前面 随着前端领域的发展和社 ...

  3. chromium获取代码和编译

    转自360公司的一位仁兄,链接地址:http://blog.gclxry.com/?p=364 之前一直是用一个chromium27的代码来研究chromium的代码.自己也调用chromium co ...

  4. 从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码

    首发于公众号:计算机视觉life 旗下知识星球「从零开始学习SLAM」 这可能是最清晰讲解g2o代码框架的文章 理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种 ...

  5. 我的Android进阶之旅------>真正在公司看几天代码的感触

    仅以此文来回顾这一周我的工作情况,以及由此而触发的感想. ============================================================= 来到新公司5天了, ...

  6. 看图写代码---看图写代码 阅读<<Audio/Video Connectivity Solutions for Virtex-II Pro and Virtex-4 FPGAs >>

    看图写代码 阅读<<Audio/Video Connectivity Solutions for Virtex-II Pro and Virtex-4 FPGAs >> 1.S ...

  7. php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort)

    php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort) 一.总结 核心是排序 ...

  8. 不得不看的Java代码性能优化总结

    原文:https://blog.csdn.net/mr_smile2014/article/details/50112723 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么 ...

  9. 看Ue4角色代码——跳跃与实现二段跳

    看了一下终于发现了跳跃的关键代码 bool UCharacterMovementComponent::DoJump(bool bReplayingMoves) { if ( CharacterOwne ...

随机推荐

  1. Python操作12306抢票脚本

    有一段时间没有使用Python了,前几天经朋友提起一篇关于用Python实现抢火车票的文章,百度了实现抢火车票的技术细节,网上却有不少资料,也不是新鲜的东西.在了解了一些技术手段,阅读了一些大神的博文 ...

  2. ajax动态刷新下拉框

    动态post,避免直接给页面传输大量数据 /** * ajax通过商品刷新供应商 * by_kangyx * @throws IOException */ @RequestMapping(params ...

  3. CentOS下配置LVM和RAID

    1.CentOS配置LVM http://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html http://ww ...

  4. Java面试之基础题---对象Object

    参数传递:Java支持两种数据类型:基本数据类型和引用数据类型. 原始数据类型是一个简单的数据结构,它只有一个与之相关的值.引用数据类型是一个复杂的数据结构,它表示一个对象.原始数据类型的变量将该值直 ...

  5. [android篇]声明权限

    要实施您自己的权限,必须先使用一个或多个 <permission> 元素在 AndroidManifest.xml 中声明它们. 实际上,在开发过程中,当我们使用了某些系统特性的功能,且此 ...

  6. 【软考2】Java语言的基本知识汇总

    导读:现在对于java这一模块,还没有相应的项目经验,只是通过各种类型的资料,对java有一个面上的了解.现在,对此做一个罗列总结,在以后的学习过程中,逐步完善! 一.语言的发展 1.1,机器语言 在 ...

  7. 【Luogu】P3387缩点(Tarjan缩点+深搜DP)

    题没什么好说的,因为是模板题.求值我用的是dfs. 不能直接在原图上dfs,因为原图上有环的话会发生一些滑稽的事情.所以我们要用Tarjan缩点.因为此题点权全为正,所以如果在图上走一个环当然可以全走 ...

  8. BZOJ3124 [Sdoi2013]直径 【树的直径】

    题目 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节点,可以证明其有且仅有N-1 条边. 路径:一棵树上,任意两个节 ...

  9. [ZJOI2007]时态同步 (树形DP)

    题目描述 小 Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字 1,2,3-.进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个 ...

  10. kubernetes---CentOS7安装kubernetes1.11.2图文完整版

    转载请注明出处:kubernetes-CentOS7安装kubernetes1.11.2图文完整版 架构规划 k8s至少需要一个master和一个node才能组成一个可用集群. 本章我们搭建一个mas ...