summaryrefslogtreecommitdiff
path: root/test/080-oom-throw
diff options
context:
space:
mode:
Diffstat (limited to 'test/080-oom-throw')
-rw-r--r--test/080-oom-throw/run31
-rw-r--r--test/080-oom-throw/run.py32
-rw-r--r--test/080-oom-throw/src/Main.java12
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;