Chromium M34上图像(IMG元素)的直接合成,不走NativeImageSkia::draw路径的相关代码
来源:互联网 发布:胰腺炎apache评分表 编辑:程序博客网 时间:2024/06/03 17:54
// An image can be directly compositing if it's the sole content of the layer, and has no box decorations// that require painting. Direct compositing saves backing store.bool CompositedLayerMapping::isDirectlyCompositedImage() const{ RenderObject* renderObject = renderer(); if (!renderObject->isImage() || m_owningLayer->hasBoxDecorationsOrBackground() || renderObject->hasClip()) return false; RenderImage* imageRenderer = toRenderImage(renderObject); if (ImageResource* cachedImage = imageRenderer->cachedImage()) { if (!cachedImage->hasImage()) return false; Image* image = cachedImage->imageForRenderer(imageRenderer); return image->isBitmapImage(); } return false;}
void CompositedLayerMapping::contentChanged(ContentChangeType changeType){ if ((changeType == ImageChanged) && isDirectlyCompositedImage()) { updateImageContents(); return; } if ((changeType == MaskImageChanged) && m_maskLayer) { // The composited layer bounds relies on box->maskClipRect(), which changes // when the mask image becomes available. updateAfterLayout(CompositingChildrenOnly | IsUpdateRoot); } if ((changeType == CanvasChanged || changeType == CanvasPixelsChanged) && isAcceleratedCanvas(renderer())) { m_graphicsLayer->setContentsNeedsDisplay(); return; }}
void CompositedLayerMapping::updateImageContents(){ ASSERT(renderer()->isImage()); RenderImage* imageRenderer = toRenderImage(renderer()); ImageResource* cachedImage = imageRenderer->cachedImage(); if (!cachedImage) return; Image* image = cachedImage->imageForRenderer(imageRenderer); if (!image) return; // We have to wait until the image is fully loaded before setting it on the layer. if (!cachedImage->isLoaded()) return; // This is a no-op if the layer doesn't have an inner layer for the image. m_graphicsLayer->setContentsToImage(image); bool isSimpleContainer = false; updateDrawsContent(isSimpleContainer);
void GraphicsLayer::setContentsToImage(Image* image){ RefPtr<NativeImageSkia> nativeImage = image ? image->nativeImageForCurrentFrame() : 0; if (nativeImage) { if (!m_imageLayer) { m_imageLayer = adoptPtr(Platform::current()->compositorSupport()->createImageLayer()); registerContentsLayer(m_imageLayer->layer()); } m_imageLayer->setBitmap(nativeImage->bitmap()); m_imageLayer->layer()->setOpaque(image->currentFrameKnownToBeOpaque()); updateContentsRect(); } else { if (m_imageLayer) { unregisterContentsLayer(m_imageLayer->layer()); m_imageLayer.clear(); } } setContentsTo(m_imageLayer ? m_imageLayer->layer() : 0);}
M39上反而不是这个行为,都会走NativeImageSkia::draw。当然,M39上SlimmingPaint和Ganesh(GPU Rasterization)仍然在持续重构中。
0 0
- Chromium M34上图像(IMG元素)的直接合成,不走NativeImageSkia::draw路径的相关代码
- chromium中脚本执行的代码路径
- Android Chromium的标题代码运行路径
- jsp页面不直接放在web根目录下面时相关servlet的路径配置
- img镜像的制作
- MTK的android镜像 解包和打包( boot.img, system.img, userdata.img, or recovery.img)
- 小程序改变性别的js详解直接上图
- 保存关于draw的代码
- Chromium硬件加速渲染的UI合成过程分析
- Chromium M34上Audio API(HTMLMediaElement)播放音乐不能获取currentTime属性更新
- Chromium代码:实现GPU->GPU的直接图片传递,不需要通过CPU进行中转
- 提取纯净的chromium代码
- 运行img镜像的各种方法
- img镜像的创建与扩容
- 失望,csdn的blog贴不上图片!
- measure,layout,draw的相关方法
- 走和不走validation的方法
- 走和不走validation的方法
- 理解ASM(四)条带化原理和rebalance(ASM发挥条带化作用的前提是主机里有多块磁盘)
- java.lang.nosuchmethoderror java.lang.String.isEmpty()Z 异常.
- Python网络编程01-----基于TCP的Python简易服务器
- Eclipse配置对php的提醒支持
- Hive几种数据导出方式
- Chromium M34上图像(IMG元素)的直接合成,不走NativeImageSkia::draw路径的相关代码
- DMA解析
- 常用的正则表达式-身份证,密码,手机号,邮箱,昵称,银行卡
- <compatible-screens>
- svn里 is already locked解决方案
- 环境搭建
- 修改数据库的oracle_sid/instance name ,db_name
- Win8提交应用 隐私声明
- 将Chrome 设置为默认浏览器