New issue
Advanced search Search tips

Issue 761432 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 1
Type: Feature
Proj-XR

Blocked on:
issue 771171

Blocking:
issue 761436
issue 761462
issue 791755



Sign in to add a comment

Implement AHardwareBuffer-backed GPUMemoryBuffer for Android O

Project Member Reported by klausw@chromium.org, Sep 1 2017

Issue description

Android O's NDK supports AHardwareBuffer objects for cross-process and cross-GL-context shareable images. This seems like a natural fit for the existing GPUMemoryBuffer abstraction that's used on other platforms, and would enable a more efficient WebVR rendering path.

From https://developer.android.com/ndk/guides/stable_apis.html#a26

    The native hardware buffer API (<android/hardware_buffer.h>) lets you
    directly allocate buffers to create your own pipelines for cross-process
    buffer management. You can allocate a AHardwareBuffer struct and use it
    to obtain an EGLClientBuffer resource type via the
    eglGetNativeClientBufferANDROID extension. You can pass that buffer to
    eglCreateImageKHR to create an EGLImage resource type, which may then be
    bound to a texture via glEGLImageTargetTexture2DOES on supported
    devices.  This can be useful for creating textures that may be shared
    cross-process.

See also https://developer.android.com/ndk/reference/hardware__buffer_8h.html

Currently, Chrome's cross-context image sharing works via Surface/SurfaceTexture pairs (GLConsumer). This has the major restriction that drawing to the Surface must use the current context's default render buffer, it can't be bound to a framebuffer object (FBO). Changing the active Surface is only possible if properties such as depth size and multisample count match the current context properties, this conflicts with context virtualization which is required for Qualcomm chipsets (issue 691102)

Using AHardwareBuffer removes this restriction, they can be bound to an FBO without any context compatibility restrictions. This would make it possible to use them for WebVR rendering within a virtualized context, without needing changes to non-VR WebGL rendering.
 
Blocking: 761436
Blocking: 761462

Comment 3 by xing...@intel.com, Sep 5 2017

Cc: xing...@intel.com

Comment 4 by enne@chromium.org, Sep 5 2017

Labels: -Type-Bug Type-Feature
Status: Assigned (was: Untriaged)
Project Member

Comment 5 by bugdroid1@chromium.org, Sep 25 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4c9604cee829f5c73c144f232944da02eb6e0bff

commit 4c9604cee829f5c73c144f232944da02eb6e0bff
Author: Klaus Weidner <klausw@chromium.org>
Date: Mon Sep 25 18:44:08 2017

Extract ResizeForWebVR method for future reuse

The WebVR buffer resizing code is currently rather entangled within DrawFrame,
making it hard to do this at a different point of the frame lifecycle in the
future. Currently this should be a no-op change, but it'll be useful for the
in-progress AHardwareBuffer changes later, and I think it also makes the code
clearer overall.

BUG= 761432 

Change-Id: I85eb687f37eee5b7cf744b19e5e93dd7094b4601
Reviewed-on: https://chromium-review.googlesource.com/679746
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Michael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#504111}
[modify] https://crrev.com/4c9604cee829f5c73c144f232944da02eb6e0bff/chrome/browser/android/vr_shell/vr_shell_gl.cc
[modify] https://crrev.com/4c9604cee829f5c73c144f232944da02eb6e0bff/chrome/browser/android/vr_shell/vr_shell_gl.h

Project Member

Comment 6 by bugdroid1@chromium.org, Oct 17 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/475756baf8cfdf6f0f0c846394fd557df3f51f6b

commit 475756baf8cfdf6f0f0c846394fd557df3f51f6b
Author: Klaus Weidner <klausw@chromium.org>
Date: Tue Oct 17 02:43:00 2017

egl: update Khronos EGL headers

This picks up the EGL_ANDROID_get_native_client_buffer extension for
eglGetNativeClientBufferANDROID, and declares struct AHardwareBuffer.

Preserve Chromium-specific support for EGL_EXT_image_flush_external
extension, and remove "Chromium-specific" comment for Ozone types such
as EGLNativeDisplayType since that section is now upstreamed.

Also ran "git cl format ." but reverted the changes to the
autogenerated date header.

BUG= 761432 

Change-Id: If911142151ecfc14b1eba6cf9bc8fc72e8ccf672
Reviewed-on: https://chromium-review.googlesource.com/721600
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509239}
[modify] https://crrev.com/475756baf8cfdf6f0f0c846394fd557df3f51f6b/third_party/khronos/EGL/egl.h
[modify] https://crrev.com/475756baf8cfdf6f0f0c846394fd557df3f51f6b/third_party/khronos/EGL/eglext.h
[modify] https://crrev.com/475756baf8cfdf6f0f0c846394fd557df3f51f6b/third_party/khronos/EGL/eglplatform.h
[modify] https://crrev.com/475756baf8cfdf6f0f0c846394fd557df3f51f6b/third_party/khronos/README.chromium

Comment 7 by vmi...@chromium.org, Oct 17 2017

Cc: sunn...@chromium.org piman@chromium.org ericrk@chromium.org vmi...@chromium.org
fyi
Project Member

Comment 8 by bugdroid1@chromium.org, Oct 17 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/7f73a6e892b01a4617e988e5fd5e38a5dcecc480

commit 7f73a6e892b01a4617e988e5fd5e38a5dcecc480
Author: Klaus Weidner <klausw@chromium.org>
Date: Tue Oct 17 18:47:50 2017

GL binding for eglGetNativeClientBufferANDROID extension

This is one of the native GL methods needed for working with
AHardwareBuffer objects.

From https://developer.android.com/ndk/guides/stable_apis.html#a26

	The native hardware buffer API (<android/hardware_buffer.h>)
	lets you directly allocate buffers to create your own
	pipelines for cross-process buffer management. You
	can allocate a AHardwareBuffer struct and use it
	to obtain an EGLClientBuffer resource type via the
	eglGetNativeClientBufferANDROID extension. You can pass
	that buffer to eglCreateImageKHR to create an EGLImage
	resource type, which may then be bound to a texture
	via glEGLImageTargetTexture2DOES on supported devices.
	This can be useful for creating textures that may be shared
	cross-process.

Documented at:
https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt

BUG= 761432 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I252641374dd0c6d7df7e02828c3572bedbecb1fc
Reviewed-on: https://chromium-review.googlesource.com/679961
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509456}
[modify] https://crrev.com/7f73a6e892b01a4617e988e5fd5e38a5dcecc480/ui/gl/generate_bindings.py
[modify] https://crrev.com/7f73a6e892b01a4617e988e5fd5e38a5dcecc480/ui/gl/gl_bindings_api_autogen_egl.h
[modify] https://crrev.com/7f73a6e892b01a4617e988e5fd5e38a5dcecc480/ui/gl/gl_bindings_autogen_egl.cc
[modify] https://crrev.com/7f73a6e892b01a4617e988e5fd5e38a5dcecc480/ui/gl/gl_bindings_autogen_egl.h

Project Member

Comment 9 by bugdroid1@chromium.org, Oct 18 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/caa3aed99c42258fd73f34c32f1569d9f4562a66

commit caa3aed99c42258fd73f34c32f1569d9f4562a66
Author: Klaus Weidner <klausw@chromium.org>
Date: Wed Oct 18 20:38:40 2017

GL binding for eglDupNativeFenceFDANDROID

(Part of the "AHardwareBuffer-backed GPUMemoryBuffer" patch series)

This extension supports EGL fences that work cross-process and
cross-share-group. This is needed for working with AHardwareBuffer
objects to synchronize content access via server wait on a file
descriptor-backed fence.

See also https://chromium-review.googlesource.com/679961

https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt

    This extension enables the creation of EGL fence sync objects
    that are associated with a native synchronization fence object
    that is referenced using a file descriptor.  These EGL fence sync
    objects have nearly identical semantics to those defined by the
    KHR_fence_sync extension, except that they have an additional
    attribute storing the file descriptor referring to the native
    fence object.

    This extension assumes the existence of a native fence
    synchronization object that behaves similarly to an EGL fence
    sync object.  These native objects must have a signal status
    like that of an EGLSyncKHR object that indicates whether the
    fence has ever been signaled.  Once signaled the native object's
    signal status may not change again.

BUG= 761432 , 775707 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Id91854e4c85a5b334bf6b8b89cb29069f6e890f7
Reviewed-on: https://chromium-review.googlesource.com/680314
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509856}
[modify] https://crrev.com/caa3aed99c42258fd73f34c32f1569d9f4562a66/ui/gl/generate_bindings.py
[modify] https://crrev.com/caa3aed99c42258fd73f34c32f1569d9f4562a66/ui/gl/gl_bindings_api_autogen_egl.h
[modify] https://crrev.com/caa3aed99c42258fd73f34c32f1569d9f4562a66/ui/gl/gl_bindings_autogen_egl.cc
[modify] https://crrev.com/caa3aed99c42258fd73f34c32f1569d9f4562a66/ui/gl/gl_bindings_autogen_egl.h
[modify] https://crrev.com/caa3aed99c42258fd73f34c32f1569d9f4562a66/ui/gl/gl_enums_implementation_autogen.h
[modify] https://crrev.com/caa3aed99c42258fd73f34c32f1569d9f4562a66/ui/gl/gl_surface_egl.cc
[modify] https://crrev.com/caa3aed99c42258fd73f34c32f1569d9f4562a66/ui/gl/gl_surface_egl.h

Labels: -M-63 M-64
Blockedon: 771171
Project Member

Comment 12 by bugdroid1@chromium.org, Nov 1 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/52ed000082f6d79e23446f2f7386132c1c68996e

commit 52ed000082f6d79e23446f2f7386132c1c68996e
Author: Klaus Weidner <klausw@chromium.org>
Date: Wed Nov 01 03:11:50 2017

GMB SharedMemory: add usage argument consistently

Add a gfx::BufferUsage parameter to the various creation methods in
gpu_memory_buffer_impl_shared_memory for consistency and to facilitate
sharing tests with implementations that use it. It appears that all
call sites already have a "usage" parameter in scope, so it just
needed to get passed through.

(Split from http://crrev.com/c/680100 for AHardwareBuffer-based
GpuMemoryBuffer)

BUG= 761432 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I33ab6255b4b0675fa5fb30b71ddbd10015bdae34
Reviewed-on: https://chromium-review.googlesource.com/747601
Reviewed-by: David Reveman <reveman@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513062}
[modify] https://crrev.com/52ed000082f6d79e23446f2f7386132c1c68996e/components/viz/host/server_gpu_memory_buffer_manager.cc
[modify] https://crrev.com/52ed000082f6d79e23446f2f7386132c1c68996e/content/browser/gpu/browser_gpu_memory_buffer_manager.cc
[modify] https://crrev.com/52ed000082f6d79e23446f2f7386132c1c68996e/gpu/ipc/client/gpu_memory_buffer_impl_shared_memory.cc
[modify] https://crrev.com/52ed000082f6d79e23446f2f7386132c1c68996e/gpu/ipc/client/gpu_memory_buffer_impl_shared_memory.h
[modify] https://crrev.com/52ed000082f6d79e23446f2f7386132c1c68996e/gpu/ipc/client/gpu_memory_buffer_impl_shared_memory_unittest.cc

Project Member

Comment 13 by bugdroid1@chromium.org, Nov 1 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/75cf986f6e965de96010eabafbe10ce386d24550

commit 75cf986f6e965de96010eabafbe10ce386d24550
Author: Klaus Weidner <klausw@chromium.org>
Date: Wed Nov 01 20:51:30 2017

Move GMB shared_memory Create unittest to template

In preparation for sharing the test, move the Create test to
the test template.

(Split from http://crrev.com/c/680100 for AHardwareBuffer-based
GpuMemoryBuffer)

BUG= 761432 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I766f115cde35777a93351a57c7a5fa64d62f2368
Reviewed-on: https://chromium-review.googlesource.com/747604
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513258}
[modify] https://crrev.com/75cf986f6e965de96010eabafbe10ce386d24550/gpu/ipc/client/gpu_memory_buffer_impl_shared_memory_unittest.cc
[modify] https://crrev.com/75cf986f6e965de96010eabafbe10ce386d24550/gpu/ipc/client/gpu_memory_buffer_impl_test_template.h

Project Member

Comment 14 by bugdroid1@chromium.org, Nov 3 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/3824a888dd6ed3014445573d0944508f10318b9a

commit 3824a888dd6ed3014445573d0944508f10318b9a
Author: Klaus Weidner <klausw@chromium.org>
Date: Fri Nov 03 06:24:57 2017

AHardwareBuffer-based GpuMemoryBuffer implementation

AHardwareBuffer support is included on Android O and up. The NDK
functions are included as of platform level 26, but Chromium currently
doesn't use this as the target level, so we have to use dynamic
loading to get the symbols at runtime.

This is encapsulated in gfx::AndroidHardwareBufferCompat which makes
it a bit easier to work with them across Android versions.

The implementation adds a new ANDROID_HARDWARE_BUFFER subtype to the
SharedMemoryHandle Android implementation in addition to the pre-existing
ashmem support, including IPC transport via a SocketPair. It uses one end
to write the native object using a NDK call, and the other end is a file
descriptor sendable via usual IPC methods from which the receiver can fetch
the object.

BUG= 761432 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I9edfa733ffccea21dd58a3940aa96cb6955c8f09
Reviewed-on: https://chromium-review.googlesource.com/680100
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Mark Mentovai <mark@chromium.org>
Reviewed-by: Ken Rockot <rockot@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513710}
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/base/BUILD.gn
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/base/android/android_hardware_buffer_abi.h
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/base/android/android_hardware_buffer_compat.cc
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/base/android/android_hardware_buffer_compat.h
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/base/android/build_info.h
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/base/memory/shared_memory_handle.h
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/base/memory/shared_memory_handle_android.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/BUILD.gn
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/client/BUILD.gn
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/client/gpu_memory_buffer_impl.cc
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/client/gpu_memory_buffer_impl_android_hardware_buffer.cc
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/client/gpu_memory_buffer_impl_android_hardware_buffer.h
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/client/gpu_memory_buffer_impl_android_hardware_buffer_unittest.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/common/gpu_memory_buffer_support.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/host/gpu_memory_buffer_support.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/service/BUILD.gn
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/service/gpu_memory_buffer_factory.cc
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/service/gpu_memory_buffer_factory_android_hardware_buffer.cc
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/gpu/ipc/service/gpu_memory_buffer_factory_android_hardware_buffer.h
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ipc/ipc_message_utils.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ipc/ipc_message_utils.h
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gfx/gpu_memory_buffer.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gfx/gpu_memory_buffer.h
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gfx/mojo/buffer_types.mojom
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gfx/mojo/buffer_types_struct_traits.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gfx/mojo/buffer_types_struct_traits.h
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gl/BUILD.gn
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gl/gl_image_ahardwarebuffer.cc
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gl/gl_image_ahardwarebuffer.h
[add] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gl/gl_image_ahardwarebuffer_unittest.cc
[modify] https://crrev.com/3824a888dd6ed3014445573d0944508f10318b9a/ui/gl/gl_image_egl.h

Project Member

Comment 15 by bugdroid1@chromium.org, Nov 23 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a315971d9453e4d28f8ae6f84e1293a4ec08fdd3

commit a315971d9453e4d28f8ae6f84e1293a4ec08fdd3
Author: Klaus Weidner <klausw@chromium.org>
Date: Thu Nov 23 02:44:24 2017

[vr] Fix AHardwareBuffer GpuMemoryBuffer lifecycle

Creating an AHardwareBuffer-backed SharedMemoryHandle from a file descriptor
takes ownership and needs to auto-close that FD when requested, specifically
when constructed from IPC.

Also fix a reference leak when the received AHardwareBuffer is used to
create an EGLImage since that also increments the refcount.

BUG= 761432 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Ia7939ca4e846b1348b0a52444b551be65377ef6f
Reviewed-on: https://chromium-review.googlesource.com/783845
Reviewed-by: agrieve <agrieve@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#518828}
[modify] https://crrev.com/a315971d9453e4d28f8ae6f84e1293a4ec08fdd3/base/memory/shared_memory_handle_android.cc
[modify] https://crrev.com/a315971d9453e4d28f8ae6f84e1293a4ec08fdd3/gpu/ipc/service/gpu_memory_buffer_factory_android_hardware_buffer.cc

Blocking: 791755
Project Member

Comment 17 by bugdroid1@chromium.org, Dec 4 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/409774e95d22cffc51877e176045a82ef6f65907

commit 409774e95d22cffc51877e176045a82ef6f65907
Author: Klaus Weidner <klausw@chromium.org>
Date: Mon Dec 04 23:57:15 2017

Disable SupportOwnOffscreenSurface for WebGL

The WebVRExperimentalRendering flag is being repurposed for other
rendering optimizations, and activating the own offscreen surface was
causing glitches.

BUG= 761432 ,691102, 791755 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I15ab8ee3c3370968ce5ea2ea6a170f6282858ad1
Reviewed-on: https://chromium-review.googlesource.com/802631
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521535}
[modify] https://crrev.com/409774e95d22cffc51877e176045a82ef6f65907/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp

Project Member

Comment 18 by bugdroid1@chromium.org, Dec 5 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1882f132ee718f7c642f0ff4f0ea9d96b172a76f

commit 1882f132ee718f7c642f0ff4f0ea9d96b172a76f
Author: Klaus Weidner <klausw@chromium.org>
Date: Tue Dec 05 17:31:15 2017

Track WebVR timings, add WaitPrevStrategy

In preparation for GpuFence synchronization, track GVR acquire/submit
times and report JavaScript waitForPreviousRender times back to
VrShellGl via Mojo.

Refactor waiting for previous transfer and render, using helper
functions to unclutter submitFrame.

Wait for previous transfer is only used for the Android surface path,
move it there.

Wait for previous render now support different choices for the
execution point, including NEVER for the OpenVR path. The BEFORE_BITMAP
choice is not yet active, it's intended for use with GpuFence-separated
frames. It does work for the current render path too, but IIRC is a bit
slower there due to less parallelism.

BUG= 761432 

Change-Id: I9d24d6e0a133ad76cfda4f40c2bba84ffd7363ef
Reviewed-on: https://chromium-review.googlesource.com/802756
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Bill Orr <billorr@chromium.org>
Reviewed-by: Michael Thiessen <mthiesse@chromium.org>
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521735}
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/chrome/browser/android/vr_shell/vr_shell_gl.cc
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/chrome/browser/android/vr_shell/vr_shell_gl.h
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/device/vr/openvr/openvr_render_loop.cc
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/device/vr/openvr/openvr_render_loop.h
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/device/vr/vr_service.mojom
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/third_party/WebKit/LayoutTests/vr/resources/mock-vr-service.js
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
[modify] https://crrev.com/1882f132ee718f7c642f0ff4f0ea9d96b172a76f/third_party/WebKit/Source/modules/vr/VRDisplay.h

Project Member

Comment 19 by bugdroid1@chromium.org, Dec 9 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c

commit e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c
Author: Klaus Weidner <klausw@chromium.org>
Date: Sat Dec 09 17:26:30 2017

GpuFence implementation

Implement a command buffer interface for native file descriptor backed
cross-context GpuFence objects. See CHROMIUM_gpu_fence.txt for the GLES
API description and docs/design/gpu_synchronization.md for background
information including usage examples.

gl::GLFenceAndroidNativeSyncPoint - low-level wrapper for underlying GL
calls.

gfx::GpuFenceHandle - IPC-transportable wrapper for the sync file
descriptor.

gfx::GpuFence aka ClientGpuFence - owning container for a GpuFenceHandle,
and convertible to/from a ClientGpuFence for use with GL calls.

gpu::gles2::GpuFenceManager tracks GpuFenceEntry objects by client-assigned
ID number. Each entry stores a gl::GLFence as currently implemented
by the gl::GLFenceAndroidNativeSyncPoint subclass.

BUG= 761432 

Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Ibae5c377528db9a9382b64a2648ac56a5a0f53f6
Reviewed-on: https://chromium-review.googlesource.com/680135
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523001}
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/cc/test/test_context_support.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/cc/test/test_context_support.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/chrome/browser/android/vr_shell/vr_shell_gl.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/docs/design/README.md
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/docs/design/gpu_synchronization.md
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_gpu_fence.txt
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/GLES2/gl2chromium_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/build_gles2_cmd_buffer.py
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/client_test_helper.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/context_support.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_c_lib_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_implementation.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_implementation.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_implementation_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_interface.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_interface_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_interface_stub_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/client/gpu_control.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/cmd_buffer_functions.txt
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/common/capabilities.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/common/gles2_cmd_format.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/common/gles2_cmd_format_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/BUILD.gn
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/feature_info.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/feature_info.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gpu_fence_manager.cc
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/gpu_fence_manager.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/service/mailbox_manager_sync.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/tests/decoder_perftest.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/tests/gl_manager.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/command_buffer/tests/gl_manager.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/gles2_conform_support/egl/context.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/gles2_conform_support/egl/context.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/client/command_buffer_proxy_impl.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/client/command_buffer_proxy_impl.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/client/gpu_context_tests.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/common/gpu_command_buffer_traits_multi.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/common/gpu_messages.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/in_process_command_buffer.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/in_process_command_buffer.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/service/command_buffer_stub.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/gpu/ipc/service/command_buffer_stub.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ppapi/proxy/ppapi_command_buffer_proxy.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ppapi/proxy/ppapi_command_buffer_proxy.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gfx/BUILD.gn
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gfx/gpu_fence.cc
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gfx/gpu_fence.h
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gfx/gpu_fence_handle.cc
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gfx/gpu_fence_handle.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gfx/ipc/gfx_param_traits_macros.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/BUILD.gn
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/gl_fence.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/gl_fence.h
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/gl_fence_android_native_fence_sync.cc
[add] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/gl_fence_android_native_fence_sync.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/gl_fence_egl.cc
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/gl_fence_egl.h
[modify] https://crrev.com/e66cc7d91e9d2f1e14a815d6393a881c2b6cf71c/ui/gl/gl_surface_egl.cc

Project Member

Comment 20 by bugdroid1@chromium.org, Dec 9 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a81592e89030591cba76988c7e4bcb2f36d8ea20

commit a81592e89030591cba76988c7e4bcb2f36d8ea20
Author: Klaus Weidner <klausw@chromium.org>
Date: Sat Dec 09 19:13:18 2017

Add mock EGL API and GpuFenceManager unittest

Split out from the GpuFence implementation due to the large size of the autogenerated mock bindings.

BUG= 761432 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I2cc63b360f9eee7380f0e8c4f1fd13d58c9b5b2a
Reviewed-on: https://chromium-review.googlesource.com/772810
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523007}
[modify] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/gpu/BUILD.gn
[add] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/gpu/command_buffer/service/gpu_fence_manager_unittest.cc
[modify] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/BUILD.gn
[add] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/egl_bindings_autogen_mock.cc
[add] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/egl_bindings_autogen_mock.h
[add] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/egl_mock.cc
[add] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/egl_mock.h
[modify] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/generate_bindings.py
[modify] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/gl_bindings_autogen_mock.cc
[add] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/gl_mock_autogen_egl.h
[modify] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/gl_surface_egl.cc
[modify] https://crrev.com/a81592e89030591cba76988c7e4bcb2f36d8ea20/ui/gl/gl_surface_egl.h

Project Member

Comment 21 by bugdroid1@chromium.org, Dec 9 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1394bd59b83213c5642e0bb5f0926ac38518ac29

commit 1394bd59b83213c5642e0bb5f0926ac38518ac29
Author: Klaus Weidner <klausw@chromium.org>
Date: Sat Dec 09 20:35:00 2017

Implement mojo transport for GpuFenceHandle

Adds a mojo transport for GpuFenceHandle objects as an alternative to the
previously implemented traditional IPC params_traits_macros support.

An example use case is passing a GpuFenceHandle to a Renderer process to
synchronize its command buffer GL operations with an external GL context.

BUG= 761432 

Change-Id: I178cf670da0b0052df32f5fcaf9cac2240979deb
Reviewed-on: https://chromium-review.googlesource.com/784126
Commit-Queue: Klaus Weidner <klausw@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: David Reveman <reveman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523012}
[modify] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/third_party/WebKit/public/blink_typemaps.gni
[modify] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/ui/gfx/mojo/BUILD.gn
[add] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/ui/gfx/mojo/gpu_fence_handle.mojom
[add] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/ui/gfx/mojo/gpu_fence_handle.typemap
[add] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/ui/gfx/mojo/gpu_fence_handle_for_blink.typemap
[add] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/ui/gfx/mojo/gpu_fence_handle_struct_traits.cc
[add] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/ui/gfx/mojo/gpu_fence_handle_struct_traits.h
[modify] https://crrev.com/1394bd59b83213c5642e0bb5f0926ac38518ac29/ui/gfx/typemaps.gni

Labels: -M-64 M-65
Status: Fixed (was: Assigned)
Closing this tracker bug, the necessary components should now be in place:

- low-level AHardwareBuffer support via gfx::AndroidHardwareBufferCompat.
- AHardwareBuffer-backed GpuMemoryBuffer.
- low-level native fence sync.
- GpuFence wrapper for native fence sync including IPC and mojo transport.

Next step is to use this for WebVR's render pipeline, see issue 761436 and related bugs. (Sorry, I was confusingly using this bug as a tracker for some WebVR changes that were preparing for use with this feature, those should have used a more specific WebVR tracker bug.)
Labels: Test-Complete
Project Member

Comment 24 by bugdroid1@chromium.org, Mar 7 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e2d74157507ea4a9156c4668f9e096a71f125dbf

commit e2d74157507ea4a9156c4668f9e096a71f125dbf
Author: Nico Weber <thakis@chromium.org>
Date: Wed Mar 07 21:03:20 2018

Re-run ui/gl/generate_bindings.py

Several changes to the bindings [1] landed while the change that added the
mock writer was in review [2].  The mock writer wasn't rerun right before it
landed, so its output is out-of-sync with the bindings metadata.

Rerun the generator to fix things up. This is a prerequisite for a change
I want to make to the generator.

1: https://chromium-review.googlesource.com/c/chromium/src/+/766687,
   https://chromium-review.googlesource.com/c/chromium/src/+/779087
2: https://chromium-review.googlesource.com/c/chromium/src/+/772810

Bug:  761432 , 550065 
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I1ad3658c8f92bdd587d1659bb21d58ac71a549f6
Reviewed-on: https://chromium-review.googlesource.com/953382
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Nico Weber <thakis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#541576}
[modify] https://crrev.com/e2d74157507ea4a9156c4668f9e096a71f125dbf/ui/gl/egl_bindings_autogen_mock.cc
[modify] https://crrev.com/e2d74157507ea4a9156c4668f9e096a71f125dbf/ui/gl/egl_bindings_autogen_mock.h
[modify] https://crrev.com/e2d74157507ea4a9156c4668f9e096a71f125dbf/ui/gl/gl_mock_autogen_egl.h

Components: Blink>WebXR

Sign in to add a comment