在Chromium for Android中能否用TextureView替代SurfaceView

在开发Browser 2.0时,碰到一个非常头疼的问题,往布局上添加SurfaceView时,会引起黑屏闪一下。为了解决这个问题,我们不得不在初始化阶段就把SurfaceView添加好,之后也不能调整大小、移动位置。当时就考虑是不是能够用TextureView替代SurfaceView,不过由于计划上的调整,没有做进一步的尝试。今天在网上看到这篇文章,正好解答了我的疑问,在此把文章翻译过来,供参考。

Android SurfaceView和textureView

本文将简要介绍SurfaceView和TextureView的不同之处

SurfaceView和TextureView

SurfaceView和TextureView都继承自android.view.View类,他们都可以在另一个独立线程中绘制和渲染,这是和其它View的最大不同。Crosswalk采用这一分离绘制特性,独立的GPU线程显著提高了渲染效率。

SurfaceView提供一个嵌入在视图层次上的专用绘制表面,您可以控制该表面(Surface)的格式和尺寸。SurfaceView负责将表面放置在屏幕上正确的位置。它的行为多少有些类似于传统桌面系统上的onscreen窗口,比如,X11系统中的XWindow可以是无边框的,嵌入在另一个XWindow中。

SurfaceView存在如下两个缺点:

  • 不能应用动画、变换和缩放
  • 不能叠加(Overlay)两个SurfaceView

TextureView看似更像一个通用的View,可以应用动画、变换和缩放,就如同TextView。TextureView只能用在硬件加速的窗口。但是,TextureView比SurfaceView更耗内存,而且可能会有1~3帧的延迟,请参考讨论3

使用可以动画的XWalkView

Crosswalk Embedding API for Android很好的支持了SurfaceView和TextureView。XWalkView缺省使用SurfaceView,也允许您在以下情况下使用TextureView:

  • 您想让XWalkView支持动画和变换
  • 您想叠加两个XWalkView

设置布尔标识ANIMATIBLE_XWALK_VIEW为true即可启用TextureView。

  1. http://developer.android.com/reference/android/view/SurfaceView.html
  2. http://developer.android.com/reference/android/view/TextureView.html
  3. https://groups.google.com/a/chromium.org/forum/#!topic/graphics-dev/Z0yE-PWQXc4

文中提到的讨论起源是在google groups中有人提出如下问题:

在当前ContentViewRenderView实现中,使用SurfaceView作为合成表面(compositing surface),如我们所知,SurfaceView是一个特别的视图,无法进行动画或者变换。

TextureView可以做SufaceView同样的事情,比如,您可以在另一个独立线程中渲染,也可以从底下的SurfaceTexture创建一个egl表面(eglSurface)。更主要的是,TextureView可以进行动画和变换。

我很好奇为什么不使用TextureView作为合成表面,是否TextureView在使用上有一些特别的考虑,比如性能问题?欢迎任何讨论。

Google groups有人做如下回复:

事实上chrome过去使用TextureView作为合成表面,但我们出于几个原因切换到SurfaceView:

  • 由于失效(invalidation)和缓冲的特性,TextureView增加了额外1~3帧的延迟显示画面更新
  • TextureView总是使用GL合成,而SurfaceTexture可以使用硬件overlay后端,可以占用更少的内存带宽,消耗更少的能量
  • TextureView的内部缓冲队列导致比SurfaceView使用更多的内存
  • TextureView的动画和变换能力我们用不上

所以结论是Chromium for Android中可以使用TextureView替代SurfaceView作为合成表面,但带来的后果是占用更多的内存,性能下降。

要调试 Chromium for Android 源代码,需要使用 Android Studio 和 Chromium for Android 源代码。以下是步骤: 1. 下载 Chromium for Android 源代码 从 Chromium 的官方网站上下载 Chromium for Android 源代码。下载完成后,解压到本地。 2. 安装 Android Studio 从 Android Studio 的官方网站上下载最新版本的 Android Studio。安装完成后,打开 Android Studio。 3. 导入 Chromium for Android 项目 在 Android Studio 中,选择 File -> New -> Import Project。在弹出的窗口中,选择 Chromium for Android 源代码所在的文件夹。然后按照向导完成项目导入。 4. 配置 Chromium for Android 项目 在 Android Studio 中,打开 Project Structure 窗口。选择 app 模块,并在 Dependencies 标签页中添加 Chromium for Android 的依赖库。然后在 Build Variants 标签页中选择正确的 Build Variant。 5. 配置 Chromium for Android 运行环境 在 Android Studio 中,打开 Run/Debug Configurations 窗口。点击左上角的加号,添加一个新的 Android Application 配置。在 Configuration 标签页中选择正确的模块和启动 Activity。然后在 Profiling 标签页中选择正确的调试方式。最后点击 OK 保存配置。 6. 启动调试 在 Android Studio 中,点击 Run 按钮启动调试。如果一切正常,就会在设备或模拟器上启动 Chromium for Android 应用,并进入调试模式。 以上就是调试 Chromium for Android 源代码的步骤。需要注意的是,由于 Chromium for Android 是一个庞大而复杂的项目,调试起来可能比较困难,需要具备一定的 Android 开发和调试经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水木石

但行好事,莫问前程

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值