001 /*
002 * This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 * This file is licensed to You under the Eclipse Public License (EPL);
005 * You may not use this file except in compliance with the License. You
006 * may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 * See the COPYRIGHT.txt file distributed with this work for information
011 * regarding copyright ownership.
012 */
013 package org.vmutil.options;
014
015 import org.vmmagic.pragma.Uninterruptible;
016
017 /**
018 * A time option that stores values at a microsecond granularity.
019 */
020 public class MicrosecondsOption extends Option {
021 // values
022 protected int defaultValue;
023 protected int value;
024
025 /**
026 * Create a new microsecond option.
027 *
028 * @param set The option set this option belongs to.
029 * @param name The space separated name for the option.
030 * @param desc The purpose of the option
031 * @param defaultUs The default value of the option (usec).
032 */
033 protected MicrosecondsOption(OptionSet set, String name, String desc, int defaultUs) {
034 super(set, MICROSECONDS_OPTION, name, desc);
035 this.value = this.defaultValue = defaultUs;
036 }
037
038 /**
039 * Read the current value of the option in microseconds.
040 *
041 * @return The option value.
042 */
043 @Uninterruptible
044 public int getMicroseconds() {
045 return this.value;
046 }
047
048 /**
049 * Read the current value of the option in milliseconds.
050 *
051 * @return The option value.
052 */
053 @Uninterruptible
054 public int getMilliseconds() {
055 return this.value / 1000;
056 }
057
058 /**
059 * Read the default value of the option in microseconds.
060 *
061 * @return The default value.
062 */
063 @Uninterruptible
064 public int getDefaultMicroseconds() {
065 return this.defaultValue;
066 }
067
068 /**
069 * Read the default value of the option in milliseconds.
070 *
071 * @return The default value.
072 */
073 @Uninterruptible
074 public int getDefaultMilliseconds() {
075 return this.defaultValue / 1000;
076 }
077
078 /**
079 * Update the value of the option, echoing the change if the echoOptions
080 * option is set. An error occurs if the value is negative, and then the
081 * validate method is called to allow subclasses to perform any additional
082 * validation.
083 *
084 * @param value The new value for the option.
085 */
086 public void setMicroseconds(int value) {
087 failIf(value < 0, "Unreasonable " + this.getName() + " value");
088 this.value = value;
089 validate();
090 set.logChange(this);
091 }
092
093 /**
094 * Modify the default value of the option.
095 *
096 * @param value The new default value for the option.
097 */
098 public void setDefaultMicrosends(int value) {
099 this.value = this.defaultValue = value;
100 }
101 }