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.mmtk.vm; 014 015 import org.vmutil.options.OptionSet; 016 import org.mmtk.utility.gcspy.Color; 017 import org.mmtk.utility.gcspy.drivers.AbstractDriver; 018 import org.mmtk.vm.gcspy.ByteStream; 019 import org.mmtk.vm.gcspy.IntStream; 020 import org.mmtk.vm.gcspy.ServerInterpreter; 021 import org.mmtk.vm.gcspy.ServerSpace; 022 import org.mmtk.vm.gcspy.ShortStream; 023 import org.mmtk.vm.gcspy.Util; 024 025 /** 026 * This class defines factory methods for VM-specific types which must 027 * be instantiated within MMTk. Since the concrete type is defined at 028 * build time, we leave it to a concrete vm-specific instance of this class 029 * to perform the object instantiation. 030 */ 031 public abstract class Factory { 032 033 /** 034 * Create or retrieve the OptionSet used for MMTk options. 035 * 036 * @return A concrete VM-specific OptionSet instance 037 */ 038 public abstract OptionSet getOptionSet(); 039 040 /** 041 * Create a new ActivePlan instance using the appropriate VM-specific 042 * concrete ActivePlan sub-class. 043 * 044 * @see ActivePlan 045 * @return A concrete VM-specific ActivePlan instance. 046 */ 047 public abstract ActivePlan newActivePlan(); 048 049 /** 050 * Create a new Assert instance using the appropriate VM-specific 051 * concrete Assert sub-class. 052 * 053 * @see Assert 054 * @return A concrete VM-specific Assert instance. 055 */ 056 public abstract Assert newAssert(); 057 058 /** 059 * Create a new Barriers instance using the appropriate VM-specific 060 * concrete Barriers sub-class. 061 * 062 * @see Barriers 063 * @return A concrete VM-specific Barriers instance. 064 */ 065 public abstract Barriers newBarriers(); 066 067 /** 068 * Create a new Collection instance using the appropriate VM-specific 069 * concrete Collection sub-class. 070 * 071 * @see Collection 072 * @return A concrete VM-specific Collection instance. 073 */ 074 public abstract Collection newCollection(); 075 076 /** 077 * Create a new BuildTimeConfig instance using the appropriate VM-specific 078 * concrete BuildTimeConfig sub-class. 079 * 080 * @see Collection 081 * @return A concrete VM-specific Collection instance. 082 */ 083 public abstract BuildTimeConfig newBuildTimeConfig(); 084 085 /** 086 * Create a new Lock instance using the appropriate VM-specific 087 * concrete Lock sub-class. 088 * 089 * @see Lock 090 * @param name The string to be associated with this lock instance 091 * @return A concrete VM-specific Lock instance. 092 */ 093 public abstract Lock newLock(String name); 094 095 /** 096 * Create a new Monitor instance using the appropriate VM-specific 097 * concrete Lock sub-class. 098 * 099 * @see Monitor 100 * @param name The string to be associated with this monitor instance 101 * @return A concrete VM-specific Monitor instance. 102 */ 103 public abstract Monitor newMonitor(String name); 104 105 /** 106 * Create a new Memory instance using the appropriate VM-specific 107 * concrete Memory sub-class. 108 * 109 * @see Memory 110 * @return A concrete VM-specific Memory instance. 111 */ 112 public abstract Memory newMemory(); 113 114 /** 115 * Create a new ObjectModel instance using the appropriate VM-specific 116 * concrete ObjectModel sub-class. 117 * 118 * @see ObjectModel 119 * @return A concrete VM-specific ObjectModel instance. 120 */ 121 public abstract ObjectModel newObjectModel(); 122 123 /** 124 * Create a new ReferenceProcessor instance using the appropriate VM-specific 125 * concrete ReferenceProcessor sub-class. 126 * 127 * @see ReferenceProcessor 128 * @return A concrete VM-specific ReferenceProcessor instance. 129 */ 130 public abstract ReferenceProcessor newReferenceProcessor(ReferenceProcessor.Semantics semantics); 131 132 133 /** 134 * Create a new FinalizbleProcessor instance using the appropriate VM-specific 135 * concrete FinalizableProcessor sub-class. 136 * 137 * @see FinalizableProcessor 138 * @return A concrete VM-specific FinalizableProcessor instance. 139 */ 140 public abstract FinalizableProcessor newFinalizableProcessor(); 141 142 /** 143 * Create a new Scanning instance using the appropriate VM-specific 144 * concrete Scanning sub-class. 145 * 146 * @see Scanning 147 * @return A concrete VM-specific Scanning instance. 148 */ 149 public abstract Scanning newScanning(); 150 151 /** 152 * Create a new Statistics instance using the appropriate VM-specific 153 * concrete Statistics sub-class. 154 * 155 * @see Statistics 156 * @return A concrete VM-specific Statistics instance. 157 */ 158 public abstract Statistics newStatistics(); 159 160 /** 161 * Create a new Strings instance using the appropriate VM-specific 162 * concrete Strings sub-class. 163 * 164 * @see Strings 165 * @return A concrete VM-specific Strings instance. 166 */ 167 public abstract Strings newStrings(); 168 169 /** 170 * Create a new SynchronizedCounter instance using the appropriate 171 * VM-specific concrete SynchronizedCounter sub-class. 172 * 173 * @see SynchronizedCounter 174 * 175 * @return A concrete VM-specific SynchronizedCounter instance. 176 */ 177 public abstract SynchronizedCounter newSynchronizedCounter(); 178 179 /** 180 * Create a new TraceInterface instance using the appropriate VM-specific 181 * concrete TraceInterface sub-class. 182 * 183 * @see TraceInterface 184 * @return A concrete VM-specific TraceInterface instance. 185 */ 186 public abstract TraceInterface newTraceInterface(); 187 188 /** 189 * Create a new MMTk_Events instance using the appropriate VM-specific 190 * concrete MMTk_Events sub-class. 191 */ 192 public abstract MMTk_Events newEvents(); 193 194 /** 195 * Create a new debug object 196 */ 197 public abstract Debug newDebug(); 198 199 /********************************************************************** 200 * GCspy methods 201 */ 202 203 /** 204 * Create a new Util instance using the appropriate VM-specific 205 * concrete Util sub-class. 206 * 207 * @see Util 208 * @return A concrete VM-specific Util instance. 209 */ 210 public abstract Util newGCspyUtil(); 211 212 /** 213 * Create a new ServerInterpreter instance using the appropriate VM-specific 214 * concrete ServerInterpreter sub-class. 215 * 216 * @see ServerInterpreter 217 * @return A concrete VM-specific ServerInterpreter instance. 218 */ 219 public abstract ServerInterpreter newGCspyServerInterpreter(); 220 221 /** 222 * Create a new ServerSpace instance using the appropriate VM-specific 223 * concrete ServerSpace sub-class. 224 * 225 * @param serverInterpreter The server that owns this space 226 * @param serverName The server's name 227 * @param driverName The space driver's name 228 * @param title Title for the space 229 * @param blockInfo A label for each block 230 * @param tileNum Max number of tiles in this space 231 * @param unused A label for unused blocks 232 * @param mainSpace Whether this space is the main space 233 * 234 * @see ServerSpace 235 * @return A concrete VM-specific ServerSpace instance. 236 */ 237 public abstract ServerSpace newGCspyServerSpace( 238 ServerInterpreter serverInterpreter, 239 String serverName, 240 String driverName, 241 String title, 242 String blockInfo, 243 int tileNum, 244 String unused, 245 boolean mainSpace); 246 247 /** 248 * Create a new IntStream instance using the appropriate 249 * VM-specific concrete IntStream sub-class. 250 * 251 * @param driver The driver that owns this Stream 252 * @param name The name of the stream (e.g. "Used space") 253 * @param minValue The minimum value for any item in this stream. 254 * Values less than this will be represented as "minValue-" 255 * @param maxValue The maximum value for any item in this stream. 256 * Values greater than this will be represented as "maxValue+" 257 * @param zeroValue The zero value for this stream 258 * @param defaultValue The default value for this stream 259 * @param stringPre A string to prefix values (e.g. "Used: ") 260 * @param stringPost A string to suffix values (e.g. " bytes.") 261 * @param presentation How a stream value is to be presented. 262 * @param paintStyle How the value is to be painted. 263 * @param indexMaxStream The index of the maximum stream if the presentation is *_VAR. 264 * @param colour The default colour for tiles of this stream 265 * @see IntStream 266 * 267 * @return A concrete VM-specific IntStream instance. 268 */ 269 public abstract IntStream newGCspyIntStream( 270 AbstractDriver driver, 271 String name, 272 int minValue, 273 int maxValue, 274 int zeroValue, 275 int defaultValue, 276 String stringPre, 277 String stringPost, 278 int presentation, 279 int paintStyle, 280 int indexMaxStream, 281 Color colour, 282 boolean summary); 283 284 /** 285 * Create a new ByteStream instance using the appropriate 286 * VM-specific concrete ByteStream sub-class. 287 * 288 * @param driver The driver that owns this Stream 289 * @param name The name of the stream (e.g. "Used space") 290 * @param minValue The minimum value for any item in this stream. 291 * Values less than this will be represented as "minValue-" 292 * @param maxValue The maximum value for any item in this stream. 293 * Values greater than this will be represented as "maxValue+" 294 * @param zeroValue The zero value for this stream 295 * @param defaultValue The default value for this stream 296 * @param stringPre A string to prefix values (e.g. "Used: ") 297 * @param stringPost A string to suffix values (e.g. " bytes.") 298 * @param presentation How a stream value is to be presented. 299 * @param paintStyle How the value is to be painted. 300 * @param indexMaxStream The index of the maximum stream if the presentation is *_VAR. 301 * @param colour The default colour for tiles of this stream 302 * @see IntStream 303 * 304 * @return A concrete VM-specific ByteStream instance. 305 */ 306 public abstract ByteStream newGCspyByteStream( 307 AbstractDriver driver, 308 String name, 309 byte minValue, 310 byte maxValue, 311 byte zeroValue, 312 byte defaultValue, 313 String stringPre, 314 String stringPost, 315 int presentation, 316 int paintStyle, 317 int indexMaxStream, 318 Color colour, 319 boolean summary); 320 321 /** 322 * Create a new ShortStream instance using the appropriate 323 * VM-specific concrete ShortStream sub-class. 324 * 325 * @param driver The driver that owns this Stream 326 * @param name The name of the stream (e.g. "Used space") 327 * @param minValue The minimum value for any item in this stream. 328 * Values less than this will be represented as "minValue-" 329 * @param maxValue The maximum value for any item in this stream. 330 * Values greater than this will be represented as "maxValue+" 331 * @param zeroValue The zero value for this stream 332 * @param defaultValue The default value for this stream 333 * @param stringPre A string to prefix values (e.g. "Used: ") 334 * @param stringPost A string to suffix values (e.g. " bytes.") 335 * @param presentation How a stream value is to be presented. 336 * @param paintStyle How the value is to be painted. 337 * @param indexMaxStream The index of the maximum stream if the presentation is *_VAR. 338 * @param colour The default colour for tiles of this stream 339 * @see IntStream 340 * 341 * @return A concrete VM-specific ShortStream instance. 342 */ 343 public abstract ShortStream newGCspyShortStream( 344 AbstractDriver driver, 345 String name, 346 short minValue, 347 short maxValue, 348 short zeroValue, 349 short defaultValue, 350 String stringPre, 351 String stringPost, 352 int presentation, 353 int paintStyle, 354 int indexMaxStream, 355 Color colour, 356 boolean summary); 357 }