New issue
Advanced search Search tips

Issue 813903 link

Starred by 1 user

Issue metadata

Status: Duplicate
Merged: issue 235341
Owner:
Closed: Mar 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 2
Type: Bug



Sign in to add a comment

Chome freezes, and Android jumps to lock screen, when visiting WebGL page

Reported by allydona...@googlemail.com, Feb 20 2018

Issue description

Steps to reproduce the problem:
1. Visit this web page: 

http://multicore.doc.ic.ac.uk/browserbugs/honor10_lock_screen.html

What is the expected behavior?
Either an image should be rendered, or the page should fail to load with "Rats, WebGL hit a snag."  This is because the shader contains fairly long-running loops, and is a deliberately 'badly-behaved' shader (with plenty out-of-bounds array accesses, for example).

What went wrong?
Chrome freezes, and after a while the whole phone screen goes black.  After some seconds, the screen comes up again at the lock screen.  On unlocking, control sometimes goes back to Chrome (so that the issue happens again), or sometimes goes to Android Home.

This video illustrates the issue:

https://www.youtube.com/watch?v=QjL91XdFL4g&feature=youtu.be

Sometimes when the issue happens the battery shows as 0%:

https://youtu.be/QjL91XdFL4g?t=55

Occasionally some snippets of visual garbage appear on the screen:

https://youtu.be/QjL91XdFL4g?t=156

Firefox behaves similarly.

Did this work before? N/A 

Does this work in other browsers? No
 The behaviour in Firefox is more or less the same as described below for Chrome.

Chrome version: 63.0.3282.137  Channel: stable
OS Version: 8.0.0
Flash Version: 

Device: Honor View 10
Model: BKL-L09
Build number BKL-L09 8.0.0.120(C432)
GPU: ARM Mali-G72
 
Label: GPU-ARM

Comment 2 by piman@chromium.org, Feb 20 2018

Cc: zmo@chromium.org ericrk@chromium.org
Components: Internals>GPU>Internals
Owner: kbr@chromium.org
Status: Assigned (was: Unconfirmed)
Assigning to kbr for triage, but I'm not sure there's all that much we can/should do.

Labels: GPU-ARM
Labels: Stability-Hang Stability-ThirdParty
For my understanding: is it that there's potentially not much to be done about this due to:

a) requiring a fix from a third party (e.g. the writers of the GPU driver), or
b) this being basically the behaviour one can expect from a long-running shader
?

Comment 6 by kbr@chromium.org, Feb 22 2018

It's because of (a). The driver's implementation of the KHR_robustness or EXT_robustness extension should be more robust, and we'll certainly take this back to all of the GPU vendors on which issues are seen. However, Chrome's security team doesn't treat denial-of-service issues like this as security bugs – people will tend to just not navigate to a web page again which causes a problem like this.

Comment 7 by kbr@chromium.org, Feb 22 2018

Cc: jdarpinian@chromium.org kainino@chromium.org
Owner: jdarpinian@chromium.org
James, could you please try this test case on a few phones from our cabinet and see how widespread the issues are? In particular, testing both on ARM Mali and Qualcomm GPUs.

I tested this on a Pixel 2 and the GPU process crashes and recovers fine. about:gpu follows.

Graphics Feature Status
Canvas: Hardware accelerated
CheckerImaging: Enabled
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Hardware accelerated
Multiple Raster Threads: Disabled
Native GpuMemoryBuffers: Software only. Hardware acceleration disabled
Rasterization: Hardware accelerated
Video Decode: Hardware accelerated
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
Driver Bug Workarounds
broken_egl_image_ref_counting
clear_uniforms_before_first_program_use
disable_framebuffer_cmaa
disable_program_caching_for_transform_feedback
disable_program_disk_cache
dont_disable_webgl_when_compositor_context_lost
force_cube_map_positive_x_allocation
max_copy_texture_chromium_size_1048576
max_texture_size_limit_4096
multisample_renderbuffer_resize_emulation
scalarize_vec_and_mat_constructor_args
unbind_egl_context_to_flush_driver_caches
use_virtualized_gl_contexts
wake_up_gpu_before_drawing
Problems Detected
Non-virtual contexts on Qualcomm sometimes cause out-of-order frames: 289461
Applied Workarounds: use_virtualized_gl_contexts
The first draw operation from an idle state is slow: 309734
Applied Workarounds: wake_up_gpu_before_drawing
Clear uniforms before first program use on all platforms: 124764, 349137
Applied Workarounds: clear_uniforms_before_first_program_use
Always rewrite vec/mat constructors to be consistent: 398694
Applied Workarounds: scalarize_vec_and_mat_constructor_args
glFinish doesn't clear caches on Android: 509727
Applied Workarounds: unbind_egl_context_to_flush_driver_caches
Android Adreno crashes on binding incomplete cube map texture to FBO: 518889
Applied Workarounds: force_cube_map_positive_x_allocation
CHROMIUM_copy_texture with 1MB copy per flush to avoid unwanted cache growth on Adreno: 542478
Applied Workarounds: max_copy_texture_chromium_size_1048576
EGLImage ref counting across EGLContext/threads is broken: 585250
Applied Workarounds: broken_egl_image_ref_counting
Limit max texure size to 4096 on all of Android
Applied Workarounds: max_texture_size_limit_4096
Use GL_INTEL_framebuffer_CMAA on ChromeOS: 535198
Applied Workarounds: disable_framebuffer_cmaa
Disable KHR_blend_equation_advanced until cc shaders are updated: 661715
Applied Workarounds: disable(GL_KHR_blend_equation_advanced), disable(GL_KHR_blend_equation_advanced_coherent)
Program binaries don't contain transform feedback varyings on Qualcomm GPUs: 658074
Applied Workarounds: disable_program_caching_for_transform_feedback
Certain Adreno 4xx and 5xx drivers often crash in glProgramBinary.: 699122
Applied Workarounds: disable_program_disk_cache
Multisampled color renderbuffers can't be resized on Qualcomm 4xx/5xx: 696126
Applied Workarounds: multisample_renderbuffer_resize_emulation
eglSwapBuffers intermittently fails on Android when app goes to background: 744678
Applied Workarounds: dont_disable_webgl_when_compositor_context_lost
glGetQueryObject(GL_QUERY_RESULT_AVAILABLE) blocks unexpectedly on Adreno: 750306, 764526
Applied Workarounds: disable(GL_EXT_disjoint_timer_query), disable(GL_EXT_disjoint_timer_query_webgl2)
Don't expose disjoint_timer_query extensions to WebGL: 808744
Raster is using a single thread.
Disabled Features: multiple_raster_threads
Native GpuMemoryBuffers have been disabled, either via about:flags or command line.
Disabled Features: native_gpu_memory_buffers
Version Information
Data exported	2018-02-22T06:29:30.774Z
Chrome version	Chrome/66.0.3348.3
Operating system	Android 8.1.0
Software rendering list URL	https://chromium.googlesource.com/chromium/src/+/47ecb69893e9135f6db6371a9a5d51eb5d30ad08/gpu/config/software_rendering_list.json
Driver bug list URL	https://chromium.googlesource.com/chromium/src/+/47ecb69893e9135f6db6371a9a5d51eb5d30ad08/gpu/config/gpu_driver_bug_list.json
ANGLE commit id	f3803d4f74a5
2D graphics backend	Skia/66 d23db1257af7ba099b473e17e8c83c8703b3098a-
Command Line	--use-mobile-user-agent --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5 --use-mobile-user-agent --enable-pinch --enable-viewport --validate-input-event-stream --enable-longpress-drag-selection --touch-selection-strategy=direction --main-frame-resizes-are-orientation-changes --disable-composited-antialiasing --enable-dom-distiller --flag-switches-begin --flag-switches-end --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5 --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5 --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5 --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5 --top-controls-show-threshold=0.5 --top-controls-hide-threshold=0.5
Driver Information
Initialization time	232
In-process GPU	false
Passthrough Command Decoder	false
Direct Composition	false
Supports overlays	false
Sandboxed	false
GPU0	VENDOR = 0x0000 [Qualcomm], DEVICE= 0x0000 [Adreno (TM) 540] *ACTIVE*
Optimus	false
Optimus	false
AMD switchable	false
Driver vendor	
Driver version	258.0
Driver date	
Pixel shader version	3.20
Vertex shader version	3.20
Max. MSAA samples	4
Machine model name	Pixel 2
Machine model version	
GL_VENDOR	Qualcomm
GL_RENDERER	Adreno (TM) 540
GL_VERSION	OpenGL ES 3.2 V@258.0 (GIT@594927b, I916dfac403) (Date:10/11/17)
GL_EXTENSIONS	GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_half_float GL_OES_framebuffer_object GL_OES_rgb8_rgba8 GL_OES_compressed_ETC1_RGB8_texture GL_AMD_compressed_ATC_texture GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_OES_texture_compression_astc GL_OES_texture_npot GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_OES_texture_3D GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_QCOM_alpha_test GL_OES_depth24 GL_OES_packed_depth_stencil GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_EXT_sRGB GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_EXT_texture_type_2_10_10_10_REV GL_EXT_texture_sRGB_decode GL_OES_element_index_uint GL_EXT_copy_image GL_EXT_geometry_shader GL_EXT_tessellation_shader GL_OES_texture_stencil8 GL_EXT_shader_io_blocks GL_OES_shader_image_atomic GL_OES_sample_variables GL_EXT_texture_border_clamp GL_EXT_multisampled_render_to_texture GL_EXT_multisampled_render_to_texture2 GL_OES_shader_multisample_interpolation GL_EXT_texture_cube_map_array GL_EXT_draw_buffers_indexed GL_EXT_gpu_shader5 GL_EXT_robustness GL_EXT_texture_buffer GL_EXT_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_OES_texture_storage_multisample_2d_array GL_OES_sample_shading GL_OES_get_program_binary GL_EXT_debug_label GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_QCOM_tiled_rendering GL_ANDROID_extension_pack_es31a GL_EXT_primitive_bounding_box GL_OES_standard_derivatives GL_OES_vertex_array_object GL_EXT_disjoint_timer_query GL_KHR_debug GL_EXT_YUV_target GL_EXT_sRGB_write_control GL_EXT_texture_norm16 GL_EXT_discard_framebuffer GL_OES_surfaceless_context GL_OVR_multiview GL_OVR_multiview2 GL_EXT_texture_sRGB_R8 GL_KHR_no_error GL_EXT_debug_marker GL_OES_EGL_image_external_essl3 GL_OVR_multiview_multisampled_render_to_texture GL_EXT_buffer_storage GL_EXT_external_buffer GL_EXT_blit_framebuffer_params GL_EXT_clip_cull_distance GL_EXT_protected_textures GL_EXT_shader_non_constant_global_initializers GL_QCOM_framebuffer_foveated GL_QCOM_shader_framebuffer_fetch_noncoherent GL_EXT_EGL_image_array GL_NV_shader_noperspective_interpolation
Disabled Extensions	GL_EXT_disjoint_timer_query GL_EXT_disjoint_timer_query_webgl2 GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent
Disabled WebGL Extensions	EXT_disjoint_timer_query EXT_disjoint_timer_query_webgl2
Window system binding vendor	
Window system binding version	
Window system binding extensions	
Direct rendering	Yes
Reset notification strategy	0x8252
GPU process crash count	1
Compositor Information
Tile Update Mode	One-copy
Partial Raster	Enabled
GpuMemoryBuffers Status
ATC	Software only
ATCIA	Software only
DXT1	Software only
DXT5	Software only
ETC1	Software only
R_8	Software only
R_16	Software only
RG_88	Software only
BGR_565	Software only
RGBA_4444	Software only
RGBX_8888	GPU_READ, SCANOUT
RGBA_8888	GPU_READ, SCANOUT
BGRX_8888	Software only
BGRX_1010102	Software only
BGRA_8888	Software only
RGBA_F16	Software only
YVU_420	Software only
YUV_420_BIPLANAR	Software only
UYVY_422	Software only
Display(s) Information
Info	Display[0] bounds=0,0 412x732, workarea=0,0 412x732, scale=2.625, external
Color space information	{primaries:BT709, transfer:IEC61966_2_1, matrix:RGB, range:FULL}
Bits per color component	8
Bits per pixel	24
Video Acceleration Information
Decode vp8	up to 3840x2160 pixels
Decode vp8	up to 3840x2160 pixels (encrypted)
Decode vp9 profile0	up to 3840x2160 pixels
Decode vp9 profile0	up to 3840x2160 pixels (encrypted)
Decode vp9 profile1	up to 3840x2160 pixels
Decode vp9 profile1	up to 3840x2160 pixels (encrypted)
Decode vp9 profile2	up to 3840x2160 pixels
Decode vp9 profile2	up to 3840x2160 pixels (encrypted)
Decode vp9 profile3	up to 3840x2160 pixels
Decode vp9 profile3	up to 3840x2160 pixels (encrypted)
Decode h264 baseline	up to 3840x2160 pixels
Decode h264 main	up to 3840x2160 pixels
Decode h264 extended	up to 3840x2160 pixels
Decode h264 high	up to 3840x2160 pixels
Decode h264 high 10	up to 3840x2160 pixels
Decode h264 high 4:2:2	up to 3840x2160 pixels
Decode h264 high 4:4:4 predictive	up to 3840x2160 pixels
Decode h264 scalable baseline	up to 3840x2160 pixels
Decode h264 scalable high	up to 3840x2160 pixels
Decode h264 stereo high	up to 3840x2160 pixels
Decode h264 multiview high	up to 3840x2160 pixels
Encode vp8	up to 1280x720 pixels and/or 30.000 fps
Encode h264 baseline	up to 1280x720 pixels and/or 30.000 fps
Log Messages
GpuProcessHostUIShim: The GPU process exited normally. Everything is okay.
GpuProcessHostUIShim: The GPU process exited normally. Everything is okay.
[ERROR:gles2_cmd_decoder.cc(10105)] : [.Offscreen-For-WebGL-0xe446cd00]RENDER WARNING: there is no texture bound to the unit 0
[ERROR:gles2_cmd_decoder.cc(10105)] : [.Offscreen-For-WebGL-0xe446cd00]RENDER WARNING: there is no texture bound to the unit 0
[ERROR:gles2_cmd_decoder.cc(10105)] : [.Offscreen-For-WebGL-0xe446cd00]RENDER WARNING: there is no texture bound to the unit 0
[ERROR:gles2_cmd_decoder.cc(10105)] : [.Offscreen-For-WebGL-0xe446cd00]RENDER WARNING: there is no texture bound to the unit 0
[ERROR:gles2_cmd_decoder.cc(10105)] : [.Offscreen-For-WebGL-0xe446cd00]RENDER WARNING: there is no texture bound to the unit 0
[ERROR:gles2_cmd_decoder.cc(18285)] : [.DisplayCompositor-0xcb3dea00]GL ERROR :GL_INVALID_OPERATION : glCreateAndConsumeTextureCHROMIUM: invalid mailbox name
[ERROR:gles2_cmd_decoder.cc(10111)] : [.DisplayCompositor-0xcb3dea00]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.
[ERROR:gles2_cmd_decoder.cc(18285)] : [.DisplayCompositor-0xcb3dea00]GL ERROR :GL_INVALID_OPERATION : glCreateAndConsumeTextureCHROMIUM: invalid mailbox name
[ERROR:gles2_cmd_decoder.cc(10111)] : [.DisplayCompositor-0xcb3dea00]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.
[ERROR:gles2_cmd_decoder.cc(18285)] : [.DisplayCompositor-0xcb3dea00]GL ERROR :GL_INVALID_OPERATION : glCreateAndConsumeTextureCHROMIUM: invalid mailbox name
[ERROR:gles2_cmd_decoder.cc(10111)] : [.DisplayCompositor-0xcb3dea00]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.
[ERROR:gles2_cmd_decoder.cc(18285)] : [.DisplayCompositor-0xcb3dea00]GL ERROR :GL_INVALID_OPERATION : glCreateAndConsumeTextureCHROMIUM: invalid mailbox name
[ERROR:gles2_cmd_decoder.cc(10111)] : [.DisplayCompositor-0xcb3dea00]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.
[ERROR:gles2_cmd_decoder.cc(16507)] : Offscreen context lost via ARB/EXT_robustness. Reset status = GL_GUILTY_CONTEXT_RESET_KHR
[ERROR:gles2_cmd_decoder.cc(4528)] :GLES2DecoderImpl: Context reset detected after MakeCurrent.
[ERROR:gpu_channel_manager.cc(200)] : Exiting GPU process because some drivers cannot recover from problems.
[ERROR:gpu_channel_manager.cc(200)] : Exiting GPU process because some drivers cannot recover from problems.
GpuProcessHostUIShim:
I tested this on our Honor 9 and Honor 9 lite phones and I can reproduce the issue.  Those phones also have ARM Mali GPUs, with HiSilicon KIRIN chipsets, I believe.

Comment 9 Deleted

Mergedinto: 235341
Status: Duplicate (was: Assigned)
Chrome freezing for up to 10 seconds on a long shader compile is expected behavior (bug 235341 would help). Crashing to the lock screen is more concerning, but I can't reproduce it on our Huawei P9 (Mali T880) or Galaxy Note 8 (Mali G71). It's likely to be a driver bug and I don't think there's much we can do about it other than fix bug 235341.

Sign in to add a comment