Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[chrome.angle] Force Pure RISCV64 Support #4

Conversation

McKnight22
Copy link

No description provided.

@McKnight22 McKnight22 requested a review from unicornx March 22, 2023 14:18
@unicornx unicornx changed the title [Android] Force Pure RISCV64 Support [chrome.angle] Force Pure RISCV64 Support Mar 23, 2023
@unicornx
Copy link

I changed the tile of this PR to keep align with other PRs for chrome porting work, please check it out.

@@ -46,14 +46,14 @@ if (enable_java_templates) {
deps = [ ":${invoker.package_name}_assets" ]
if (symbol_level != 0) {
deps += [ ":compressed_symbols" ]
if (android_64bit_target_cpu) {
if (android_64bit_target_cpu && !invoker.skip_secondary_abi) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please clarify why you find out these two changes.

Copy link
Author

@McKnight22 McKnight22 Mar 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please clarify why you find out these two changes.

For these 2 changes, it's due to android_secondary_abi_toolchain introduced here and android_secondary_abi_toolchain should be skipped for Android RISCV64 target to enable pure RISCV64 support.

utilize the definition of skip_secondary_abi_for_cq and android_secondary_abi_cpu directly for Android RISCV64

Signed-off-by: McKnight22 <[email protected]>
@@ -46,14 +46,14 @@ if (enable_java_templates) {
deps = [ ":${invoker.package_name}_assets" ]
if (symbol_level != 0) {
deps += [ ":compressed_symbols" ]
if (android_64bit_target_cpu) {
if (android_64bit_target_cpu && defined(android_secondary_abi_cpu)) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2nd review:
建议用 android_secondary_abi_toolchain, 和下面代码结合比较紧密,好理解。

deps += [ ":compressed_symbols($android_secondary_abi_toolchain)" ]
}
}

uncompress_shared_libraries = true

if (android_64bit_target_cpu) {
if (android_64bit_target_cpu && defined(android_secondary_abi_cpu)) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2nd review:
建议用 android_secondary_abi_toolchain, 和下面代码结合比较紧密,好理解。

@unicornx
Copy link

先关闭这个 pr,新建 #5 作为总结性提交。

@unicornx unicornx closed this Mar 29, 2023
unicornx pushed a commit that referenced this pull request May 22, 2023
This CL improves performance compared to the existing code as well as
allows using non-std mutex implementations. Also acts as a base for
future changes.

CL adds new build option:
    angle_enable_global_mutex_recursion = is_android && angle_enable_vulkan

"mutex_recursion" work same way as `std::recursive_mutex` before. It
will help in situations when Vulkan API may return back to the ANGLE.
For example: RenderDoc layer EGL deadlock.
Automatic loading of "libVkLayer_GLES_RenderDoc.so" layer causes
deadlock in EGL.
Recursion stack:
    #1 pc 000000000029ea80  /vendor/lib64/egl/libGLESv2_angle.so (egl::GlobalMutexHelper::lock(int)+596)
    #2 pc 000000000029c59c  /vendor/lib64/egl/libGLESv2_angle.so (EGL_GetError+32)

    #4 pc 0000000000062368  /system/lib64/libEGL.so (eglQueryString+20)
    #5 pc 0000000000508fec  /data/local/debug/vulkan/libVkLayer_GLES_RenderDoc.so

    google#20 pc 0000000000016690  /system/lib64/libvulkan.so (vulkan::api::EnumerateInstanceLayerProperties(unsigned int*, VkLayerProperties*)+40)
    google#21 pc 00000000005aa030  /vendor/lib64/egl/libGLESv2_angle.so (rx::RendererVk::initialize(rx::DisplayVk*, egl::Display*, char const*, char const*)+292)
    google#26 pc 000000000029c7e8  /vendor/lib64/egl/libGLESv2_angle.so (EGL_Initialize+192)

Additionally, recursive mutex will partially solve Android
SurfaceTexture deadlock (angleproject:4354).

Some performance numbers for 1000'000 `eglGetError()` calls.

    Mutex                                       Time (ms.)

        Android S906B

    egl::GetGlobalMutex()(std::recursive_mutex)    41.4

    (Default)   GlobalMutex (std::recursive_mutex) 39.1

    (Recursive) GlobalMutex (std::mutex)           34.9
    (Debug)     GlobalMutex (std::mutex)           34.7
    (Default)   GlobalMutex (std::mutex)           34.4

        Windows

    egl::GetGlobalMutex()(std::recursive_mutex)    20.5

    (Default)   GlobalMutex (std::recursive_mutex) 20.0

    (Recursive) GlobalMutex (std::mutex)           21.9
    (Debug)     GlobalMutex (std::mutex)           20.5
    (Default)   GlobalMutex (std::mutex)           19.9

Note: Recursive GlobalMutex enabled only for Android Vulkan by default.
Original fix:
    https://chromium-review.googlesource.com/c/angle/angle/+/2029218

Bug: angleproject:8101
Bug: angleproject:4354
Test: angle_unittests --gtest_filter=GlobalMutexTest.*
Change-Id: I9e9d9b5c598ad1177ffa147ea690bd955946a712
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4401940
Commit-Queue: Igor Nazarov <[email protected]>
Reviewed-by: Charlie Lao <[email protected]>
Reviewed-by: Shahbaz Youssefi <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants