webkit
「已注销」
专心于webkit和android,
交流qq群343697525
展开
-
webkit的主要目录,及其结构
<br />1. JavaScriptCore——webkit的js虚拟机,也叫SquirrelFish<br />1.1 bytecode——保存汇编指令的类,用于执行<br />1.2 bytecompiler——把各种NODE编译成汇编指令的编译器<br />1.3 interpreter——基于register的虚拟机,执行编译后的特殊的汇编指令,使用了direct技术<br />1.4 parster——语法解析器生成各种NODE<br />1.5 runtime——JS的内部类及其实现,运行时需原创 2010-08-03 01:12:00 · 1628 阅读 · 0 评论 -
webkit中FastMalloc的分析
<br />FastMalloc是google写的,主要是为了内存管理.<br /> <br />首先每个线程都有自己的TCMalloc_TheadCache结构,用来管理每个线程的heap,由PageHeapAllocation<TCMalloc_TheadCache>分配,<br /> <br />其次有个TCMalloc_Central_Freelist数组,这个是所有线程共享的用来获取进程heap的空内存,管理的Span结构<br />然后所有内存管理在TCMalloc_PageHeap,通过Pag原创 2011-03-24 18:06:00 · 4464 阅读 · 0 评论 -
新的webkit中html解析器
<br />DocumentLoader收到html后通过DocumentWriter调用HTMLDocumentParser::appendBytes,<br />然后通过DocumentWriter解码后,调用HTMLDocumentParser::append添加到HTMLInputStream中,<br />如果当前有js在执行,就调用HTMLPreloadScanner预先下载一些img和css资源,<br />如果有被suspend,就等待HTMLParserScheduler来resume,<原创 2011-03-25 16:18:00 · 5032 阅读 · 0 评论 -
扩展javascriptCore的功能
<br />javascriptCore是webkit原生的js解析器,2008年被重写改名为SquirrelFish,可以参考<br />http://www.webkit.org/blog/189/announcing-squirrelfish/<br /> <br />其实现的是ECMAScript edition 3,可以参考<br />http://en.wikipedia.org/wiki/ECMAScript<br /> <br />要做的扩展是:<br />1。在js解析失败时,打印出url原创 2011-03-31 14:17:00 · 3379 阅读 · 2 评论 -
webkit中图片的解码过程
<br />从loader下载图片后,在ResouceLoader中会创建一个SharedBuffer保存图片员数据,<br />然后把SharedBuffer传给CachedImage,其多重继承于CachedResource和ImageObserver,<br />然后CachedImage传给成员BitMapImage,其继承于Image,用于在GraphicsContext中显示,<br />Image中也会引用SharedBuffer,并且也引用CachedImage,<br />然后BitMap原创 2011-04-07 17:18:00 · 6065 阅读 · 2 评论 -
去年的webkit的js解析与执行
<br />现在用的是去年的webkit,一年来SquirrelFish也改动了很多,但是大体上还没有变。<br /> <br />js分为编译和执行两个主要过程,连接这两个过程的是CodeBlock结构。<br />执行分为两种情况,一个是虚拟执行CodeBlock的中间码,一个是jit把CodeBlock的中间码翻译成汇编再执行<br /> <br />编译也分为js解析和中间码生成两个过程,连接这两个过程的是Node结构。<br />解析也分为词法分析和语法分析两个过程,其中Lexer比较简单,Gra原创 2011-05-03 17:52:00 · 4381 阅读 · 0 评论 -
webkit中JavaScriptCore目录的内容
<br />1.assembler是jit编译中间码用到的汇编程序<br />2.bytecode中间码相关的类和定义<br />3.生成中间码的类实现,实际上是编译Node类<br />4.interpreter用来执行js的类,实际上就是执行CodeBlock<br />5.jit执行jit汇编程序的类<br />6.parser解析js用到的词法分析类,语法分析bison文件和Node类结构<br />7.runtime是js的执行环境中自带的类<br />8.wtf是WebCor和JavaScrip原创 2011-05-03 18:15:00 · 3066 阅读 · 0 评论 -
webkit中添加widget显示
<br />widget其实就是一个网页,这样可以理解为在当前webkit多显示一个网页。<br />因此最低层次也要在page中多实例一个frame,在往上就是多实例page了。<br /> <br />可以选择在page中多实例frame,<br />实际上在page中有个mainFrame,这个是当前网页的主窗口,<br />因此建一个需要和它平级的frame来显示widget,<br />这样frame和mainFrame只是共享一个page而已。<br /> <br />比较难处理的有两个方面,一原创 2011-05-06 17:12:00 · 2973 阅读 · 0 评论 -
移植webkit到c2的mips平台
最近在移植webkit到c2平台,移植是基于最新的webkit代码,应该是5月份的,好像svn是8****吧。移植中也遇到了不少的问题,现在记录一下,时间长,记不了太全了1.多线程问题,webkit初始化线程和事件处理线程都需要是主线程,这个限制了webkit原创 2011-08-16 15:38:59 · 3255 阅读 · 0 评论 -
android ndk编译自己的webkit
android本来自带了webkit浏览器,但是要对其进行custom就需要android源代码才行,但是在没有源码的情况下,那么就需要用到ndk了,比如,我是在xoom上做custom webkit的。虽然ndk提供的库很少,而且没有skia,但是好在有bitmap,这样显示慢了点,没有硬加速,但不是不可能。webkit需要的第三方库,freetype,png,jpeg,sqlite原创 2011-12-15 14:30:24 · 8254 阅读 · 3 评论 -
总结一下对webcore的修改
1.增加提示打印类1.1Error.cpp,js执行错误打印1.2HTMLTokenizer.cpp,html解析错误打印1.3MainResourceLoader.cpp,主页打开失败提示1.4FontCacheFreeType.cpp,增加font加载失败打印2.系统修改类2.1CurrentTime.cpp,Timer时间获取用clock时间BackForwardLi原创 2012-11-26 18:28:22 · 2737 阅读 · 1 评论 -
最近的对wenkit进行的优化修改
1.系统类1.1 JSDOMWindowCustom.cpp 增加对plugin的直接js访问,统一plugin接口1.2 HTMLTextFormControlElement.cpp 设置输入框不能选择1.3 MainResourceLoader.cpp 去掉数据发送和接收监听1.4 EventHandler.cpp 去掉模拟的鼠标事件1.5 SocketStream原创 2013-06-05 12:00:36 · 2553 阅读 · 1 评论 -
关于的webkit的fastmalloc
webkit是用fastMalloc进行内存管理的,需要与NDEBUG是同时定义。除了GC中的JSCell外,其他的内存都会用fastMalloc来分配。JSCell因为需要进行回收,所以放到了一块能aligned的内存块中,因为GC的mark是根据其地址进行计算的。wtf/FastAllocBase.h中定义了一些关键的使用fastMalloc和fastFree的接口,其中fastMallocMatchValidateMalloc和fastMallocMatchValidateFree是为这块内存加上一个原创 2011-03-11 16:24:00 · 3967 阅读 · 0 评论 -
webkit的编译
webkit支持很多的porting,而每个porting的编译都不一样。但是webkit有一个perl脚本用来管理这些编译。build-webkit和webkitdirs.pm但是要深入开发时,必须要看懂编译系统,才能做自己的东西。其中qt用的是qmake来生成makefile,*.pro和*.priwince和efl用cmake来生成makefile,相关文件是CMakeLists.txt和CMakeLists${PORT}.txtgtk用autotools来生成makefile,其他的可以从webki原创 2011-03-11 11:13:00 · 3275 阅读 · 0 评论 -
css的sytle解析
<br />css的解析使用了flex的词法解析和bison的语法解析。<br /> <br />首先以flex分析WebCore/css/tokenizer.flex生成c++源文件tokenizer.cpp,<br />但是flex不能直接处理双字节,所以makeTokenizer.pl会再处理一下tokenizer.cpp<br /> <br />然后bison会根据CSSGrammar.y生成c++源文件CSSGrammar.cpp,<br />这是语法分析文件,和CSSParser.cpp配合生成原创 2010-08-05 23:57:00 · 1484 阅读 · 0 评论 -
webkit的attribute
<br />1.NamedNodeMap是所有Attribute的vector及其接口<br /> <br />2.Attribute是一个属性name=value对的数据及其接口<br /> <br />3.Attr是属性的Node节点,用于dom和js<br /> <br />4.NamedMappedAttrMap多了classname用于CSS<br /> <br />5.mappedAttribute多了Declaration用于CSS原创 2010-08-06 14:54:00 · 717 阅读 · 0 评论 -
webkit的CachedImage管理解析
<br />CachedImage继承于CachedResouce和ImageObserver,<br />其中Image是存放原始数据和decoder数据用的。<br />创建自BitmapImage,其中ImageSource用来保存关键数据的,raw和decoder,<br />而且还是解码器的包含类。原创 2010-10-21 18:23:00 · 1188 阅读 · 0 评论 -
webkit中image的下载
<br />img标签对应HTMLImageElement类,<br />在创建对象时,会创建一个属性 ImageLoader的对象,<br />其中CachedImage是下载后保存的地方。<br /> <br />在HTMLEImageElement对象attched时,会创建一个RenderImage对象,<br />这个对象就是用来显示图片的。<br /> <br />原创 2010-10-23 14:33:00 · 1187 阅读 · 1 评论 -
webkit的loader结构解析
<br />Frame用FrameLoader来下载网页。<br />FrameLoader处理loader与Frame有关的内容,如网页的解析等。<br />FrameLoader中的DocumentLoader是用了下载网页html文本的, 其中MainResouceLoader是网络下载用的。<br /><br /><br />Document中的DocLoader是用来下载image/css/script的。<br />Cache是一个全局变量,用来保存所有的子资源。<br />Loader是为Ca原创 2010-10-21 14:58:00 · 856 阅读 · 0 评论 -
webkit的loader结构解析
<br />Frame用FrameLoader来下载网页。<br />FrameLoader处理loader与Frame有关的内容,如网页的解析等。<br />FrameLoader中的DocumentLoader是用了下载网页html文本的, 其中MainResouceLoader是网络下载用的。<br /><br /><br />Document中的DocLoader是用来下载image/css/script的。<br />Cache是一个全局变量,用来保存所有的子资源。<br />Loader是为Ca原创 2010-10-21 14:58:00 · 1072 阅读 · 0 评论 -
webkit的EventListner触发
<br />EventTarget是事件的核心类,Node的多继承于这个类,<br />这个类是一个纯虚基类,因此是一个接口类,<br />其中比较重要的接口有几类:<br />1.添加和删除Listener,这些是虚函数,子类中可以重新实现<br />2.分发Event,有一个虚函数,和一个函数,这样子类可以有自己的个性<br />3.添加,删除和获取属性Listener<br />4.fire触发Listener函数,这个函数不需要有子类的实现<br /> <br />Event类内容:<br />ty原创 2010-11-10 15:37:00 · 1329 阅读 · 0 评论 -
webkit的history
<br />有个全局的PageCache用来保存HistoryItem的page,<br />这个随时可能被删掉,因为它只是一个cache而已,<br />这里要注意,CachedPage不等于Page,CachedFame不等于Frame,<br />它们只是保存了page和mainFrame中的只要变量。<br /> <br />page下的BackForwardList用来保存历史记录,<br />这个类很简单,就是保存着HistoryItem的vetor和hash。<br /> <br />在Fra原创 2010-11-22 17:18:00 · 1765 阅读 · 0 评论 -
webkit中修改Timer的时间
<br />WebKit的timer计时用的是UTC时间,<br />但是机顶盒在启动时是没有UTC时间的,所以在启动后,ntp同步会影响到timer<br />因此需要改Timer的计时方法。<br /> <br />OWB的WebKit中每个Thread有一个自己的Timer队列,<br />在Timer<T>需要shot时,会添加到这个Timers队列中。<br /> <br />在Timers中有一个外部SharedTimer用来shot这些Timers,<br />在主线程中是MainShared原创 2010-11-23 15:07:00 · 1434 阅读 · 0 评论 -
OWB的IFrame没有析构bug
<br />OWB中WebView对应着WebCore::Page,<br />其中mainFrame是用来打开网页的主要Frame,<br />WebFrame对应者WebCore::Frame,<br />在网页中打开,iframe时,也会建立一个WebFrame来对应Frame打开网页,<br />但是在Frame切换网页时,会把其内容放到Cache中,<br />但是WebFrame却没有被析构,因此Frame也没有析构,<br />这会导致内存泄漏。<br /> <br />解决方法是在Frame原创 2010-11-24 21:44:00 · 1093 阅读 · 0 评论 -
webkit的键盘事件分发过程
<br /><br />1.找到当前的focus Frame<br />2.调用Frame event keyEvent,传入参数为PlatformKeyboardEvent<br />3.找到当前的focus node用于处理事件<br />4.判断当前的事件是否问题控制按键<br />5.分发KeyUP和Char类型事件并直接返回结果<br />6.建立一个新的PlatformKeyboardEvent keyDownEvent,并且把它变成RawKeyDown类型<br />7.根据keyDownEv原创 2011-01-30 11:47:00 · 5041 阅读 · 0 评论 -
176532版本webkit中RenderObject类结构
好久没看WebCore/render原创 2014-11-25 15:12:16 · 2229 阅读 · 0 评论