072459a055
Reviewed-by: erikj, ihse, ehelin
179 lines
5.5 KiB
Java
179 lines
5.5 KiB
Java
/*
|
|
* Copyright (c) 2010, 2018, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
package vm.gc.containers;
|
|
|
|
import nsk.share.TestBug;
|
|
import nsk.share.gc.gp.GarbageProducer;
|
|
import nsk.share.gc.gp.GarbageUtils;
|
|
import nsk.share.gc.gp.MemoryStrategy;
|
|
|
|
/**
|
|
* This is a description which is parsed from command-line string.
|
|
* It contains the container type, garbage producer, memory strategy,
|
|
* speed of objects renovations and count of threads to work with
|
|
* container. The conatainer should be MT safe if threadsCount more then 1.
|
|
*/
|
|
public class ContainerDescription {
|
|
|
|
/*
|
|
* The container description is next:
|
|
* containerName(garbageProucer,numberOfThreads,speed,MemoryStrategy)
|
|
* all parameters except containerName are optional
|
|
* containerName is the Name of class from java.util or java.util.concurrent
|
|
*/
|
|
static ContainerDescription parseFromString(String string) {
|
|
int params = string.indexOf('(');
|
|
String gp;
|
|
Speed speed = Speed.MEDIUM;
|
|
MemoryStrategy ms = null;
|
|
int count = 1;
|
|
|
|
if (params == -1) {
|
|
ContainerDescription descr = new ContainerDescription(string);
|
|
descr.setSpeed(speed);
|
|
descr.setThreadsCount(count);
|
|
return descr;
|
|
}
|
|
if (!string.endsWith(")")) {
|
|
throw new TestBug("Incorrect syntax of container description.");
|
|
}
|
|
String name = string.substring(0, string.indexOf('('));
|
|
String parameters = string.substring(string.indexOf("(") + 1, string.length() - 1);
|
|
final int closedBracket = parameters.lastIndexOf(')');
|
|
int del = parameters.indexOf(',', closedBracket + 1);
|
|
if (del == -1) {
|
|
gp = parameters;
|
|
} else {
|
|
gp = parameters.substring(0, del).trim();
|
|
String[] other = parameters.substring(del + 1).split(",");
|
|
switch (other.length) {
|
|
case 3:
|
|
ms = MemoryStrategy.fromString(other[2].trim());
|
|
case 2:
|
|
speed = Speed.fromString(other[1].trim());
|
|
case 1:
|
|
count = Integer.parseInt(other[0].trim());
|
|
break;
|
|
default:
|
|
throw new TestBug("Unexpected size of parameters: " + other.length + 1);
|
|
}
|
|
}
|
|
ContainerDescription descr = new ContainerDescription(name);
|
|
descr.setGarbageProducer(GarbageUtils.getGarbageProducer(gp));
|
|
descr.setSpeed(speed);
|
|
descr.setThreadsCount(count);
|
|
descr.setMemoryStrategy(ms);
|
|
return descr;
|
|
}
|
|
|
|
protected ContainerDescription(String name) {
|
|
this.name = name;
|
|
}
|
|
protected GarbageProducer garbageProducer;
|
|
|
|
/**
|
|
* Get the value of garbageProducer
|
|
*
|
|
* @return the value of garbageProducer
|
|
*/
|
|
public GarbageProducer getGarbageProducer() {
|
|
return garbageProducer;
|
|
}
|
|
|
|
/**
|
|
* Set the value of garbageProducer
|
|
*
|
|
* @param garbageProducer new value of garbageProducer
|
|
*/
|
|
public void setGarbageProducer(GarbageProducer garbageProducer) {
|
|
this.garbageProducer = garbageProducer;
|
|
}
|
|
protected MemoryStrategy memoryStrategy;
|
|
|
|
/**
|
|
* Get the value of memoryStrategy
|
|
*
|
|
* @return the value of memoryStrategy
|
|
*/
|
|
public MemoryStrategy getMemoryStrategy() {
|
|
return memoryStrategy;
|
|
}
|
|
|
|
/**
|
|
* Set the value of memoryStrategy
|
|
*
|
|
* @param memoryStrategy new value of memoryStrategy
|
|
*/
|
|
public void setMemoryStrategy(MemoryStrategy memoryStrategy) {
|
|
this.memoryStrategy = memoryStrategy;
|
|
}
|
|
protected String name;
|
|
|
|
/**
|
|
* Get the value of Type
|
|
*
|
|
* @return the value of Type
|
|
*/
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
protected Speed speed = Speed.MEDIUM;
|
|
|
|
/**
|
|
* Get the value of speed
|
|
*
|
|
* @return the value of speed
|
|
*/
|
|
public Speed getSpeed() {
|
|
return speed;
|
|
}
|
|
|
|
/**
|
|
* Set the value of speed
|
|
*
|
|
* @param speed new value of speed
|
|
*/
|
|
public void setSpeed(Speed speed) {
|
|
this.speed = speed;
|
|
}
|
|
protected int threadsCount;
|
|
|
|
/**
|
|
* Get the value of threadsCount
|
|
*
|
|
* @return the value of threadsCount
|
|
*/
|
|
public int getThreadsCount() {
|
|
return threadsCount;
|
|
}
|
|
|
|
/**
|
|
* Set the value of threadsCount
|
|
*
|
|
* @param threadsCount new value of threadsCount
|
|
*/
|
|
public void setThreadsCount(int threadsCount) {
|
|
this.threadsCount = threadsCount;
|
|
}
|
|
}
|