diff options
Diffstat (limited to 'test/080-oom-throw')
| -rw-r--r-- | test/080-oom-throw/run | 31 | ||||
| -rw-r--r-- | test/080-oom-throw/run.py | 32 | ||||
| -rw-r--r-- | test/080-oom-throw/src/Main.java | 12 |
3 files changed, 42 insertions, 33 deletions
diff --git a/test/080-oom-throw/run b/test/080-oom-throw/run deleted file mode 100644 index 08db73bba0..0000000000 --- a/test/080-oom-throw/run +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2017 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Ensure the minimum log severity is at least 'WARNING' to display the -# stack trace shown before exception -# -# "java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying -# to throw OutOfMemoryError; no stack trace available" -# -# is set, to try to understand a recurring crash in this test (b/77567088). -case "$ANDROID_LOG_TAGS" in - # Lower the minimum log severity to WARNING if it was initialy set - # to a higher level ('ERROR', 'FATAL' or 'SILENT' -- see - # https://developer.android.com/studio/command-line/logcat#filteringOutput). - (\*:[efs]) export ANDROID_LOG_TAGS='*:w';; -esac - -exec ${RUN} $@ --runtime-option -Xmx16m diff --git a/test/080-oom-throw/run.py b/test/080-oom-throw/run.py new file mode 100644 index 0000000000..fb10464620 --- /dev/null +++ b/test/080-oom-throw/run.py @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Copyright (C) 2017 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +def run(ctx, args): + # Ensure the minimum log severity is at least 'WARNING' to display the + # stack trace shown before exception + # + # "java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying + # to throw OutOfMemoryError; no stack trace available" + # + # is set, to try to understand a recurring crash in this test (b/77567088). + if ctx.env.ANDROID_LOG_TAGS in ["*:e", "*:f", "*:s"]: + # Lower the minimum log severity to WARNING if it was initialy set + # to a higher level ('ERROR', 'FATAL' or 'SILENT' -- see + # https://developer.android.com/studio/command-line/logcat#filteringOutput). + ctx.env.ANDROID_LOG_TAGS = "*:w" + + ctx.default_run(args, runtime_option=["-Xmx16m"]) diff --git a/test/080-oom-throw/src/Main.java b/test/080-oom-throw/src/Main.java index cd36eff160..c9fd3610ff 100644 --- a/test/080-oom-throw/src/Main.java +++ b/test/080-oom-throw/src/Main.java @@ -55,12 +55,20 @@ public class Main { private static int exhaustJavaHeap(Object[] data, int index, int size) { Runtime.getRuntime().gc(); - while (index != data.length && size != 0) { + while (index != data.length) { try { data[index] = new byte[size]; ++index; } catch (OutOfMemoryError oome) { - size /= 2; + // Rapidly shrink the object size to fill any remaining space. + // Use few different sizes, since detecting out-of-memory is slow. + if (size >= 32) { + size /= 32; + } else if (size > 1) { + size = 1; + } else { + break; + } } } return index; |