一、Android 硬件加速发展过程
从Android 3.0开始支持硬件加速渲染(就是通过GPU来渲染2D UI),优点是比软件渲染速度更快,缺点是更耗内存。
从Android 8.0开始就支持对硬件加速渲染设置不同的渲染管道,目前有三种opengl、skiagl、skiavk,Android 8.0系统默认使用是opengl渲染管道,Android 9.0系统默认使用skiagl渲染管道,
从Android 10.0开始不支持opengl渲染管道,只支持skiagl、skiavk,根据系统属性ro.hwui.use_vulkan值决定默认使用skiavk或是skiagl。
这些结论从以下源码得出:
RenderPipelineType Properties::getRenderPipelineType() {
if (RenderPipelineType::NotInitialized != sRenderPipelineType) {
return sRenderPipelineType;
}
char prop[PROPERTY_VALUE_MAX];
// 默认是opengl
property_get(PROPERTY_RENDERER, prop, "opengl");
if (!strcmp(prop, "skiagl") ) {
ALOGD("Skia GL Pipeline");
sRenderPipelineType = RenderPipelineType::SkiaGL;
} else if (!strcmp(prop, "skiavk") ) {
ALOGD("Skia Vulkan Pipeline");
sRenderPipelineType = RenderPipelineType::SkiaVulkan;
} else {
//"opengl"
ALOGD("HWUI GL Pipeline");
sRenderPipelineType = RenderPipelineType::OpenGL;
}
return sRenderPipelineType;
}
RenderPipelineType Properties::getRenderPipelineType() {
if (sRenderPipelineType != RenderPipelineType::NotInitialized) {
return sRenderPipelineType;
}
char prop[PROPERTY_VALUE_MAX];
// 默认是skiagl
property_get(PROPERTY_RENDERER, prop, "skiagl");
if (!strcmp(prop, "skiagl")) {
ALOGD("Skia GL Pipeline");
sRenderPipelineType = RenderPipelineType::SkiaGL;
} else if (!strcmp(prop, "skiavk")) {
ALOGD("Skia Vulkan Pipeline");
sRenderPipelineType = RenderPipelineType::SkiaVulkan;
}