New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 605787 link

Starred by 2 users

Issue metadata

Status: WontFix
Owner:
Closed: May 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 2
Type: Bug

Blocking:
issue 596622



Sign in to add a comment

Crash in partitionExcessiveAllocationSize running webgl_conformance_tests

Project Member Reported by kbr@chromium.org, Apr 21 2016

Issue description

https://build.chromium.org/p/chromium.gpu/builders/Mac%2010.10%20Release%20%28Intel%29/builds/7465

WebglConformance.conformance_textures_image_bitmap_from_blob_tex_2d_rgba_rgba_unsigned_short_4_4_4_4 crashed in the renderer process:

	Thread 0 (crashed)
	 0  Chromium Framework!__ZN3WTFL32partitionExcessiveAllocationSizeEv + 0x4
	 1  Chromium Framework!__ZN3WTF22partitionAllocSlowPathEPNS_17PartitionRootBaseEimPNS_15PartitionBucketE + 0x9b
	 2  Chromium Framework!__ZN3WTF10StringImpl19createUninitializedEjRPh + 0x158
	 3  Chromium Framework!__ZN3WTF10makeStringINS_12StringAppendINS1_INS1_IPKcNS_6StringEEES3_EES4_EES3_EENS_10PassRefPtrINS_10StringImplEEET_T0_ + 0x14f
	 4  Chromium Framework!__ZNK3WTF12StringAppendINS0_INS0_INS0_IPKcNS_6StringEEES2_EES3_EES2_EcvS3_Ev + 0x4a
	 5  Chromium Framework!__ZN5blink11isValidEnumERKN3WTF6StringEPPKcmS3_RNS_14ExceptionStateE + 0x194
	 6  Chromium Framework!__ZN5blink20V8ImageBitmapOptions6toImplEPN2v87IsolateENS1_5LocalINS1_5ValueEEERNS_18ImageBitmapOptionsERNS_14ExceptionStateE + 0x4bd
	 7  Chromium Framework!__ZN5blink19DOMWindowV8InternalL24createImageBitmap1MethodERKN2v820FunctionCallbackInfoINS1_5ValueEEE + 0x1d5
	 8  Chromium Framework!__ZN5blink19DOMWindowV8InternalL31createImageBitmapMethodCallbackERKN2v820FunctionCallbackInfoINS1_5ValueEEE + 0x9a
	 9  Chromium Framework!__ZN2v88internal25FunctionCallbackArguments4CallEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEE + 0x16d
	10  Chromium Framework!__ZN2v88internal12_GLOBAL__N_119HandleApiCallHelperILb0EEENS0_11MaybeHandleINS0_6ObjectEEEPNS0_7IsolateENS1_16BuiltinArgumentsILNS0_21BuiltinExtraArgumentsE1EEE + 0x39d
...

It looks to me like something's not getting garbage collected eagerly enough and the renderer is intermittently running out of space.

Per https://www.chromium.org/developers/testing/gpu-testing#TOC-Running-the-GPU-Tests-Locally , these tests can be run locally by building Chrome Release and running:

content/test/gpu/run_gpu_tests --browser=release webgl_conformance

Instrumentation could be added to see how large the renderer process's address space usage gets during the test run.

 
stdout.txt
4.7 MB View Download

Comment 1 by kbr@chromium.org, Apr 21 2016

Cc: kbr@chromium.org
 Issue 605786  has been merged into this issue.

Comment 2 by kbr@chromium.org, Apr 22 2016

Blocking: 596622
Components: -Blink>JavaScript Blink>JavaScript>GC
Status: Available (was: Untriaged)
Is this V8 GC or Oilpan?
Status: WontFix (was: Available)
This is a kind of OOM. The allocation size is too huge (larger than INT_MAX).

Comment 5 by kbr@chromium.org, Apr 26 2016

Components: Blink>Bindings
Owner: haraken@chromium.org
Status: Assigned (was: WontFix)
Let's not simply dismiss this bug. The crash is happening in the V8 bindings for ImageBitmapOptions (V8ImageBitmapOptions::toImpl), during the checks that the incoming strings are valid enums. It looks like during the construction of a string for an exception message that the OOM happens. How could that happen while allocating a simple string?

It's crashing because |colorspaceConversion| passed by V8 is >2 GB. V8 binding needs to check that the string is one of "none" and "default". There V8 binding needs to convert the passed-in string to a WTF::String. If the string is too huge, it causes OOM.

Comment 7 by kbr@chromium.org, Apr 26 2016

How can the colorspaceConversion string possibly be that large? It's not even passed from the JavaScript level. (See src/third_party/webgl/src/sdk/tests/js/tests/tex-image-and-sub-image-with-image-bitmap-utils.js). Is this uninitialized data? xidachen@ wrote these tests and should be able to help too.

Cc: -hpayer@chromium.org
Owner: yukishiino@chromium.org
Yeah, that's a good point.

yukishiino@: Maybe you have a bandwidth to take a look at this?

kbr@: I looked at the test, and the failure is strange. It should not be uninitialized. The colorspaceConversion has a default value "default" when the ImageBitmapOptions is constructed. This is what the constructor looks like:

ImageBitmapOptions::ImageBitmapOptions()
{
    setColorspaceConversion(String("default"));
    setImageOrientation(String("none"));
    setPremultiplyAlpha(String("default"));
}

Could it be related to how our bindings work with a dictionary idl?

Comment 10 by kbr@chromium.org, Apr 26 2016

Yes, there's almost certainly a bug, and it's almost certainly in the bindings and how dictionary types and enums work.

Cc: -apaci...@chromium.org bashi@chromium.org
Could you let us know where is the test code?  I don't know where conformance_textures_image_bitmap_from_blob_tex_2d_rgba_rgba_unsigned_short_4_4_4_4 is defined.

Reading src/third_party/webgl/src/sdk/tests/js/tests/tex-image-and-sub-image-with-image-bitmap-utils.js , it seems the tests are always passing the valid enumb values.  However, the stack trace at #0 looks like that we're handling an invalid enum value.  Quite strange.

From my first investigation, there is nothing clear.  No reason so far to think that there is a bug in dictionary types or enums.

Is this issue constantly reproducible?  Seeing https://build.chromium.org/p/chromium.gpu/builders/Mac%2010.10%20Release%20%28Intel%29?numbuilds=200 , the issue seems not reproducible.  Then, it's hard to find the cause.

Comment 14 by kbr@chromium.org, May 13 2016

Sorry for any confusion. The GPU tests are documented in https://www.chromium.org/developers/testing/gpu-testing .

You can run this test, for example, by building the Release browser (or Debug, then change the command line below) and running:

./content/test/gpu/run_gpu_test.py webgl_conformance --browser=release --story-filter=conformance_textures_image_bitmap_from_blob_tex_2d_rgba_rgba_unsigned_short_4_4_4_4

or, to run a larger subset of the tests:

./content/test/gpu/run_gpu_test.py webgl_conformance --browser=canary --story-filter=conformance_textures_image_bitmap_from_blob*

You might need the additional arguments

--pageset-repeat=100 --max-failures=1

to catch the first failure most easily.

Let me know if you have difficulty reproducing the bug.

I'm not able to repro on my local Linux.  I know the crash was reported on Mac.  But it seems not reproducible on Mac, too, seeing https://build.chromium.org/p/chromium.gpu/builders/Mac%2010.10%20Release%20%28Intel%29?numbuilds=200 .

Considering that the test is passing the valid enum values, but the stacktrace shows that the binding layer is handling an invalid enumb value, I'm afraid that someone broke memory content.  There wouldn't be any gain from investigating this issue.

May I close this issue?  Or any advice?

Comment 16 by kbr@chromium.org, May 19 2016

Status: WontFix (was: Assigned)
yukishiino@: since there's no way to reproduce the problem, yes, let's close this as not reproducible. We need to stay on top of such potential memory stomps in the future to keep the product stable.

Sign in to add a comment