Crash in partitionExcessiveAllocationSize running webgl_conformance_tests |
||||||||
Issue descriptionhttps://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.
,
Apr 22 2016
,
Apr 26 2016
Is this V8 GC or Oilpan?
,
Apr 26 2016
This is a kind of OOM. The allocation size is too huge (larger than INT_MAX).
,
Apr 26 2016
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?
,
Apr 26 2016
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.
,
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.
,
Apr 26 2016
Yeah, that's a good point. yukishiino@: Maybe you have a bandwidth to take a look at this?
,
Apr 26 2016
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?
,
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.
,
Apr 26 2016
,
May 13 2016
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.
,
May 13 2016
yukishiino@: The test is located here: https://code.google.com/p/chromium/codesearch#chromium/src/third_party/webgl/src/sdk/tests/conformance/textures/image/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html&q=tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html&sq=package:chromium&l=1 It basically directly uses this js file: https://code.google.com/p/chromium/codesearch#chromium/src/third_party/webgl/src/sdk/tests/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-blob.js&q=tex-image-and-sub-image-2d-with-image-bitmap-from-blob.js&sq=package:chromium&l=1 And that uses the src/third_party/webgl/src/sdk/tests/js/tests/tex-image-and-sub-image-with-image-bitmap-utils.js.
,
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.
,
May 18 2016
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?
,
May 19 2016
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 |
||||||||
Comment 1 by kbr@chromium.org
, Apr 21 2016