webkit
文章平均质量分 72
起个昵称真难
这个作者很懒,什么都没留下…
展开
-
WebKit资源加载进度
该文看下在ResourceLoadNotifier::didXXX中对页面加载进度的处理。首先在ResourceLoadNotifier::didReceiveResponse中,通过Frame找到Page,然后通过Page找到ProgressTracker,然后ProgressTracker它负责计算和维护当前接收的进度情况,其中有成员long longm_tot转载 2012-10-12 15:28:54 · 1862 阅读 · 0 评论 -
webkit关键代码浏览计划
最近由于工作重心的调整,今后一段时间重点会放在webkit上。接触webkit已有近两年时间,一直没有对webkit的关键代码进行系统的梳理学习,以至于到现在还是雾里看花不求甚解,很是惭愧。借由工作重心调整的契机,再加上最近工作不忙,准备正式启动这件一直想做的事情——对webkit关键代码进行系统学习。 学习的内容包括下面几部分: 1. 页面加载 2. H原创 2014-02-19 11:24:34 · 1325 阅读 · 0 评论 -
webkit关键代码浏览——CSS引擎
CSS解析是平时工作中基本不会接触到的一块,原因很简单,这部分代码基本不会出现BUG。这就说明了这部分代码比较“简单”,为何说它比较简单呢,因为它只干了三件事: 1. 解析CSS ,使用内部数据结构表示 2. 重新组织数据,为第三步做准备 3. 将样式信息装入相应RenderStyle,以备排版使用 这三件事在逻辑上来说相对比较简单,但怎样实现的优美、高效又是另外一原创 2014-03-01 16:56:22 · 1405 阅读 · 0 评论 -
webkit find功能浅析
Webkit的find功能是webkit比较小的一个功能,它在底层的主要接口就是android::WebViewCore::findTextOnPage。这个函数主要干了三件事情: A. 移除已有的标记B. 搜索符合条件的字符串(需记录字符串的个数和它们的位置),并为它们做上标记C. 显示新标记第一步和第三步比较简单,本质上就是向带有标记的node所原创 2014-02-28 14:25:00 · 1289 阅读 · 0 评论 -
浅析浏览器事件响应及分发
浏览器的事件响应及分发机制是与用户互动的基石。我在之前一篇文章中简要分析过chromium24的事件响应及分发机制。那么这篇文章不涉及具体的浏览器,而是从宏观上分析浏览器的事件响应及分发机制的大体框架。其实任何一款浏览器基本都遵循于这个框架。1. 事件捕获及类型判断事件的捕获由系统传感器完成并调用到浏览器,事件类型的判断大都通过系统API进行,比如touch,scroll等等。也原创 2014-04-09 15:31:37 · 1444 阅读 · 0 评论 -
webkit滚动条浅析
基于android4.1 browser所使用的webkit内核原创 2014-04-10 15:51:14 · 1973 阅读 · 3 评论 -
webkit关键代码浏览——HTML解析
基础概念就不多说了,直接进入正题,HTML解析这部分我主要关注了6点:1. 词法解析 2. 语法解析 3. 容错机制 4. DOM树构建 5. Render树构建 6. 查看DOM树和Render树原创 2014-02-19 15:05:19 · 2556 阅读 · 0 评论 -
HTML5 Video 实现浅析
HTML5 Video实现浅析——基于android4.1browser1. 基本结构先上一张基本结构图,图中展示了webkit中与HTML5 Video实现相关的一些类。1.1 DOM TreeVideo标签在webkit内部对应于HTMLVideoElement类,该类的功能并不多,大多数的功能都在其父类HTMLMediaElement中。1.2原创 2014-02-27 16:00:52 · 10122 阅读 · 1 评论 -
WebKit的布局size与真实的屏幕size(webkit中的常见坐标系)
WebCore中有默认的DPI定义:const float ViewportArguments::deprecatedTargetDPI = 160 而屏幕也有其硬件DPI,假设为480,则两者之间有3倍的差值。 在Page类中有2个变量来记录相关的差值。m_deviceScaleFactor即为3. m_pageScaleFactor = m_deviceScaleFacto原创 2013-03-25 15:33:11 · 1463 阅读 · 1 评论 -
点击链接加载网页 与 地址栏输入网址加载网页
点击链接加载网页与地址栏输入网址加载网页是我们打开一个网页的两种方式,我们平时很可能遇到一些看似诡异的情况,比如这两种方式一个好用一个不好用。这提醒我们,这看似一样的打开方式其实还是有诸多的不同。 它们的调用路径肯定是不同的,点击链接加载网页是通过WebCore中的相关节点相应事件,地址栏输入网址加载网页是通过浏览器直接调用loadurl的接口,它们最终在WebCore::FrameLo原创 2014-11-26 18:51:29 · 6760 阅读 · 0 评论 -
browser高亮显示(HitTest)
在点击一些诸如链接、原创 2014-11-21 19:18:40 · 1330 阅读 · 0 评论 -
webkit关键代码浏览——页面加载
关于webkit页面加载的文章也比较多,这篇和这篇都从机制上对webkit页面或者说资源加载进行了介绍。而这篇以代码为工具更为具体的介绍了加载流程。最后这篇以image为例介绍了其从解析、加载到显示的整个流程。 webkit的资源加载主要是分清主资源和派生资源它们有不同的流程,对于派生资源而言,它有一个memory cache的机制。我在这篇文章中介绍过浏览器中的几种缓存,并在这篇文章中以原创 2014-02-28 13:26:23 · 2292 阅读 · 0 评论 -
webkit---缩放重排
有的网页(特别是桌面版网页)在手机上浏览时字体特别小,用户们不得不放大才能看清,为了避免网页放大后需要左右移动来看其内容,浏览器一般都会很贴心的对该网页的文字进行重排,以适应屏幕的宽度。这个功能很实用,但现在好像并不是webkit的自带功能,而是需要各家浏览器独自实现。那么这个功能主要涉及到两个技术点:缩放重排和重新定位。 首先说一下缩放重排,实际上就只需要设置RenderBlo原创 2014-02-14 16:16:00 · 3454 阅读 · 1 评论 -
浏览器是如何工作的 - How Browser works(二)
解析 Parsing-general既然解析是渲染引擎中一个非常重要的过程,我们将稍微深入的研究它。首先简要介绍一下解析。解析一个文档即将其转换为具有一定意义的结构——编码可以理解和使用的东西。解析的结果通常是表达文档结构的节点树,称为解析树或语法树。例如,解析“2+3-1”这个表达式,可能返回这样一棵树。转载 2012-09-25 15:38:25 · 2372 阅读 · 0 评论 -
浏览器是如何工作的 - How Browser works(三)
CSS解析 CSS parsing还记得简介中提到的解析的概念吗,不同于html,css属于上下文无关文法,可以用前面所描述的解析器来解析。Css规范定义了css的词法及语法文法。看一些例子:每个符号都由正则表达式定义了词法文法(词汇表):comment ///*[^*]*/*+([^/*][^*]*/*+)*//num [0-9]+|转载 2012-09-25 15:39:13 · 1580 阅读 · 0 评论 -
浏览器是如何工作的 - How Browser works(四)
布局 Layout当渲染对象被创建并添加到树中,它们并没有位置和大小,计算这些值的过程称为 layout 或 reflow。Html使用基于流的布局模型,意味着大部分时间,可以以单一的途径进行几何计算。流中靠后的元素并不会影响前面元素的几何特性,所以布局可以在文档中从右向左、自上而下的进行。也存在一些例外,比如 html tables。坐标系统相对于根 frame,转载 2012-09-25 15:39:55 · 1477 阅读 · 0 评论 -
浏览器是如何工作的 - How Browser works(一)
转自:http://blog.csdn.net/zzzaquarius/article/details/6532299简介浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到google主页过程中都发生了什么。将讨论的浏览器今天,有五种主流浏览器——IE、Firefox、Safari、Chrome转载 2012-09-25 15:37:08 · 3343 阅读 · 0 评论 -
WebKit网页加载进度算法研究(一)
常用手机浏览器的人都会注意到,在加载网页时会有这样的现象: 1. 若网页非常简单,则进度条会在开始跳几下,然后直接跳到最后 2. 若网页非常复杂,则进度条会卡在约90%的位置很久,而加载不完。 特别是后者造成了非常差的用户体验,因为这时候用户不知道网页是否还在加载,是否还在工作。 这些现象都是由WebKit内部的加载进度算法造成的,该算法在ProgressTrack原创 2012-10-16 12:29:51 · 3264 阅读 · 0 评论 -
开启硬件加速时Web页面绘制流程
对于每一个RenderLayer,我们可以为其单独创建一块内部存储(有些情况下可以为多个layer创建同一块存储),这些存储会被用来保存该层中的内容,浏览器最后会把这些所有的层通过GPU合成起来,形成最终网页渲染的内容,这就是硬件加速合成。一、WebKit支持在建立DOM树后,如前面所述,WebKit会创建相应的Render树和RenderLayer树。如果启用“加速合成(原创 2012-11-14 16:28:31 · 4039 阅读 · 0 评论 -
Web页面渲染及合成加速(二)
1. LayersDraw to Backing Store.该步骤是将WebCore渲染的内容绘制到后端存储的过程,这里的后端存储有两种。一种是BaseLayerAndroid类的PictureSet,一种是LayerAndroid类的SkPicture。SkPicture记录了一系列的绘制命令,而PictureSet是SkPicture的集合。事实上这一步可以看做将Render原创 2012-11-30 17:48:26 · 4845 阅读 · 2 评论 -
Web页面渲染及合成加速(一)
1. 渲染概述一个网页通常可以包含很多层(该层并不完全等同于RenderLayer),例如有透明效果的节点, Canvas节点等,这些节点都可以是页面中的一层,这些层的内容最后组成一个可视化的网页内容,如下图所示。在这里稍微解释一下Layer的概念,我们都知道WebCore中的三棵树:DOM树,Render树及RenderLayer树。事实上远不止这三棵树,在开启硬件加原创 2012-11-30 17:42:29 · 4790 阅读 · 0 评论 -
Android 4.0 硬件加速纹理渲染过程
前面的文章中提到过开启硬件加速时,网页的显示主要分成WebCore渲染,OpenGl纹理渲染(GPU),系统将OpenGl纹理显示于屏幕上 这三个步骤。 其中第一步是解析网页最后形成一个PictureSet。第二步是生成每个tile的SkBitmap,并据此由GPU形成OpenGl纹理。最后一步根据OpenGl纹理显示内容在屏幕上。androidBrowser硬件加速的代码改原创 2013-03-05 15:30:45 · 4149 阅读 · 0 评论 -
webkit--维护已访问链接
webkit会维护已经访问过到链接,最直观的表现是已经访问过到链接会变色。再比如CSS中提供了visited伪类,前端开发者可以据此指定已访问链接的表现形式。 该功能是在PageGroup类中维护的,有PageGroup::addVisitedLink,PageGroup::isLinkVisited两个接口。从这两个函数中可以看到,webkit是通过HASH表的方式来存储已访问的链接。ad原创 2014-02-10 15:44:23 · 1471 阅读 · 0 评论 -
webkit 图片解码与缓存
从之前的文章中我们知道,image是一种派生资源,它下载之后会有memory cache机制进行缓存,而image对应的缓存类为CacheImage。CacheImage有一个成员SharedBuffer存储的是图片元数据,也就是没解码前的数据(由loader传递而来)。还有一个Image对象(实际是个BitmapImage),该对象在GraphicsContext绘制时使用。看如下堆栈:#4原创 2014-02-28 14:13:01 · 3480 阅读 · 3 评论