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.jikesrvm.mm.mmtk;
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.ReferenceProcessor.Semantics;
019    
020    import org.jikesrvm.VM;
021    
022    /**
023     * This is a VM-specific class which defines factory methods for
024     * VM-specific types which must be instantiated within MMTk.
025     *
026     * @see org.mmtk.vm.Factory
027     */
028    public final class Factory extends org.mmtk.vm.Factory {
029    
030      private static final String DEFAULT_MMTK_PROPERTIES = ".mmtk.properties";
031      private static final String CONFIG_FILE_PROPERTY = "mmtk.properties";
032    
033      @Override
034      public OptionSet getOptionSet() {
035        return org.jikesrvm.options.OptionSet.gc;
036      }
037    
038      @Override
039      public org.mmtk.vm.ActivePlan newActivePlan() {
040        try {
041          return new ActivePlan();
042        } catch (Exception e) {
043          VM.sysFail("Failed to allocate new ActivePlan!");
044          return null; // never get here
045        }
046      }
047    
048      @Override
049      public org.mmtk.vm.Assert newAssert() {
050        try {
051          return new Assert();
052        } catch (Exception e) {
053          VM.sysFail("Failed to allocate new Assert!");
054          return null; // never get here
055        }
056      }
057    
058      @Override
059      public org.mmtk.vm.Barriers newBarriers() {
060        try {
061          return new Barriers();
062        } catch (Exception e) {
063          VM.sysFail("Failed to allocate new Barriers!");
064          return null; // never get here
065        }
066      }
067    
068      @Override
069      public org.mmtk.vm.Collection newCollection() {
070        try {
071          return new Collection();
072        } catch (Exception e) {
073          VM.sysFail("Failed to allocate new Collection!");
074          return null; // never get here
075        }
076      }
077    
078      @Override
079      public org.mmtk.vm.BuildTimeConfig newBuildTimeConfig() {
080        try {
081          return new BuildTimeConfig(CONFIG_FILE_PROPERTY, DEFAULT_MMTK_PROPERTIES);
082        } catch (Exception e) {
083          VM.sysFail("Failed to allocate new BuildTimeConfiguration!");
084          return null; // never get here
085        }
086      }
087    
088      @Override
089      public org.mmtk.vm.Lock newLock(String name) {
090        try {
091          return new Lock(name);
092        } catch (Exception e) {
093          VM.sysFail("Failed to allocate new Lock!");
094          return null; // never get here
095        }
096      }
097    
098      @Override
099      public org.mmtk.vm.Monitor newMonitor(String name) {
100        try {
101          return new Monitor(name);
102        } catch (Exception e) {
103          VM.sysFail("Failed to allocate new Monitor!");
104          return null; // never get here
105        }
106      }
107    
108      @Override
109      public org.mmtk.vm.Memory newMemory() {
110        try {
111          return new Memory();
112        } catch (Exception e) {
113          VM.sysFail("Failed to allocate new Memory!");
114          return null; // never get here
115        }
116      }
117    
118      @Override
119      public org.mmtk.vm.ObjectModel newObjectModel() {
120        try {
121          return new ObjectModel();
122        } catch (Exception e) {
123          VM.sysFail("Failed to allocate new ObjectModel!");
124          return null; // never get here
125        }
126      }
127    
128      @Override
129      public org.mmtk.vm.ReferenceProcessor newReferenceProcessor(Semantics semantics) {
130        try {
131          return ReferenceProcessor.get(semantics);
132        } catch (Exception e) {
133          VM.sysFail("Failed to allocate new ReferenceProcessor!");
134          return null; // never get here
135        }
136      }
137    
138      @Override
139      public org.mmtk.vm.FinalizableProcessor newFinalizableProcessor() {
140        try {
141          return FinalizableProcessor.getProcessor();
142        } catch (Exception e) {
143          VM.sysFail("Failed to allocate new FinalizableProcessor!");
144          return null; // never get here
145        }
146      }
147    
148      @Override
149      public org.mmtk.vm.Scanning newScanning() {
150        try {
151          return new Scanning();
152        } catch (Exception e) {
153          VM.sysFail("Failed to allocate new Scanning!");
154          return null; // never get here
155        }
156      }
157    
158      @Override
159      public org.mmtk.vm.Statistics newStatistics() {
160        try {
161          return new Statistics();
162        } catch (Exception e) {
163          VM.sysFail("Failed to allocate new Statistics!");
164          return null; // never get here
165        }
166      }
167    
168      @Override
169      public org.mmtk.vm.Strings newStrings() {
170        try {
171          return new Strings();
172        } catch (Exception e) {
173          VM.sysFail("Failed to allocate new Strings!");
174          return null; // never get here
175        }
176      }
177    
178      @Override
179      public org.mmtk.vm.SynchronizedCounter newSynchronizedCounter() {
180        try {
181          return new SynchronizedCounter();
182        } catch (Exception e) {
183         VM.sysFail("Failed to allocate new SynchronizedCounter!");
184          return null; // never get here
185        }
186      }
187    
188      @Override
189      public org.mmtk.vm.TraceInterface newTraceInterface() {
190        try {
191          return new TraceInterface();
192        } catch (Exception e) {
193          VM.sysFail("Failed to allocate new TraceInterface!");
194          return null; // never get here
195        }
196      }
197    
198      @Override
199      public org.mmtk.vm.MMTk_Events newEvents() {
200        try {
201          return new MMTk_Events(org.jikesrvm.tuningfork.TraceEngine.engine);
202        } catch (Exception e) {
203          VM.sysFail("Failed to allocate new MMTk_Events!");
204          return null; // never get here
205        }
206      }
207    
208      @Override
209      public org.mmtk.vm.Debug newDebug() {
210        return new Debug();
211      }
212    
213      /**********************************************************************
214       * GCspy methods
215       */
216    
217      /**
218       * {@inheritDoc}
219       */
220      @Override
221      public org.mmtk.vm.gcspy.Util newGCspyUtil() {
222        try {
223          return new org.jikesrvm.mm.mmtk.gcspy.Util();
224        } catch (Exception e) {
225          VM.sysFail("Failed to allocate new Util!");
226          return null; // never get here
227        }
228      }
229    
230      @Override
231      public org.mmtk.vm.gcspy.ServerInterpreter newGCspyServerInterpreter() {
232        try {
233          return new org.jikesrvm.mm.mmtk.gcspy.ServerInterpreter();
234        } catch (Exception e) {
235          VM.sysFail("Failed to allocate new ServerInterpreter!");
236          return null; // never get here
237        }
238      }
239    
240      @Override
241      public org.mmtk.vm.gcspy.ServerSpace newGCspyServerSpace(
242          org.mmtk.vm.gcspy.ServerInterpreter serverInterpreter,
243          String serverName,
244          String driverName,
245          String title,
246          String blockInfo,
247          int tileNum,
248          String unused,
249          boolean mainSpace){
250        try {
251          return new org.jikesrvm.mm.mmtk.gcspy.ServerSpace(
252              serverInterpreter, serverName, driverName, title,
253              blockInfo, tileNum, unused, mainSpace);
254        } catch (Exception e) {
255          VM.sysFail("Failed to allocate new ServerSpace!");
256          return null; // never get here
257        }
258      }
259    
260      @Override
261      public org.mmtk.vm.gcspy.ByteStream newGCspyByteStream(
262          AbstractDriver driver,
263          String name,
264          byte minValue,
265          byte maxValue,
266          byte zeroValue,
267          byte defaultValue,
268          String stringPre,
269          String stringPost,
270          int presentation,
271          int paintStyle,
272          int indexMaxStream,
273          Color colour,
274          boolean summary) {
275        try {
276          return new org.jikesrvm.mm.mmtk.gcspy.ByteStream(
277              driver, name, minValue,  maxValue,
278              zeroValue, defaultValue, stringPre, stringPost,
279              presentation, paintStyle, indexMaxStream,
280              colour, summary);
281        } catch (Exception e) {
282          VM.sysFail("Failed to allocate new ByteStream!");
283          return null; // never get here
284        }
285      }
286    
287      @Override
288      public org.mmtk.vm.gcspy.IntStream newGCspyIntStream(
289          AbstractDriver driver,
290          String name,
291          int minValue,
292          int maxValue,
293          int zeroValue,
294          int defaultValue,
295          String stringPre,
296          String stringPost,
297          int presentation,
298          int paintStyle,
299          int indexMaxStream,
300          Color colour,
301          boolean summary) {
302        try {
303          return new org.jikesrvm.mm.mmtk.gcspy.IntStream(
304              driver, name, minValue,  maxValue,
305              zeroValue, defaultValue, stringPre, stringPost,
306              presentation, paintStyle, indexMaxStream,
307              colour, summary);
308        } catch (Exception e) {
309          VM.sysFail("Failed to allocate new IntStream!");
310          return null; // never get here
311        }
312      }
313    
314      @Override
315      public org.mmtk.vm.gcspy.ShortStream newGCspyShortStream(
316          AbstractDriver driver,
317          String name,
318          short minValue,
319          short maxValue,
320          short zeroValue,
321          short defaultValue,
322          String stringPre,
323          String stringPost,
324          int presentation,
325          int paintStyle,
326          int indexMaxStream,
327          Color colour,
328          boolean summary) {
329        try {
330          return new org.jikesrvm.mm.mmtk.gcspy.ShortStream(
331              driver, name, minValue,  maxValue,
332              zeroValue, defaultValue, stringPre, stringPost,
333              presentation, paintStyle, indexMaxStream,
334              colour, summary);
335        } catch (Exception e) {
336          VM.sysFail("Failed to allocate new ShortStream!");
337          return null; // never get here
338        }
339      }
340    }