Report no DisplayDecorationSupport in GL

Previously we were using an EGLConfig that is out of line with the spec
in order to support this. It would be more work to get this to work
properly, and the devices we're shipping with hardware support will
always be using Vulkan in HWUI. Simply disable the feature, so that
such a device can still work when switched to use GL.

Add a new APEX header for querying various system properties. This matches
how libandroid_runtime accesses other HWUI utilities. Currently the new
header only includes one method, but could be expanded in the future to
include other properties.

Bug: 226371798
Test: manual
Change-Id: I276e089ecb68ce1fff58adeb38774f2c860e7cf6
This commit is contained in:
Leon Scroggins III
2022-04-08 15:27:57 -04:00
parent e360c271c6
commit cd9e7b46e6
5 changed files with 65 additions and 0 deletions

View File

@@ -24,7 +24,9 @@
#include <memory>
#include <aidl/android/hardware/graphics/common/PixelFormat.h>
#include <android-base/chrono_utils.h>
#include <android/graphics/properties.h>
#include <android/graphics/region.h>
#include <android/gui/BnScreenCaptureListener.h>
#include <android/hardware/display/IDeviceProductInfoConstants.h>
@@ -1888,6 +1890,11 @@ static jobject nativeGetDisplayDecorationSupport(JNIEnv* env, jclass clazz,
return nullptr;
}
using aidl::android::hardware::graphics::common::PixelFormat;
if (support.value().format == PixelFormat::R_8 && !hwui_uses_vulkan()) {
return nullptr;
}
jobject jDisplayDecorationSupport =
env->NewObject(gDisplayDecorationSupportInfo.clazz, gDisplayDecorationSupportInfo.ctor);
if (jDisplayDecorationSupport == nullptr) {

View File

@@ -249,6 +249,7 @@ cc_defaults {
"apex/android_matrix.cpp",
"apex/android_paint.cpp",
"apex/android_region.cpp",
"apex/properties.cpp",
],
header_libs: ["android_graphics_apex_headers"],

View File

@@ -0,0 +1,32 @@
/*
* Copyright 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_GRAPHICS_PROPERTIES_H
#define ANDROID_GRAPHICS_PROPERTIES_H
#include <cutils/compiler.h>
#include <sys/cdefs.h>
__BEGIN_DECLS
/**
* Returns true if libhwui is using the vulkan backend.
*/
ANDROID_API bool hwui_uses_vulkan();
__END_DECLS
#endif // ANDROID_GRAPHICS_PROPERTIES_H

View File

@@ -0,0 +1,24 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "android/graphics/properties.h"
#include <Properties.h>
bool hwui_uses_vulkan() {
return android::uirenderer::Properties::peekRenderPipelineType() ==
android::uirenderer::RenderPipelineType::SkiaVulkan;
}

View File

@@ -39,6 +39,7 @@ LIBHWUI { # platform-only /* HWUI isn't current a module, so all of these are st
ARegionIterator_next;
ARegionIterator_getRect;
ARegionIterator_getTotalBounds;
hwui_uses_vulkan;
local:
*;
};