Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
5c626bb2
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5c626bb2
编写于
6月 18, 2015
作者:
K
kshefov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8062904: TEST_BUG: Tests java/lang/invoke/LFCaching fail when run with -Xcomp option
Reviewed-by: vlivanov
上级
58da4ffd
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
136 addition
and
84 deletion
+136
-84
test/java/lang/invoke/LFCaching/LFCachingTestCase.java
test/java/lang/invoke/LFCaching/LFCachingTestCase.java
+1
-1
test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java
test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java
+8
-8
test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java
.../java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java
+44
-5
test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java
...java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java
+2
-2
test/java/lang/invoke/LFCaching/LambdaFormTestCase.java
test/java/lang/invoke/LFCaching/LambdaFormTestCase.java
+81
-68
未找到文件。
test/java/lang/invoke/LFCaching/LFCachingTestCase.java
浏览文件 @
5c626bb2
...
@@ -77,7 +77,7 @@ public abstract class LFCachingTestCase extends LambdaFormTestCase {
...
@@ -77,7 +77,7 @@ public abstract class LFCachingTestCase extends LambdaFormTestCase {
}
}
}
catch
(
IllegalAccessException
|
IllegalArgumentException
|
}
catch
(
IllegalAccessException
|
IllegalArgumentException
|
SecurityException
|
InvocationTargetException
ex
)
{
SecurityException
|
InvocationTargetException
ex
)
{
throw
new
Error
(
"Unexpected exception
:
"
,
ex
);
throw
new
Error
(
"Unexpected exception"
,
ex
);
}
}
}
}
}
}
test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java
浏览文件 @
5c626bb2
...
@@ -73,7 +73,7 @@ public final class LFGarbageCollectedTest extends LambdaFormTestCase {
...
@@ -73,7 +73,7 @@ public final class LFGarbageCollectedTest extends LambdaFormTestCase {
try
{
try
{
adapter
=
testCase
.
getTestCaseMH
(
data
,
TestMethods
.
Kind
.
ONE
);
adapter
=
testCase
.
getTestCaseMH
(
data
,
TestMethods
.
Kind
.
ONE
);
}
catch
(
NoSuchMethodException
ex
)
{
}
catch
(
NoSuchMethodException
ex
)
{
throw
new
Error
(
"Unexpected exception
:
"
,
ex
);
throw
new
Error
(
"Unexpected exception"
,
ex
);
}
}
mtype
=
adapter
.
type
();
mtype
=
adapter
.
type
();
Object
lambdaForm
=
INTERNAL_FORM
.
invoke
(
adapter
);
Object
lambdaForm
=
INTERNAL_FORM
.
invoke
(
adapter
);
...
@@ -94,7 +94,7 @@ public final class LFGarbageCollectedTest extends LambdaFormTestCase {
...
@@ -94,7 +94,7 @@ public final class LFGarbageCollectedTest extends LambdaFormTestCase {
collectLambdaForm
();
collectLambdaForm
();
}
catch
(
IllegalAccessException
|
IllegalArgumentException
|
}
catch
(
IllegalAccessException
|
IllegalArgumentException
|
InvocationTargetException
ex
)
{
InvocationTargetException
ex
)
{
throw
new
Error
(
"Unexpected exception
:
"
,
ex
);
throw
new
Error
(
"Unexpected exception"
,
ex
);
}
}
}
}
...
...
test/java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java
浏览文件 @
5c626bb2
/*
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014,
2015,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -35,18 +35,23 @@
...
@@ -35,18 +35,23 @@
*/
*/
import
java.lang.invoke.MethodHandle
;
import
java.lang.invoke.MethodHandle
;
import
java.util.Collections
;
import
java.util.EnumSet
;
import
java.util.EnumSet
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.concurrent.BrokenBarrierException
;
import
java.util.concurrent.BrokenBarrierException
;
import
java.util.concurrent.ConcurrentLinkedQueue
;
import
java.util.concurrent.ConcurrentLinkedQueue
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.CyclicBarrier
;
import
java.util.concurrent.CyclicBarrier
;
import
com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor
;
/**
/**
* Multiple threaded lambda forms caching test class.
* Multiple threaded lambda forms caching test class.
*/
*/
public
final
class
LFMultiThreadCachingTest
extends
LFCachingTestCase
{
public
final
class
LFMultiThreadCachingTest
extends
LFCachingTestCase
{
private
static
final
TestMethods
.
Kind
[]
KINDS
;
private
static
final
TestMethods
.
Kind
[]
KINDS
;
static
{
static
{
EnumSet
<
TestMethods
.
Kind
>
set
=
EnumSet
.
complementOf
(
EnumSet
.
of
(
TestMethods
.
Kind
.
EXCEPT
));
EnumSet
<
TestMethods
.
Kind
>
set
=
EnumSet
.
complementOf
(
EnumSet
.
of
(
TestMethods
.
Kind
.
EXCEPT
));
KINDS
=
set
.
toArray
(
new
TestMethods
.
Kind
[
set
.
size
()]);
KINDS
=
set
.
toArray
(
new
TestMethods
.
Kind
[
set
.
size
()]);
...
@@ -72,21 +77,55 @@ public final class LFMultiThreadCachingTest extends LFCachingTestCase {
...
@@ -72,21 +77,55 @@ public final class LFMultiThreadCachingTest extends LFCachingTestCase {
ConcurrentLinkedQueue
<
MethodHandle
>
adapters
=
new
ConcurrentLinkedQueue
<>();
ConcurrentLinkedQueue
<
MethodHandle
>
adapters
=
new
ConcurrentLinkedQueue
<>();
CyclicBarrier
begin
=
new
CyclicBarrier
(
CORES
);
CyclicBarrier
begin
=
new
CyclicBarrier
(
CORES
);
CountDownLatch
end
=
new
CountDownLatch
(
CORES
);
CountDownLatch
end
=
new
CountDownLatch
(
CORES
);
final
Map
<
Thread
,
Throwable
>
threadUncaughtExceptions
=
Collections
.
synchronizedMap
(
new
HashMap
<
Thread
,
Throwable
>(
CORES
));
Thread
.
UncaughtExceptionHandler
exHandler
=
(
t
,
e
)
->
{
threadUncaughtExceptions
.
put
(
t
,
e
);
};
for
(
int
i
=
0
;
i
<
CORES
;
++
i
)
{
for
(
int
i
=
0
;
i
<
CORES
;
++
i
)
{
TestMethods
.
Kind
kind
=
KINDS
[
i
%
KINDS
.
length
];
TestMethods
.
Kind
kind
=
KINDS
[
i
%
KINDS
.
length
];
new
Thread
(()
->
{
Thread
t
=
new
Thread
(()
->
{
try
{
try
{
begin
.
await
();
begin
.
await
();
adapters
.
add
(
getTestMethod
().
getTestCaseMH
(
data
,
kind
));
adapters
.
add
(
getTestMethod
().
getTestCaseMH
(
data
,
kind
));
}
catch
(
InterruptedException
|
BrokenBarrierException
|
IllegalAccessException
|
NoSuchMethodException
ex
)
{
}
catch
(
InterruptedException
|
BrokenBarrierException
throw
new
Error
(
"Unexpected exception: "
,
ex
);
|
IllegalAccessException
|
NoSuchMethodException
ex
)
{
throw
new
Error
(
"Unexpected exception"
,
ex
);
}
finally
{
}
finally
{
end
.
countDown
();
end
.
countDown
();
}
}
}).
start
();
});
t
.
setUncaughtExceptionHandler
(
exHandler
);
t
.
start
();
}
}
try
{
try
{
end
.
await
();
end
.
await
();
boolean
vmeThrown
=
false
;
boolean
nonVmeThrown
=
false
;
Throwable
vme
=
null
;
for
(
Map
.
Entry
<
Thread
,
Throwable
>
entry
:
threadUncaughtExceptions
.
entrySet
())
{
Thread
t
=
entry
.
getKey
();
Throwable
e
=
entry
.
getValue
();
System
.
err
.
printf
(
"%nA thread with name \"%s\" of %d threads"
+
" has thrown exception:%n"
,
t
.
getName
(),
CORES
);
e
.
printStackTrace
();
if
(
CodeCacheOverflowProcessor
.
isThrowableCausedByVME
(
e
))
{
vmeThrown
=
true
;
vme
=
e
;
}
else
{
nonVmeThrown
=
true
;
}
if
(
nonVmeThrown
)
{
throw
new
Error
(
"One ore more threads have"
+
" thrown unexpected exceptions. See log."
);
}
if
(
vmeThrown
)
{
throw
new
Error
(
"One ore more threads have"
+
" thrown VirtualMachineError caused by"
+
" code cache overflow. See log."
,
vme
);
}
}
}
catch
(
InterruptedException
ex
)
{
}
catch
(
InterruptedException
ex
)
{
throw
new
Error
(
"Unexpected exception: "
,
ex
);
throw
new
Error
(
"Unexpected exception: "
,
ex
);
}
}
...
...
test/java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java
浏览文件 @
5c626bb2
/*
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014,
2015,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -62,7 +62,7 @@ public final class LFSingleThreadCachingTest extends LFCachingTestCase {
...
@@ -62,7 +62,7 @@ public final class LFSingleThreadCachingTest extends LFCachingTestCase {
adapter1
=
getTestMethod
().
getTestCaseMH
(
data
,
TestMethods
.
Kind
.
ONE
);
adapter1
=
getTestMethod
().
getTestCaseMH
(
data
,
TestMethods
.
Kind
.
ONE
);
adapter2
=
getTestMethod
().
getTestCaseMH
(
data
,
TestMethods
.
Kind
.
TWO
);
adapter2
=
getTestMethod
().
getTestCaseMH
(
data
,
TestMethods
.
Kind
.
TWO
);
}
catch
(
NoSuchMethodException
|
IllegalAccessException
ex
)
{
}
catch
(
NoSuchMethodException
|
IllegalAccessException
ex
)
{
throw
new
Error
(
"Unexpected exception
:
"
,
ex
);
throw
new
Error
(
"Unexpected exception"
,
ex
);
}
}
checkLFCaching
(
adapter1
,
adapter2
);
checkLFCaching
(
adapter1
,
adapter2
);
}
}
...
...
test/java/lang/invoke/LFCaching/LambdaFormTestCase.java
浏览文件 @
5c626bb2
/*
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014,
2015,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -22,8 +22,7 @@
...
@@ -22,8 +22,7 @@
*/
*/
import
com.oracle.testlibrary.jsr292.Helper
;
import
com.oracle.testlibrary.jsr292.Helper
;
import
com.sun.management.HotSpotDiagnosticMXBean
;
import
com.oracle.testlibrary.jsr292.CodeCacheOverflowProcessor
;
import
java.lang.invoke.MethodHandle
;
import
java.lang.invoke.MethodHandle
;
import
java.lang.management.GarbageCollectorMXBean
;
import
java.lang.management.GarbageCollectorMXBean
;
import
java.lang.management.ManagementFactory
;
import
java.lang.management.ManagementFactory
;
...
@@ -45,8 +44,6 @@ import jdk.testlibrary.TimeLimitedRunner;
...
@@ -45,8 +44,6 @@ import jdk.testlibrary.TimeLimitedRunner;
*/
*/
public
abstract
class
LambdaFormTestCase
{
public
abstract
class
LambdaFormTestCase
{
private
static
final
double
ITERATIONS_TO_CODE_CACHE_SIZE_RATIO
=
45
/
(
128.0
*
1024
*
1024
);
private
static
final
long
TIMEOUT
=
Helper
.
IS_THOROUGH
?
0L
:
(
long
)
(
Utils
.
adjustTimeout
(
Utils
.
DEFAULT_TEST_TIMEOUT
)
*
0.9
);
private
static
final
long
TIMEOUT
=
Helper
.
IS_THOROUGH
?
0L
:
(
long
)
(
Utils
.
adjustTimeout
(
Utils
.
DEFAULT_TEST_TIMEOUT
)
*
0.9
);
/**
/**
...
@@ -73,7 +70,7 @@ public abstract class LambdaFormTestCase {
...
@@ -73,7 +70,7 @@ public abstract class LambdaFormTestCase {
REF_FIELD
=
Reference
.
class
.
getDeclaredField
(
"referent"
);
REF_FIELD
=
Reference
.
class
.
getDeclaredField
(
"referent"
);
REF_FIELD
.
setAccessible
(
true
);
REF_FIELD
.
setAccessible
(
true
);
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
throw
new
Error
(
"Unexpected exception
:
"
,
ex
);
throw
new
Error
(
"Unexpected exception"
,
ex
);
}
}
gcInfo
=
ManagementFactory
.
getGarbageCollectorMXBeans
();
gcInfo
=
ManagementFactory
.
getGarbageCollectorMXBeans
();
...
@@ -83,13 +80,79 @@ public abstract class LambdaFormTestCase {
...
@@ -83,13 +80,79 @@ public abstract class LambdaFormTestCase {
}
}
private
final
TestMethods
testMethod
;
private
final
TestMethods
testMethod
;
private
static
long
totalIterations
=
0L
;
private
static
long
doneIterations
=
0L
;
private
static
boolean
passed
=
true
;
private
static
int
testCounter
=
0
;
private
static
int
failCounter
=
0
;
private
long
gcCountAtStart
;
private
long
gcCountAtStart
;
private
static
class
TestRun
{
final
Function
<
TestMethods
,
LambdaFormTestCase
>
ctor
;
final
Collection
<
TestMethods
>
testMethods
;
final
long
totalIterations
;
long
doneIterations
;
long
testCounter
;
long
failCounter
;
boolean
passed
;
TestRun
(
Function
<
TestMethods
,
LambdaFormTestCase
>
ctor
,
Collection
<
TestMethods
>
testMethods
)
{
this
.
ctor
=
ctor
;
this
.
testMethods
=
testMethods
;
long
testCaseNum
=
testMethods
.
size
();
long
iterations
=
Math
.
max
(
1
,
Helper
.
TEST_LIMIT
/
testCaseNum
);
System
.
out
.
printf
(
"Number of iterations according to -DtestLimit is %d (%d cases)%n"
,
iterations
,
iterations
*
testCaseNum
);
System
.
out
.
printf
(
"Number of iterations is set to %d (%d cases)%n"
,
iterations
,
iterations
*
testCaseNum
);
System
.
out
.
flush
();
totalIterations
=
iterations
;
doneIterations
=
0L
;
testCounter
=
0L
;
failCounter
=
0L
;
passed
=
true
;
}
Boolean
doIteration
()
{
if
(
doneIterations
>=
totalIterations
)
{
return
false
;
}
System
.
err
.
println
(
String
.
format
(
"Iteration %d:"
,
doneIterations
));
for
(
TestMethods
testMethod
:
testMethods
)
{
LambdaFormTestCase
testCase
=
ctor
.
apply
(
testMethod
);
try
{
System
.
err
.
printf
(
"Tested LF caching feature"
+
" with MethodHandles.%s method.%n"
,
testCase
.
getTestMethod
().
name
);
Throwable
t
=
CodeCacheOverflowProcessor
.
runMHTest
(
testCase:
:
doTest
);
if
(
t
!=
null
)
{
return
false
;
}
System
.
err
.
println
(
"PASSED"
);
}
catch
(
OutOfMemoryError
oome
)
{
// Don't swallow OOME so a heap dump can be created.
System
.
err
.
println
(
"FAILED"
);
throw
oome
;
}
catch
(
Throwable
t
)
{
t
.
printStackTrace
();
System
.
err
.
printf
(
"FAILED. Caused by %s%n"
,
t
.
getMessage
());
passed
=
false
;
failCounter
++;
}
testCounter
++;
}
doneIterations
++;
return
true
;
}
void
checkPassed
()
{
if
(!
passed
)
{
throw
new
Error
(
String
.
format
(
"%d of %d test cases FAILED! %n"
+
"Rerun the test with the same \"-Dseed=\" option as in the log file!"
,
failCounter
,
testCounter
));
}
else
{
System
.
err
.
printf
(
"All %d test cases PASSED!%n"
,
testCounter
);
}
}
}
/**
/**
* Test case constructor. Generates test cases with random method types for
* Test case constructor. Generates test cases with random method types for
* given methods form {@code j.l.i.MethodHandles} class.
* given methods form {@code j.l.i.MethodHandles} class.
...
@@ -123,65 +186,15 @@ public abstract class LambdaFormTestCase {
...
@@ -123,65 +186,15 @@ public abstract class LambdaFormTestCase {
* @param testMethods list of test methods
* @param testMethods list of test methods
*/
*/
public
static
void
runTests
(
Function
<
TestMethods
,
LambdaFormTestCase
>
ctor
,
Collection
<
TestMethods
>
testMethods
)
{
public
static
void
runTests
(
Function
<
TestMethods
,
LambdaFormTestCase
>
ctor
,
Collection
<
TestMethods
>
testMethods
)
{
long
testCaseNum
=
testMethods
.
size
();
LambdaFormTestCase
.
TestRun
run
totalIterations
=
Math
.
max
(
1
,
Helper
.
TEST_LIMIT
/
testCaseNum
);
=
new
LambdaFormTestCase
.
TestRun
(
ctor
,
testMethods
);
System
.
out
.
printf
(
"Number of iterations according to -DtestLimit is %d (%d cases)%n"
,
TimeLimitedRunner
runner
=
new
TimeLimitedRunner
(
TIMEOUT
,
4.0d
,
run:
:
doIteration
);
totalIterations
,
totalIterations
*
testCaseNum
);
HotSpotDiagnosticMXBean
hsDiagBean
=
ManagementFactory
.
getPlatformMXBean
(
HotSpotDiagnosticMXBean
.
class
);
long
codeCacheSize
=
Long
.
parseLong
(
hsDiagBean
.
getVMOption
(
"ReservedCodeCacheSize"
).
getValue
());
System
.
out
.
printf
(
"Code Cache Size is %d bytes%n"
,
codeCacheSize
);
long
iterationsByCodeCacheSize
=
(
long
)
(
codeCacheSize
*
ITERATIONS_TO_CODE_CACHE_SIZE_RATIO
);
System
.
out
.
printf
(
"Number of iterations limited by code cache size is %d (%d cases)%n"
,
iterationsByCodeCacheSize
,
iterationsByCodeCacheSize
*
testCaseNum
);
if
(
totalIterations
>
iterationsByCodeCacheSize
)
{
totalIterations
=
iterationsByCodeCacheSize
;
}
System
.
out
.
printf
(
"Number of iterations is set to %d (%d cases)%n"
,
totalIterations
,
totalIterations
*
testCaseNum
);
System
.
out
.
flush
();
TimeLimitedRunner
runner
=
new
TimeLimitedRunner
(
TIMEOUT
,
4.0d
,
()
->
{
if
(
doneIterations
>=
totalIterations
)
{
return
false
;
}
System
.
err
.
println
(
String
.
format
(
"Iteration %d:"
,
doneIterations
));
for
(
TestMethods
testMethod
:
testMethods
)
{
LambdaFormTestCase
testCase
=
ctor
.
apply
(
testMethod
);
try
{
System
.
err
.
printf
(
"Tested LF caching feature with MethodHandles.%s method.%n"
,
testCase
.
getTestMethod
().
name
);
testCase
.
doTest
();
System
.
err
.
println
(
"PASSED"
);
}
catch
(
OutOfMemoryError
e
)
{
// Don't swallow OOME so a heap dump can be created.
System
.
err
.
println
(
"FAILED"
);
throw
e
;
}
catch
(
Throwable
t
)
{
t
.
printStackTrace
();
System
.
err
.
println
(
"FAILED"
);
passed
=
false
;
failCounter
++;
}
testCounter
++;
}
doneIterations
++;
return
true
;
});
try
{
try
{
runner
.
call
();
runner
.
call
();
}
catch
(
Throwable
t
)
{
}
catch
(
Exception
ex
)
{
t
.
printStackTrace
();
System
.
err
.
println
(
"FAILED"
);
System
.
err
.
println
(
"FAILED"
);
throw
new
Error
(
"Unexpected error!"
);
throw
new
Error
(
"Unexpected error!"
,
ex
);
}
if
(!
passed
)
{
throw
new
Error
(
String
.
format
(
"%d of %d test cases FAILED! %n"
+
"Rerun the test with the same \"-Dseed=\" option as in the log file!"
,
failCounter
,
testCounter
));
}
else
{
System
.
err
.
println
(
String
.
format
(
"All %d test cases PASSED!"
,
testCounter
));
}
}
run
.
checkPassed
();
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录