Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetCurrentThreadCpuTime/curthrcputime001.java
40948 views
/*1* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223package nsk.jvmti.GetCurrentThreadCpuTime;2425import java.io.PrintStream;2627import nsk.share.*;28import nsk.share.jvmti.*;2930/** Debuggee class for this test. */31public class curthrcputime001 extends DebugeeClass {3233/** Load native library if required. */34static {35loadLibrary("curthrcputime001");36}3738/** Run test from command line. */39public static void main(String argv[]) {40argv = nsk.share.jvmti.JVMTITest.commonInit(argv);4142// JCK-compatible exit43System.exit(run(argv, System.out) + Consts.JCK_STATUS_BASE);44}4546/** Run test from JCK-compatible environment. */47public static int run(String argv[], PrintStream out) {48return new curthrcputime001().runIt(argv, out);49}5051/* =================================================================== */5253// scaffold objects54ArgumentHandler argHandler = null;55Log log = null;56long timeout = 0;57int status = Consts.TEST_PASSED;5859static final String TESTED_THREAD_NAME = "curthrcputime001Thread";60static final int SLEEP_TIME = 5 * 1000; // milliseconds6162/** Run debuggee. */63public int runIt(String argv[], PrintStream out) {64argHandler = new ArgumentHandler(argv);65log = new Log(out, argHandler);66timeout = argHandler.getWaitTime() * 60 * 1000; // milliseconds6768int iterations = argHandler.findOptionIntValue("iterations", 1000);6970curthrcputime001Thread thread = new curthrcputime001Thread(TESTED_THREAD_NAME, iterations);7172// sync before thread started73log.display("Sync: tested thread created");74status = checkStatus(status);7576// start and finish tested thread77try {78synchronized (thread.endingMonitor) {79// start thread and wait for start notification80synchronized (thread.startingMonitor) {81thread.start();82thread.startingMonitor.wait();83}8485// sync after thread started86log.display("Sync: tested thread started");87status = checkStatus(status);8889// let thread to finish90}9192// wait for thread to finish93thread.join();9495} catch (InterruptedException e) {96throw new Failure("Main thread interrupted while running tested thread:\n\t"97+ e);98}99100// sync after thread finished101log.display("Sync: tested thread finished");102status = checkStatus(status);103104return status;105}106}107108/* =================================================================== */109110/** Class for tested thread. */111class curthrcputime001Thread extends Thread {112public int iterations;113114public Object startingMonitor = new Object();115public Object endingMonitor = new Object();116117/** Make thread with specific name. */118public curthrcputime001Thread(String name, int iterations) {119super(name);120this.iterations = iterations;121}122123/** Run some code. */124public void run() {125126runIterations(iterations);127128// notify about start129synchronized (startingMonitor) {130startingMonitor.notifyAll();131}132133runIterations(iterations);134135// wait for finishing enabled136synchronized (endingMonitor) {137}138139runIterations(iterations);140141}142143/** Run some code with given number of iterations. */144void runIterations(int n) {145for (int k = 0; k < n; k++) {146int s = k;147for (int i = 0; i < n; i++) {148if (i % 2 == 0) {149s += i * 10;150} else {151s -= i * 10;152}153}154}155}156}157158159