zoukankan      html  css  js  c++  java
  • 边看chromium的代码,边想骂人...

    这一年一直在看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,哈哈

  • 相关阅读:
    C# 把一个文件夹下所有文件复制到另一个文件夹下 把一个文件夹下所有文件删除(转)
    【总结整理】webGIS学习thinkGIS(四)WebGIS中通过行列号来换算出多种瓦片的URL 之离线地
    ARCGIS空间叠加分析(转)
    ARCGIS中怎么去除重复的面?(转)
    关于写作赚钱(转)
    【总结整理】WebGIS学习-thinkGIS(三):关于影像金字塔、瓦片行列号、分辨率resolution
    【总结整理】WebGIS学习-thinkGIS(地理常识):
    【总结整理】WebGIS学习-thinkGIS(二):关于level,比例尺scale,分辨率resolution
    【总结整理】AMAP学习AMAP.PlaceSearch()
    logging、hashlib、collections模块
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/7488074.html
Copyright © 2011-2022 走看看