attach pid
初始兩個線程
thread 1
main Tools/QtTestBrowser/main.cpp
thread 2
b IconDatabase.cpp:1438
輸入網址
(如何記錄log LOG -> WTFLog Source/JavaScriptCore/wtf/Assertions.cpp 引用
http://blog.csdn.net/bluepath/article/details/7029215(WTF是一個子工程,其主要為WebKit提供各種基礎工具,這里封裝了,著名的智能指針,斷言,log輸出,內存分配管理,甚至重寫了一套獨立的容器類,比如hashmap,hashSet,Vector等,其中最為重要是智能指針的實現。其輸出為\WebKitBuild\lib)
LOG(channel, ...) 宏定義 Source/JavaScriptCore/wtf/Assertions.h:365 第一個變量的實際名稱為 Log##channel
-> WTFLog(WTFLogChannel* channel, const char* format, ...)
WTFLogChannel變量定義示例
extern WTFLogChannel LogIconDatabase; Source/WebCore/platform/Logging.h:45
WTFLogChannel LogIconDatabase = { 0x00000400, "WebCoreLogLevel", WTFLogChannelOff }; Source/WebCore/platform/Logging.cpp:41
使用: LOG(IconDatabase, "test"),開啟時將WTFLogChannelOff替換成WTFLogChannelOn
)
技術文章
■Major Objects in WebCore
■RefPtr and PassRefPtr Basics
■A guide to Assertion macros in WebKit
■WebCore Rendering
■How WebKit loads a Web Page
■WebKit Page Cache
■How a DOM Element is Attached
未知
webkit的qt移植
Webcore中文本資源編解碼
WebCore中的http請求信息維護
WebCore中的http響應信息維護
WebKit加載網頁的流程
WebKit中的html詞法解析
html解析模型
html的解析過程,DOM節點樹的建立
Frame類
FrameLoader類
Page類
Loader 模塊是如何加載資源的,分主資源和派生資源分析 loader 模塊的類關系
WebKit中的設計模式(一): Noncopyable .
webkit技術譯文系列(二):RefPtr和PassRefPtr基礎 .
WebKit如何加載web頁面 .
WebCore中的渲染機制(一):基礎知識 .
WebCore中的渲染機制(二):塊和內嵌(Blocks and Inlines) .
Webkit技術譯文系列(一):WebCore中的主要對象 .
1.體系結構
WebKit上層組織應用
WebCore
¨Page與外框相關的內容(Frame,Page,History,Focus,Window)
¨Loader加載資源及Cache
¨HTML-DOM HTML內容及解析
¨DOM- DOM CORE內容
¨XML- XML內容及解析
¨Render-排版功能
¨CSS-DOM CSS內容
¨Binding-DOM與JavascriptCore綁定的功能
¨Editing-所有與編輯相關的功能
JavascriptCore-javascript引擎
¨API-基本javascript功能
¨Binding與其它功能綁定的功能,如:DOM,C,JNI
¨DerviedSource自動產生的代碼
¨ForwordHeads頭文件,無實際意義
¨PCRE-Perl-Compatible Regular Expressions
¨KJS-Javascript Kernel
¨WTF-KDE的C++模板庫
Unicode unicode 庫
Tools tools庫
CURL-url 客戶端傳輸庫
PlatForm- 與平臺相關的功能,如圖形圖像,字體,Unicode, IO,輸入法等.
2.解析流程
CURL獲得網站的stream
解析劃分字符串
通過Dom Builder按合法的html規范生成Dom樹
如果有javascript,JSEngine就通過ECMA-262標準完善Dom樹
把Dom傳給LayoutEngine,進行布局,如果有CSS樣式,就通過CSSParser解析。
最后Rendering out出來
Core WebKit Classes
下載網頁
加載頁面
處理頁面
Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:586 WebCore::QNetworkReplyHandler::forwardData
Source/WebCore/loader/ResourceLoader.cpp:430 WebCore::ResourceLoader::didReceiveData
Source/WebCore/loader/MainResourceLoader.cpp:463 WebCore::MainResourceLoader::didReceiveData
Source/WebCore/loader/ResourceLoader.cpp:279 WebCore::ResourceLoader::didReceiveData
Source/WebCore/loader/MainResourceLoader.cpp WebCore::MainResourceLoader::addData
Source/WebCore/loader/DocumentLoader.cpp:333 WebCore::DocumentLoader::receivedData
Source/WebCore/loader/DocumentLoader.cpp:299 WebCore::DocumentLoader::commitLoad
Source/WebCore/loader/DocumentLoader.cpp:278 WebCore::DocumentLoader::commitIfReady
Source/WebCore/loader/FrameLoader.cpp:1960 WebCore::FrameLoader::commitProvisionalLoad
頁面解析 dom
Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1547 HTMLTreeBuilder::processBodyEndTagForInBody
Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:305 WebCore::QNetworkReplyWrapper::receiveSniffedMIMEType
Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:320 WebCore::QNetworkReplyWrapper::emitMetaDataChanged
Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:203 WebCore::QueueLocker::~QueueLocker
Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:178 WebCore::QNetworkReplyHandlerCallQueue::unlock
Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:195 WebCore::QNetworkReplyHandlerCallQueue::flush
Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:454 WebCore::QNetworkReplyHandler::finish
Source/WebCore/loader/ResourceLoader.cpp:436 WebCore::ResourceLoader::didFinishLoading
Source/WebCore/loader/MainResourceLoader.cpp:484 WebCore::MainResourceLoader::didFinishLoading
Source/WebCore/loader/DocumentLoader.cpp:288 WebCore::DocumentLoader::finishedLoading
Source/WebCore/loader/DocumentWriter.cpp:214 WebCore::DocumentWriter::end
Source/WebCore/loader/DocumentWriter.cpp:228 WebCore::DocumentWriter::endIfNotLoadingMainResource
Source/WebCore/loader/DocumentWriter.cpp:208 WebCore::DocumentWriter::addData
Source/WebCore/dom/DecodedDataDocumentParser.cpp:54 WebCore::DecodedDataDocumentParser::appendBytes
Source/WebCore/html/parser/HTMLDocumentParser.cpp:367 WebCore::HTMLDocumentParser::append
Source/WebCore/html/parser/HTMLDocumentParser.cpp:175 WebCore::HTMLDocumentParser::pumpTokenizerIfPossible
Source/WebCore/html/parser/HTMLDocumentParser.cpp:276 WebCore::HTMLDocumentParser::pumpTokenizer
Source/WebCore/html/parser/HTMLTreeBuilder.cpp:450 WebCore::HTMLTreeBuilder::constructTreeFromToken
Source/WebCore/html/parser/HTMLTreeBuilder.cpp:460 WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken
Source/WebCore/html/parser/HTMLTreeBuilder.cpp:482 WebCore::HTMLTreeBuilder::processToken
Source/WebCore/html/parser/HTMLTreeBuilder.cpp:2120 WebCore::HTMLTreeBuilder::processEndTag
Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1883 WebCore::HTMLTreeBuilder::processEndTagForInBody
Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1547 WebCore::HTMLTreeBuilder::processBodyEndTagForInBody
數據庫?
Source/WebCore/loader/icon/IconDatabase.cpp
js執行
智能指針
Source/JavaScriptCore/wtf/RefPtr.h