- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Chromium网页滑动和捏合手势处理过程分析剖析
Chromium网页滑动和捏合手势处理过程分析
从前面一文可以知道,Chromium的Browser进程从Touch事件中检测到滑动和捏合手势之后,就会将它们发送给Render进程处理。滑动手势对应于修改网页的Viewport,而捏合手势对应于设置网页的缩放因子。通常我们比较两个浏览器的流畅程度,就是比较它们的滑动和捏合性能。因此,浏览器必须要快速地响应用户的滑动和捏合手势。本文接下来就详细分析Chromium快速响应网页滑动和捏合手势的过程。
从前面文章中可以知道,Browser进程是通过一个类型为InputMsg_HandleInputEvent的IPC消息将网页的滑动和捏合手势发送给Render进程处理的。Render进程通过一个Input Event Filter截获这两个手势操作,并且分发给Compositor线程处理,如图1所示:
从前面文章中这个系列的文章可以知道,Compositor线程为网页维护了一个CC Active Layer Tree。这个CC Active Layer Tree描述的是网页当前正在显示的内容。由于滑动和捏合手势并没有改变网页的内容,仅仅是改变了它的位置和缩放因子,因此Compositor线程会将滑动和捏合手势直接应用在CC Active Layer Tree。这样就可以快速地响应用户的滑动和捏合操作了。
将滑动和捏合手势应用在网页的CC Active Layer Tree之后,就会造成它与网页的CC Layer Tree不一致。通常情况下,我们都是将CC Layer Tree的变化同步到CC Active Layer Tree中去的。但是在网页被滑动和捏合的情况下,就刚好反过来,我们需要将CC Active Layer Tree的变化同步到CC Layer Tree中去,以维持两个Tree的一致性。
那么,CC Active Layer Tree的变化什么时候会同步到CC Layer Tree去的呢?Compositor线程将滑动和捏合手势应用在CC Active Layer Tree之后,会执行两个操作。第一个操作是请求马上对CC Active Layer Tree进行渲染。第二个操作是请求执行下一次Commit,这将会触发CC Layer Tree被重新绘制。CC Layer Tree在重新绘制的过程中,就会将之前应用在CC Active Layer Tree上的滑动和捏合操作也应用在CC Layer Tree上,从而可以将CC Active Layer Tree的变化同步到CC Layer Tree中去。
接下来,我们就从Render进程截获Browser进程发送过来的输入事件开始,分析它快速响应网页的滑动和捏合手势的过程。
从前面文章中一文可以知道,Render进程在加载网页之后,会通过调用RenderThreadImpl类的成员函数EnsureWebKitInitialized初始化WebKit,如下所示:
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
void RenderThreadImpl::EnsureWebKitInitialized() {
bool enable = command_line.HasSwitch(switches::kEnableThreadedCompositing);
if (enable) {
InputHandlerManagerClient* input_handler_manager_client = NULL;
if (!input_handler_manager_client) {
input_event_filter_ =
new InputEventFilter(this, compositor_message_loop_proxy_);
AddFilter(input_event_filter_.get());
input_handler_manager_client = input_event_filter_.get();
}
input_handler_manager_.reset(
new InputHandlerManager(compositor_message_loop_proxy_,
input_handle
您可能关注的文档
最近下载
- 中医妇科临床诊疗指南——妊娠恶阻.pdf
- 猪咬伤诊疗规范考试试卷试题及参考答案.docx VIP
- 海蜇蜇伤诊疗规范考试试卷试题及参考答案.docx VIP
- 2023年云南文山州砚山县江那镇人民政府村(社区)后备干部及社会服务岗位人员招聘笔试参考题库附带答案详解.pdf VIP
- 第二阶段课件11检索概论ii.pptx VIP
- 狂犬病诊疗规范2021年版考试试卷试题及参考答案.docx VIP
- 2024年ADA糖尿病诊疗标准更新解读课件.pptx VIP
- 通达信公式编写初中高级全套教程(附:通达信全部函数表).pdf VIP
- 译林牛津版苏教八年级上册英语词汇表(表格版)直接打印.pdf VIP
- 2023年云南文山州砚山县江那镇村(社区)后备干部及社会服务岗位人员招聘笔试参考题库附带答案详解.pdf VIP
文档评论(0)