jdk-24/test/hotspot/jtreg/vmTestbase/vm/gc/containers/ContainerDescription.java
Igor Ignatyev 072459a055 8199370: [TESTBUG] Open source vm testbase GC tests
Reviewed-by: erikj, ihse, ehelin
2018-05-17 14:52:47 -07:00

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;
}
}