chromium 打印RenderTree

在瀏覽器內核開發工作中,我們往往需要查看一個網頁加載之後的RenderTree情況。通過這個RenderTree Dump我們可以查看相關的render tree的結構和節點信息。

 這裏調用的是文件WebLocalFrame.cpp中的RenderAsTextPrinting函數。

我在render_view_impl.cc文件中,寫了一個測試的方法:


void RenderViewImpl::OnGetRenderTreeDumpTest() {
  std::string result;
     result.append(
      main_render_frame_->GetWebFrame()->renderTreeAsText(blink::WebFrame::RenderAsTextPrinting).utf8());
     result.append("\n");

     FILE* gRenderTreeFile;
     #define RENDER_TREE_LOG_FILE "/sdcard/renderTree.txt"
     #define DUMP_RENDER_LOGD(...) { if (gRenderTreeFile) \
     fprintf(gRenderTreeFile, __VA_ARGS__); }
    
     const char* data = result.data();


     gRenderTreeFile = fopen(RENDER_TREE_LOG_FILE, "w");
     DUMP_RENDER_LOGD("%s", data);
     fclose(gRenderTreeFile);
     gRenderTreeFile = 0;
    
}

提醒下:我這裏這是打印出mianFrame的 render tree信息。如果需要也打印出subFrame的信息,需要作出調整。

這樣,調用該函數的時候,會在/sdcard目錄下,生成一個文件:renderTree.txt。

這個文件中,會有Render Tree的信息。

調用該函數的邏輯,可以按照如下邏輯:

  

 ### Shell.java

### shell_android.cc

### web_contents_impl.cc

### render_view_host_impl.cc

### render_view_impl.cc

其中,shell.java 到shell_android.cc,通過JNI去調用相關邏輯;render_view_host_impl.cc到render_view_impl.cc通過IPC通訊機制調用

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章