diff options
| -rw-r--r-- | cmds/atrace/atrace.rc | 5 | ||||
| -rw-r--r-- | libs/binder/tests/Android.bp | 5 | ||||
| -rw-r--r-- | libs/ui/tests/Android.bp | 11 | ||||
| -rw-r--r-- | services/inputflinger/reader/mapper/CursorInputMapper.cpp | 3 | ||||
| -rw-r--r-- | services/inputflinger/reader/mapper/KeyboardInputMapper.cpp | 3 | ||||
| -rw-r--r-- | services/inputflinger/tests/FakeInputTracingBackend.cpp | 41 | ||||
| -rw-r--r-- | services/inputflinger/tests/FakeInputTracingBackend.h | 13 | ||||
| -rw-r--r-- | services/inputflinger/tests/InputDispatcher_test.cpp | 5 | ||||
| -rw-r--r-- | vulkan/libvulkan/swapchain.cpp | 129 |
9 files changed, 158 insertions, 57 deletions
diff --git a/cmds/atrace/atrace.rc b/cmds/atrace/atrace.rc index 3e6d2e01f8..a3e29a81f1 100644 --- a/cmds/atrace/atrace.rc +++ b/cmds/atrace/atrace.rc @@ -317,7 +317,7 @@ on late-init && property:ro.boot.fastboot.boottrace= # Only create the tracing instance if persist.mm_events.enabled # Attempting to remove the tracing instance after it has been created # will likely fail with EBUSY as it would be in use by traced_probes. -on post-fs-data && property:persist.mm_events.enabled=true +on mm_events_property_available && property:persist.mm_events.enabled=true # Create MM Events Tracing Instance for Kmem Activity Trigger mkdir /sys/kernel/debug/tracing/instances/mm_events 0755 system system mkdir /sys/kernel/tracing/instances/mm_events 0755 system system @@ -402,6 +402,9 @@ on post-fs-data && property:persist.mm_events.enabled=true chmod 0666 /sys/kernel/debug/tracing/instances/mm_events/per_cpu/cpu23/trace chmod 0666 /sys/kernel/tracing/instances/mm_events/per_cpu/cpu23/trace +on property:ro.persistent_properties.ready=true + trigger mm_events_property_available + # Handle hyp tracing instance on late-init && property:ro.boot.hypervisor.vm.supported=1 diff --git a/libs/binder/tests/Android.bp b/libs/binder/tests/Android.bp index aba2319485..2f0987fd1a 100644 --- a/libs/binder/tests/Android.bp +++ b/libs/binder/tests/Android.bp @@ -100,9 +100,14 @@ aidl_interface { enabled: true, platform_apis: true, }, + + // TODO: switch from FileDescriptor to ParcelFileDescriptor ndk: { enabled: false, }, + rust: { + enabled: false, + }, }, } diff --git a/libs/ui/tests/Android.bp b/libs/ui/tests/Android.bp index 8ce017d7a3..9a202150c5 100644 --- a/libs/ui/tests/Android.bp +++ b/libs/ui/tests/Android.bp @@ -54,6 +54,17 @@ cc_test { } cc_test { + name: "DisplayIdentification_test", + shared_libs: ["libui"], + static_libs: ["libgmock"], + srcs: ["DisplayIdentification_test.cpp"], + cflags: [ + "-Wall", + "-Werror", + ], +} + +cc_test { name: "FlattenableHelpers_test", shared_libs: ["libui"], srcs: ["FlattenableHelpers_test.cpp"], diff --git a/services/inputflinger/reader/mapper/CursorInputMapper.cpp b/services/inputflinger/reader/mapper/CursorInputMapper.cpp index 65f69c5155..45f09ae32a 100644 --- a/services/inputflinger/reader/mapper/CursorInputMapper.cpp +++ b/services/inputflinger/reader/mapper/CursorInputMapper.cpp @@ -23,6 +23,7 @@ #include <optional> #include <com_android_input_flags.h> +#include <ftl/enum.h> #include <input/AccelerationCurve.h> #include "CursorButtonAccumulator.h" @@ -136,7 +137,7 @@ void CursorInputMapper::dump(std::string& dump) { dump += StringPrintf(INDENT3 "VWheelScale: %0.3f\n", mVWheelScale); dump += StringPrintf(INDENT3 "HWheelScale: %0.3f\n", mHWheelScale); dump += StringPrintf(INDENT3 "DisplayId: %s\n", toString(mDisplayId).c_str()); - dump += StringPrintf(INDENT3 "Orientation: %d\n", mOrientation); + dump += StringPrintf(INDENT3 "Orientation: %s\n", ftl::enum_string(mOrientation).c_str()); dump += StringPrintf(INDENT3 "ButtonState: 0x%08x\n", mButtonState); dump += StringPrintf(INDENT3 "Down: %s\n", toString(isPointerDown(mButtonState))); dump += StringPrintf(INDENT3 "DownTime: %" PRId64 "\n", mDownTime); diff --git a/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp b/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp index 9e7e956866..738517b67e 100644 --- a/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp +++ b/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp @@ -20,6 +20,7 @@ #include "KeyboardInputMapper.h" +#include <ftl/enum.h> #include <ui/Rotation.h> namespace android { @@ -143,7 +144,7 @@ void KeyboardInputMapper::dump(std::string& dump) { dump += INDENT2 "Keyboard Input Mapper:\n"; dumpParameters(dump); dump += StringPrintf(INDENT3 "KeyboardType: %d\n", mKeyboardType); - dump += StringPrintf(INDENT3 "Orientation: %d\n", getOrientation()); + dump += StringPrintf(INDENT3 "Orientation: %s\n", ftl::enum_string(getOrientation()).c_str()); dump += StringPrintf(INDENT3 "KeyDowns: %zu keys currently down\n", mKeyDowns.size()); dump += StringPrintf(INDENT3 "MetaState: 0x%0x\n", mMetaState); dump += INDENT3 "KeyboardLayoutInfo: "; diff --git a/services/inputflinger/tests/FakeInputTracingBackend.cpp b/services/inputflinger/tests/FakeInputTracingBackend.cpp index 1d2710749b..f4a06f7d28 100644 --- a/services/inputflinger/tests/FakeInputTracingBackend.cpp +++ b/services/inputflinger/tests/FakeInputTracingBackend.cpp @@ -33,18 +33,22 @@ base::ResultError<> error(const std::ostringstream& ss) { return base::ResultError(ss.str(), BAD_VALUE); } +inline auto getId(const trace::TracedEvent& v) { + return std::visit([](const auto& event) { return event.id; }, v); +} + } // namespace // --- VerifyingTrace --- -void VerifyingTrace::expectKeyDispatchTraced(const KeyEvent& event) { +void VerifyingTrace::expectKeyDispatchTraced(const KeyEvent& event, int32_t windowId) { std::scoped_lock lock(mLock); - mExpectedEvents.emplace_back(event); + mExpectedEvents.emplace_back(event, windowId); } -void VerifyingTrace::expectMotionDispatchTraced(const MotionEvent& event) { +void VerifyingTrace::expectMotionDispatchTraced(const MotionEvent& event, int32_t windowId) { std::scoped_lock lock(mLock); - mExpectedEvents.emplace_back(event); + mExpectedEvents.emplace_back(event, windowId); } void VerifyingTrace::verifyExpectedEventsTraced() { @@ -53,9 +57,9 @@ void VerifyingTrace::verifyExpectedEventsTraced() { base::Result<void> result; mEventTracedCondition.wait_for(lock, TRACE_TIMEOUT, [&]() REQUIRES(mLock) { - for (const auto& expectedEvent : mExpectedEvents) { + for (const auto& [expectedEvent, windowId] : mExpectedEvents) { std::visit([&](const auto& event) - REQUIRES(mLock) { result = verifyEventTraced(event); }, + REQUIRES(mLock) { result = verifyEventTraced(event, windowId); }, expectedEvent); if (!result.ok()) { return false; @@ -72,11 +76,13 @@ void VerifyingTrace::verifyExpectedEventsTraced() { void VerifyingTrace::reset() { std::scoped_lock lock(mLock); mTracedEvents.clear(); + mTracedWindowDispatches.clear(); mExpectedEvents.clear(); } template <typename Event> -base::Result<void> VerifyingTrace::verifyEventTraced(const Event& expectedEvent) const { +base::Result<void> VerifyingTrace::verifyEventTraced(const Event& expectedEvent, + int32_t expectedWindowId) const { std::ostringstream msg; auto tracedEventsIt = mTracedEvents.find(expectedEvent.getId()); @@ -87,6 +93,19 @@ base::Result<void> VerifyingTrace::verifyEventTraced(const Event& expectedEvent) return error(msg); } + auto tracedDispatchesIt = + std::find_if(mTracedWindowDispatches.begin(), mTracedWindowDispatches.end(), + [&](const WindowDispatchArgs& args) { + return args.windowId == expectedWindowId && + getId(args.eventEntry) == expectedEvent.getId(); + }); + if (tracedDispatchesIt == mTracedWindowDispatches.end()) { + msg << "Expected dispatch of event with ID 0x" << std::hex << expectedEvent.getId() + << " to window with ID 0x" << expectedWindowId << " to be traced, but it was not." + << "\nExpected event: " << expectedEvent; + return error(msg); + } + return {}; } @@ -108,4 +127,12 @@ void FakeInputTracingBackend::traceMotionEvent(const trace::TracedMotionEvent& e mTrace->mEventTracedCondition.notify_all(); } +void FakeInputTracingBackend::traceWindowDispatch(const WindowDispatchArgs& args) const { + { + std::scoped_lock lock(mTrace->mLock); + mTrace->mTracedWindowDispatches.push_back(args); + } + mTrace->mEventTracedCondition.notify_all(); +} + } // namespace android::inputdispatcher diff --git a/services/inputflinger/tests/FakeInputTracingBackend.h b/services/inputflinger/tests/FakeInputTracingBackend.h index e5dd5469c9..40ca3a29f8 100644 --- a/services/inputflinger/tests/FakeInputTracingBackend.h +++ b/services/inputflinger/tests/FakeInputTracingBackend.h @@ -39,10 +39,10 @@ public: VerifyingTrace() = default; /** Add an expectation for a key event to be traced. */ - void expectKeyDispatchTraced(const KeyEvent& event); + void expectKeyDispatchTraced(const KeyEvent& event, int32_t windowId); /** Add an expectation for a motion event to be traced. */ - void expectMotionDispatchTraced(const MotionEvent& event); + void expectMotionDispatchTraced(const MotionEvent& event, int32_t windowId); /** * Wait and verify that all expected events are traced. @@ -59,14 +59,17 @@ private: std::mutex mLock; std::condition_variable mEventTracedCondition; std::unordered_set<uint32_t /*eventId*/> mTracedEvents GUARDED_BY(mLock); - std::vector<std::variant<KeyEvent, MotionEvent>> mExpectedEvents GUARDED_BY(mLock); + using WindowDispatchArgs = trace::InputTracingBackendInterface::WindowDispatchArgs; + std::vector<WindowDispatchArgs> mTracedWindowDispatches GUARDED_BY(mLock); + std::vector<std::pair<std::variant<KeyEvent, MotionEvent>, int32_t /*windowId*/>> + mExpectedEvents GUARDED_BY(mLock); friend class FakeInputTracingBackend; // Helper to verify that the given event appears as expected in the trace. If the verification // fails, the error message describes why. template <typename Event> - base::Result<void> verifyEventTraced(const Event&) const REQUIRES(mLock); + base::Result<void> verifyEventTraced(const Event&, int32_t windowId) const REQUIRES(mLock); }; /** @@ -82,7 +85,7 @@ private: void traceKeyEvent(const trace::TracedKeyEvent& entry) const override; void traceMotionEvent(const trace::TracedMotionEvent& entry) const override; - void traceWindowDispatch(const WindowDispatchArgs& entry) const override {} + void traceWindowDispatch(const WindowDispatchArgs& entry) const override; }; } // namespace android::inputdispatcher diff --git a/services/inputflinger/tests/InputDispatcher_test.cpp b/services/inputflinger/tests/InputDispatcher_test.cpp index 31c7c67db5..4c455f7804 100644 --- a/services/inputflinger/tests/InputDispatcher_test.cpp +++ b/services/inputflinger/tests/InputDispatcher_test.cpp @@ -1482,11 +1482,12 @@ private: switch (event->getType()) { case InputEventType::KEY: { - gVerifyingTrace->expectKeyDispatchTraced(static_cast<KeyEvent&>(*event)); + gVerifyingTrace->expectKeyDispatchTraced(static_cast<KeyEvent&>(*event), mInfo.id); break; } case InputEventType::MOTION: { - gVerifyingTrace->expectMotionDispatchTraced(static_cast<MotionEvent&>(*event)); + gVerifyingTrace->expectMotionDispatchTraced(static_cast<MotionEvent&>(*event), + mInfo.id); break; } default: diff --git a/vulkan/libvulkan/swapchain.cpp b/vulkan/libvulkan/swapchain.cpp index fe3be45f78..13141933ac 100644 --- a/vulkan/libvulkan/swapchain.cpp +++ b/vulkan/libvulkan/swapchain.cpp @@ -159,6 +159,25 @@ int InvertTransformToNative(VkSurfaceTransformFlagBitsKHR transform) { } } +const static VkColorSpaceKHR colorSpaceSupportedByVkEXTSwapchainColorspace[] = { + VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT, + VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, + VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT, + VK_COLOR_SPACE_BT709_LINEAR_EXT, + VK_COLOR_SPACE_BT709_NONLINEAR_EXT, + VK_COLOR_SPACE_BT2020_LINEAR_EXT, + VK_COLOR_SPACE_HDR10_ST2084_EXT, + VK_COLOR_SPACE_HDR10_HLG_EXT, + VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT, + VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT, + VK_COLOR_SPACE_PASS_THROUGH_EXT, + VK_COLOR_SPACE_DCI_P3_LINEAR_EXT}; + +const static VkColorSpaceKHR + colorSpaceSupportedByVkEXTSwapchainColorspaceOnFP16SurfaceOnly[] = { + VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT, + VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT}; + class TimingInfo { public: TimingInfo(const VkPresentTimeGOOGLE* qp, uint64_t nativeFrameId) @@ -746,16 +765,22 @@ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev, }; if (colorspace_ext) { - all_formats.emplace_back(VkSurfaceFormatKHR{ - VK_FORMAT_R8G8B8A8_UNORM, VK_COLOR_SPACE_PASS_THROUGH_EXT}); - all_formats.emplace_back(VkSurfaceFormatKHR{ - VK_FORMAT_R8G8B8A8_SRGB, VK_COLOR_SPACE_PASS_THROUGH_EXT}); - all_formats.emplace_back(VkSurfaceFormatKHR{ - VK_FORMAT_R8G8B8A8_UNORM, VK_COLOR_SPACE_BT709_LINEAR_EXT}); - all_formats.emplace_back(VkSurfaceFormatKHR{ - VK_FORMAT_R8G8B8A8_UNORM, VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT}); - all_formats.emplace_back(VkSurfaceFormatKHR{ - VK_FORMAT_R8G8B8A8_SRGB, VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT}); + for (VkColorSpaceKHR colorSpace : + colorSpaceSupportedByVkEXTSwapchainColorspace) { + if (GetNativeDataspace(colorSpace, GetNativePixelFormat( + VK_FORMAT_R8G8B8A8_UNORM)) != + DataSpace::UNKNOWN) { + all_formats.emplace_back( + VkSurfaceFormatKHR{VK_FORMAT_R8G8B8A8_UNORM, colorSpace}); + } + + if (GetNativeDataspace(colorSpace, GetNativePixelFormat( + VK_FORMAT_R8G8B8A8_SRGB)) != + DataSpace::UNKNOWN) { + all_formats.emplace_back( + VkSurfaceFormatKHR{VK_FORMAT_R8G8B8A8_SRGB, colorSpace}); + } + } } // NOTE: Any new formats that are added must be coordinated across different @@ -767,9 +792,16 @@ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev, all_formats.emplace_back(VkSurfaceFormatKHR{ VK_FORMAT_R5G6B5_UNORM_PACK16, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}); if (colorspace_ext) { - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R5G6B5_UNORM_PACK16, - VK_COLOR_SPACE_PASS_THROUGH_EXT}); + for (VkColorSpaceKHR colorSpace : + colorSpaceSupportedByVkEXTSwapchainColorspace) { + if (GetNativeDataspace( + colorSpace, + GetNativePixelFormat(VK_FORMAT_R5G6B5_UNORM_PACK16)) != + DataSpace::UNKNOWN) { + all_formats.emplace_back(VkSurfaceFormatKHR{ + VK_FORMAT_R5G6B5_UNORM_PACK16, colorSpace}); + } + } } } @@ -778,21 +810,28 @@ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev, all_formats.emplace_back(VkSurfaceFormatKHR{ VK_FORMAT_R16G16B16A16_SFLOAT, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}); if (colorspace_ext) { - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R16G16B16A16_SFLOAT, - VK_COLOR_SPACE_PASS_THROUGH_EXT}); - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R16G16B16A16_SFLOAT, - VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT}); - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R16G16B16A16_SFLOAT, - VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT}); - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R16G16B16A16_SFLOAT, - VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT}); - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R16G16B16A16_SFLOAT, - VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT}); + for (VkColorSpaceKHR colorSpace : + colorSpaceSupportedByVkEXTSwapchainColorspace) { + if (GetNativeDataspace( + colorSpace, + GetNativePixelFormat(VK_FORMAT_R16G16B16A16_SFLOAT)) != + DataSpace::UNKNOWN) { + all_formats.emplace_back(VkSurfaceFormatKHR{ + VK_FORMAT_R16G16B16A16_SFLOAT, colorSpace}); + } + } + + for ( + VkColorSpaceKHR colorSpace : + colorSpaceSupportedByVkEXTSwapchainColorspaceOnFP16SurfaceOnly) { + if (GetNativeDataspace( + colorSpace, + GetNativePixelFormat(VK_FORMAT_R16G16B16A16_SFLOAT)) != + DataSpace::UNKNOWN) { + all_formats.emplace_back(VkSurfaceFormatKHR{ + VK_FORMAT_R16G16B16A16_SFLOAT, colorSpace}); + } + } } } @@ -802,12 +841,16 @@ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev, VkSurfaceFormatKHR{VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}); if (colorspace_ext) { - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_A2B10G10R10_UNORM_PACK32, - VK_COLOR_SPACE_PASS_THROUGH_EXT}); - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_A2B10G10R10_UNORM_PACK32, - VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT}); + for (VkColorSpaceKHR colorSpace : + colorSpaceSupportedByVkEXTSwapchainColorspace) { + if (GetNativeDataspace( + colorSpace, GetNativePixelFormat( + VK_FORMAT_A2B10G10R10_UNORM_PACK32)) != + DataSpace::UNKNOWN) { + all_formats.emplace_back(VkSurfaceFormatKHR{ + VK_FORMAT_A2B10G10R10_UNORM_PACK32, colorSpace}); + } + } } } @@ -840,12 +883,18 @@ VkResult GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice pdev, VkSurfaceFormatKHR{VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR}); if (colorspace_ext) { - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, - VK_COLOR_SPACE_PASS_THROUGH_EXT}); - all_formats.emplace_back( - VkSurfaceFormatKHR{VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, - VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT}); + for (VkColorSpaceKHR colorSpace : + colorSpaceSupportedByVkEXTSwapchainColorspace) { + if (GetNativeDataspace( + colorSpace, + GetNativePixelFormat( + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16)) != + DataSpace::UNKNOWN) { + all_formats.emplace_back(VkSurfaceFormatKHR{ + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, + colorSpace}); + } + } } } |