blob: 2d836250ceb678cbc931dec00d93e22c38076fd7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/*
* Copyright (C) 2014 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.
*/
package com.android.jack.test.runner;
import com.android.jack.test.runner.DalvikRunner.DalvikMode;
import com.android.jack.test.toolchain.AbstractTestTools;
import javax.annotation.Nonnull;
/**
* A factory to build {@link RuntimeRunner}s.
*/
public class RuntimeRunnerFactory {
private static final char SEPARATOR = '-';
/**
* Runtime names are composed as follows:
* <runtime environment name>-<variant>-<kind>
* Where runtime environment name is one of Dalvik, ART, ..., variant defines a variant
* for the selected environment (e.g. jit or fast for dalvik) and finally target is either
* host or device.
*/
@Nonnull
public static RuntimeRunner create(@Nonnull String rtName) throws RuntimeRunnerException {
int firstIndex = rtName.indexOf(SEPARATOR);
int lastIndex = rtName.lastIndexOf(SEPARATOR);
String rtEnvName = null;
String variant = null;
String runnerKind = null;
if (firstIndex > -1) {
rtEnvName = rtName.substring(0, firstIndex);
runnerKind = rtName.substring(lastIndex + 1);
}
if (firstIndex < lastIndex) {
variant =
rtName.substring(firstIndex + 1, lastIndex);
}
RuntimeRunner result;
if ("dalvik".equals(rtEnvName)) {
if ("device".equals(runnerKind)) {
result = new DalvikRunnerDevice();
} else if ("host".equals(runnerKind)) {
result = new DalvikRunnerHost(AbstractTestTools.getRuntimeEnvironmentRootDir(rtName));
} else {
throw new RuntimeRunnerException("Unkown target for Dalvik: '" + rtName + "'");
}
if ("jit".equals(variant)) {
((DalvikRunner) result).setMode(DalvikMode.JIT);
} else if ("fast".equals(variant)) {
((DalvikRunner) result).setMode(DalvikMode.FAST);
} else if (variant != null) {
throw new RuntimeRunnerException("Unkown variant for Dalvik: '" + rtName + "'");
}
} else if ("art".equals(rtEnvName)) {
if ("host".equals(runnerKind)) {
result = new ArtRunnerHost(AbstractTestTools.getRuntimeEnvironmentRootDir(rtName));
} else if ("device".equals(runnerKind)) {
result = new ArtRunnerDevice();
} else {
throw new RuntimeRunnerException("Unkown target for ART: '" + rtName + "'");
}
} else {
throw new RuntimeRunnerException("Unkown runtime environment for ART: '" + rtName + "'");
}
return result;
}
}
|