dump tree
来源:互联网 发布:手机照片编制软件 编辑:程序博客网 时间:2024/06/08 01:00
There are code in webkit that can dump the dom tree and render tree.
"RenderObject::showRenderTreeAndMark" and "Node::showTreeAndMark"
You can use it or change it. But it will take a lot of time to compile, and the log function doesn't work very well in Windows environment.
Below is the simplified code and will work well on Windows:
DumpRenderNode:
//Rendervoid showRenderObject(RenderObject* renderObject, int depth){ char buffer[128] = {0}; int pos = 0; if (!renderObject) { pos += sprintf(buffer+pos,"%s","null"); }else { for (int i = 0; i<depth; i++) pos += sprintf(buffer+pos,"%s"," "); pos += sprintf(buffer+pos, "%s ", renderObject->renderName()); //sprintf(buffer+pos, "%s", ) if (renderObject->node()) { pos += sprintf(buffer+pos, "%s", renderObject->node()->nodeName().utf8().data()); }else { pos += sprintf(buffer+pos, "%s", "noname"); }if (renderObject->isRenderBlock()){RenderBlock *block = (RenderBlock*)(renderObject);pos += sprintf(buffer+pos, "(%d,%d,%d,%d)", block->x(),block->y(),block->width(),block->height());}//else if (renderObject->isRender) } LOG(Loading,"%s",buffer);}void visitRenderNode(RenderObject * renderNode, int depth){ showRenderObject(renderNode, depth); if (!renderNode) return; for (RenderObject* child = renderNode->firstChild(); child; child=child->nextSibling()) { visitRenderNode(child,depth+1); } }void dumpRenderNode(RenderObject * renderNode, int depth){ visitRenderNode(renderNode, depth);}
result:
lyftest begin dump
RenderView #document(0,0,936,473)
RenderBlock HTML(0,0,936,473)
RenderBody BODY(8,8,920,449)
RenderBlock P(0,0,920,18)
RenderText #text
RenderBlock (anonymous) noname(0,34,920,0)
RenderImage IMG
RenderBlock DIV(0,34,920,24)
RenderText #text
RenderBlock UL(0,74,920,54)
RenderListItem LI(40,0,880,18)
RenderListMarker noname
RenderText #text
RenderListItem LI(40,18,880,18)
RenderListMarker noname
RenderText #text
RenderListItem LI(40,36,880,18)
RenderListMarker noname
RenderText #text
lyftest end dump
dump DOM node:
void showDomNode(const Node* node, int depth){ char buffer[128] = {0}; int pos = 0; if (!node) { pos += sprintf(buffer+pos,"%s","null"); }else { for (int i = 0; i<depth; i++) pos += sprintf(buffer+pos,"%s"," "); pos += sprintf(buffer+pos, "%s", node->nodeName().utf8().data()); //sprintf(buffer+pos, "%s", ) } LOG(Loading,"%s",buffer);}void visitDomNode(Node * node, int depth){ showDomNode(node,depth); if (!node) return; for (Node* child = node->firstChild(); child; child=child->nextSibling()) { visitDomNode(child,depth+1); } }void dumpDomNode(Node * node, int depth){ visitDomNode(node,depth);}
result:
lyftest begin dump
#document
html
HTML
HEAD
#text
TITLE
#text
#text
META
#text
META
#text
META
#text
META
#text
#text
BODY
#text
lyftest end dump
with this we can do more on it.
- dump tree
- dump b*tree内容解析
- webkit Dump Render Tree 工作流程
- webkit Dump Render Tree 工作流程
- webkit Dump Render Tree 工作流程
- webkit Dump Render Tree 工作流程
- webkit Dump Render Tree 工作流程
- dump
- dump
- Dump
- dump
- dump
- dump
- dump()
- dump
- dump
- Core Dump
- Core Dump
- Qt4 的三个布局管理器
- android main.xml 分析
- 【MST】高速公路(Highway.cpp)
- ios 输入
- android 布局,编译问题。Error in an XML file: aborting build.
- dump tree
- Sipdroid数据发送流程
- http协议相关 (切记host域前不能有空格)
- ubuntu 修改IP地址
- Myeclipse中导入database
- Sipdroid涉及到的协议之RFC3261
- 第十三周任务四纯虚函数与继承
- 代码中自己用的模版之一
- view的onInterceptTouchEvent 方法