From: <dfr...@us...> - 2007-09-01 01:29:21
|
Revision: 13436 http://jikesrvm.svn.sourceforge.net/jikesrvm/?rev=13436&view=rev Author: dframpton-oss Date: 2007-08-31 18:29:16 -0700 (Fri, 31 Aug 2007) Log Message: ----------- Add a buffer for the mutator to push values to the global trace during concurrent gc. Added Paths: ----------- rvmroot/trunk/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java Added: rvmroot/trunk/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java =================================================================== --- rvmroot/trunk/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java (rev 0) +++ rvmroot/trunk/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java 2007-09-01 01:29:16 UTC (rev 13436) @@ -0,0 +1,72 @@ +/* + * This file is part of the Jikes RVM project (http://jikesrvm.org). + * + * This file is licensed to You under the Common Public License (CPL); + * You may not use this file except in compliance with the License. You + * may obtain a copy of the License at + * + * http://www.opensource.org/licenses/cpl1.0.php + * + * See the COPYRIGHT.txt file distributed with this work for information + * regarding copyright ownership. + */ +package org.mmtk.plan; + +import org.mmtk.utility.deque.WriteBuffer; +import org.vmmagic.pragma.*; +import org.vmmagic.unboxed.*; + +/** + * This class is used to push values in one direction during a trace. It + * was designed for use in mutators that use write barriers to push + * work to collector threads during concurrent tracing. + * + * @see org.mmtk.plan.TraceLocal + */ +@Uninterruptible +public final class TraceWriteBuffer extends TransitiveClosure { + /**************************************************************************** + * + * Instance variables + */ + private final WriteBuffer buffer; + + /**************************************************************************** + * + * Initialization + */ + + /** + * Constructor + * + * @param trace The global trace class to use. + */ + public TraceWriteBuffer(Trace trace) { + buffer = new WriteBuffer(trace.valuePool); + } + + /** + * Flush the buffer to the trace. + */ + public void flush() { + buffer.flushLocal(); + } + + + /** + * @return True if the buffer is flushed. + */ + public boolean isFlushed() { + return buffer.isFlushed(); + } + + /** + * Enqueue an object during a trace. + * + * @param object The object to enqueue + */ + @Inline + public void processNode(ObjectReference object) { + buffer.insert(object.toAddress()); + } +} Property changes on: rvmroot/trunk/MMTk/src/org/mmtk/plan/TraceWriteBuffer.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |