diff options
| -rw-r--r-- | cmds/dumpstate/dumpstate.cpp | 24 | ||||
| -rw-r--r-- | libs/nativewindow/ANativeWindow.cpp | 4 | ||||
| -rw-r--r-- | libs/nativewindow/Android.bp | 1 | ||||
| -rw-r--r-- | libs/ui/Android.bp | 1 | ||||
| -rw-r--r-- | libs/ui/Gralloc1On0Adapter.cpp | 13 | ||||
| -rw-r--r-- | libs/ui/GraphicBuffer.cpp | 8 | ||||
| -rw-r--r-- | vulkan/libvulkan/Android.bp | 1 | ||||
| -rw-r--r-- | vulkan/libvulkan/driver.cpp | 47 | ||||
| -rw-r--r-- | vulkan/libvulkan/swapchain.cpp | 6 |
9 files changed, 69 insertions, 36 deletions
diff --git a/cmds/dumpstate/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp index f898b9049f..cba8f36cc9 100644 --- a/cmds/dumpstate/dumpstate.cpp +++ b/cmds/dumpstate/dumpstate.cpp @@ -112,6 +112,7 @@ static const std::string ZIP_ROOT_DIR = "FS"; // Must be hardcoded because dumpstate HAL implementation need SELinux access to it static const std::string kDumpstateBoardPath = "/bugreports/dumpstate_board.txt"; +static const std::string kLsHalDebugPath = "/bugreports/dumpstate_lshal.txt"; static constexpr char PROPERTY_EXTRA_OPTIONS[] = "dumpstate.options"; static constexpr char PROPERTY_LAST_ID[] = "dumpstate.last_id"; @@ -962,7 +963,19 @@ static void dumpstate() { {"ps", "-A", "-T", "-Z", "-O", "pri,nice,rtprio,sched,pcy"}); RunCommand("LIBRANK", {"librank"}, CommandOptions::AS_ROOT); - RunCommand("HARDWARE HALS", {"lshal"}, CommandOptions::AS_ROOT); + if (ds.IsZipping()) { + RunCommand( + "HARDWARE HALS", + {"lshal", std::string("--debug=") + kLsHalDebugPath}, + CommandOptions::AS_ROOT); + + ds.AddZipEntry("lshal-debug.txt", kLsHalDebugPath); + + unlink(kLsHalDebugPath.c_str()); + } else { + RunCommand( + "HARDWARE HALS", {"lshal", "--debug"}, CommandOptions::AS_ROOT); + } RunCommand("PRINTENV", {"printenv"}); RunCommand("NETSTAT", {"netstat", "-nW"}); @@ -980,8 +993,13 @@ static void dumpstate() { for_each_tid(show_wchan, "BLOCKED PROCESS WAIT-CHANNELS"); for_each_pid(show_showtime, "PROCESS TIMES (pid cmd user system iowait+percentage)"); - /* Dump Bluetooth HCI logs */ - ds.AddDir("/data/misc/bluetooth/logs", true); + if (true) { + // TODO: temporary disabled because /data/misc/bluetooth/logs/btsnoop_hci.log can be huge + MYLOGD("Skipping /data/misc/bluetooth/logs"); + } else { + /* Dump Bluetooth HCI logs */ + ds.AddDir("/data/misc/bluetooth/logs", true); + } if (!ds.do_early_screenshot_) { MYLOGI("taking late screenshot\n"); diff --git a/libs/nativewindow/ANativeWindow.cpp b/libs/nativewindow/ANativeWindow.cpp index a95612220c..c0c4ac0f04 100644 --- a/libs/nativewindow/ANativeWindow.cpp +++ b/libs/nativewindow/ANativeWindow.cpp @@ -18,6 +18,7 @@ #include <android/native_window.h> +#include <grallocusage/GrallocUsageConversion.h> // from nativewindow/includes/system/window.h // (not to be confused with the compatibility-only window.h from system/core/includes) #include <system/window.h> @@ -187,8 +188,7 @@ int ANativeWindow_cancelBuffer(ANativeWindow* window, ANativeWindowBuffer* buffe int ANativeWindow_setUsage(ANativeWindow* window, uint64_t usage0, uint64_t usage1) { uint64_t pUsage, cUsage; AHardwareBuffer_convertToGrallocUsageBits(&pUsage, &cUsage, usage0, usage1); - uint32_t gralloc_usage = uint32_t(pUsage | cUsage); - return native_window_set_usage(window, gralloc_usage); + return native_window_set_usage(window, android_convertGralloc1To0Usage(pUsage, cUsage)); } int ANativeWindow_setBufferCount(ANativeWindow* window, size_t bufferCount) { diff --git a/libs/nativewindow/Android.bp b/libs/nativewindow/Android.bp index 2668927b5b..90fb4b617b 100644 --- a/libs/nativewindow/Android.bp +++ b/libs/nativewindow/Android.bp @@ -53,6 +53,7 @@ cc_library { static_libs: [ "libarect", + "libgrallocusage", ], // headers we include in our public headers diff --git a/libs/ui/Android.bp b/libs/ui/Android.bp index d1bfa18e5c..80fb064c85 100644 --- a/libs/ui/Android.bp +++ b/libs/ui/Android.bp @@ -78,6 +78,7 @@ cc_library_shared { static_libs: [ "libarect", + "libgrallocusage", "libmath", ], diff --git a/libs/ui/Gralloc1On0Adapter.cpp b/libs/ui/Gralloc1On0Adapter.cpp index b8bc6c425a..bd7c6a1a46 100644 --- a/libs/ui/Gralloc1On0Adapter.cpp +++ b/libs/ui/Gralloc1On0Adapter.cpp @@ -20,6 +20,7 @@ #include <ui/Gralloc1On0Adapter.h> +#include <grallocusage/GrallocUsageConversion.h> #include <hardware/gralloc.h> @@ -248,8 +249,8 @@ gralloc1_error_t Gralloc1On0Adapter::allocate( // pointer, which only occurs when mDevice has been loaded successfully and // we are permitted to allocate - int usage = static_cast<int>(descriptor->producerUsage) | - static_cast<int>(descriptor->consumerUsage); + int usage = android_convertGralloc1To0Usage(descriptor->producerUsage, + descriptor->consumerUsage); buffer_handle_t handle = nullptr; int stride = 0; ALOGV("Calling alloc(%p, %u, %u, %i, %u)", mDevice, descriptor->width, @@ -374,7 +375,7 @@ gralloc1_error_t Gralloc1On0Adapter::lock( { if (mMinorVersion >= 3) { int result = mModule->lockAsync(mModule, buffer->getHandle(), - static_cast<int32_t>(producerUsage | consumerUsage), + android_convertGralloc1To0Usage(producerUsage, consumerUsage), accessRegion.left, accessRegion.top, accessRegion.width, accessRegion.height, outData, acquireFence->dup()); if (result != 0) { @@ -383,7 +384,7 @@ gralloc1_error_t Gralloc1On0Adapter::lock( } else { acquireFence->waitForever("Gralloc1On0Adapter::lock"); int result = mModule->lock(mModule, buffer->getHandle(), - static_cast<int32_t>(producerUsage | consumerUsage), + android_convertGralloc1To0Usage(producerUsage, consumerUsage), accessRegion.left, accessRegion.top, accessRegion.width, accessRegion.height, outData); ALOGV("gralloc0 lock returned %d", result); @@ -415,7 +416,7 @@ gralloc1_error_t Gralloc1On0Adapter::lockYCbCr( { if (mMinorVersion >= 3 && mModule->lockAsync_ycbcr) { int result = mModule->lockAsync_ycbcr(mModule, buffer->getHandle(), - static_cast<int>(producerUsage | consumerUsage), + android_convertGralloc1To0Usage(producerUsage, consumerUsage), accessRegion.left, accessRegion.top, accessRegion.width, accessRegion.height, outData, acquireFence->dup()); if (result != 0) { @@ -424,7 +425,7 @@ gralloc1_error_t Gralloc1On0Adapter::lockYCbCr( } else if (mModule->lock_ycbcr) { acquireFence->waitForever("Gralloc1On0Adapter::lockYCbCr"); int result = mModule->lock_ycbcr(mModule, buffer->getHandle(), - static_cast<int>(producerUsage | consumerUsage), + android_convertGralloc1To0Usage(producerUsage, consumerUsage), accessRegion.left, accessRegion.top, accessRegion.width, accessRegion.height, outData); ALOGV("gralloc0 lockYCbCr returned %d", result); diff --git a/libs/ui/GraphicBuffer.cpp b/libs/ui/GraphicBuffer.cpp index 9006178d30..6e8473018a 100644 --- a/libs/ui/GraphicBuffer.cpp +++ b/libs/ui/GraphicBuffer.cpp @@ -16,12 +16,12 @@ #define LOG_TAG "GraphicBuffer" -#include <cutils/atomic.h> - #include <ui/GraphicBuffer.h> #include <cutils/atomic.h> +#include <grallocusage/GrallocUsageConversion.h> + #include <ui/GrallocMapper.h> #include <ui/GraphicBufferAllocator.h> #include <ui/GraphicBufferMapper.h> @@ -114,7 +114,7 @@ GraphicBuffer::GraphicBuffer(uint32_t inWidth, uint32_t inHeight, stride = static_cast<int>(inStride); format = inFormat; layerCount = inLayerCount; - usage = static_cast<int>(inConsumerUsage | inProducerUsage); + usage = android_convertGralloc1To0Usage(inProducerUsage, inConsumerUsage); handle = inHandle; } @@ -221,7 +221,7 @@ status_t GraphicBuffer::initSize(uint32_t inWidth, uint32_t inHeight, height = static_cast<int>(inHeight); format = inFormat; layerCount = inLayerCount; - usage = static_cast<int>(inProducerUsage | inConsumerUsage); + usage = android_convertGralloc1To0Usage(inProducerUsage, inConsumerUsage); stride = static_cast<int>(outStride); } return err; diff --git a/vulkan/libvulkan/Android.bp b/vulkan/libvulkan/Android.bp index 2fe880aad3..9444da5f26 100644 --- a/vulkan/libvulkan/Android.bp +++ b/vulkan/libvulkan/Android.bp @@ -79,4 +79,5 @@ cc_library_shared { "libcutils", "libz", ], + static_libs: ["libgrallocusage"], } diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp index dbb217d956..5fbf5f52d1 100644 --- a/vulkan/libvulkan/driver.cpp +++ b/vulkan/libvulkan/driver.cpp @@ -34,6 +34,9 @@ #include "driver.h" #include "stubhal.h" +// Set to true to enable exposing unratified extensions for development +static const bool kEnableUnratifiedExtensions = false; + // #define ENABLE_ALLOC_CALLSTACKS 1 #if ENABLE_ALLOC_CALLSTACKS #include <utils/CallStack.h> @@ -675,16 +678,24 @@ VkResult EnumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties) { - static const std::array<VkExtensionProperties, 4> loader_extensions = {{ - // WSI extensions - {VK_KHR_SURFACE_EXTENSION_NAME, VK_KHR_SURFACE_SPEC_VERSION}, - {VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, - VK_KHR_ANDROID_SURFACE_SPEC_VERSION}, - {VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, - VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION}, - {VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, - VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION}, - }}; + + android::Vector<VkExtensionProperties> loader_extensions; + loader_extensions.push_back({ + VK_KHR_SURFACE_EXTENSION_NAME, + VK_KHR_SURFACE_SPEC_VERSION}); + loader_extensions.push_back({ + VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, + VK_KHR_ANDROID_SURFACE_SPEC_VERSION}); + loader_extensions.push_back({ + VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, + VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION}); + + if (kEnableUnratifiedExtensions) { + loader_extensions.push_back({ + VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, + VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION}); + } + static const VkExtensionProperties loader_debug_report_extension = { VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION, }; @@ -782,13 +793,15 @@ VkResult EnumerateDeviceExtensionProperties( VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME, VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION}); - // conditionally add shared_presentable_image if supportable - VkPhysicalDevicePresentationPropertiesANDROID presentation_properties; - if (QueryPresentationProperties(physicalDevice, &presentation_properties) && - presentation_properties.sharedImage) { - loader_extensions.push_back({ - VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, - VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION}); + if (kEnableUnratifiedExtensions) { + // conditionally add shared_presentable_image if supportable + VkPhysicalDevicePresentationPropertiesANDROID presentation_properties; + if (QueryPresentationProperties(physicalDevice, &presentation_properties) && + presentation_properties.sharedImage) { + loader_extensions.push_back({ + VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME, + VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION}); + } } // enumerate our extensions first diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp index 5017e143e2..5574da2165 100644 --- a/vulkan/libvulkan/swapchain.cpp +++ b/vulkan/libvulkan/swapchain.cpp @@ -16,6 +16,7 @@ #include <algorithm> +#include <grallocusage/GrallocUsageConversion.h> #include <log/log.h> #include <ui/BufferQueueDefs.h> #include <sync/sync.h> @@ -995,11 +996,8 @@ VkResult CreateSwapchainKHR(VkDevice device, ALOGE("vkGetSwapchainGrallocUsage2ANDROID failed: %d", result); return VK_ERROR_SURFACE_LOST_KHR; } - // TODO: This is the same translation done by Gralloc1On0Adapter. - // Remove it once ANativeWindow has been updated to take gralloc1-style - // usages. gralloc_usage = - static_cast<int>(consumer_usage) | static_cast<int>(producer_usage); + android_convertGralloc1To0Usage(producer_usage, consumer_usage); } else if (dispatch.GetSwapchainGrallocUsageANDROID) { result = dispatch.GetSwapchainGrallocUsageANDROID( device, create_info->imageFormat, create_info->imageUsage, |