Changeset 563


Ignore:
Timestamp:
09/16/12 16:51:53 (8 years ago)
Author:
BegemoT
Message:
 
Location:
Tests/JAVA/test
Files:
37 added
1 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • Tests/JAVA/test/pom.xml

    r554 r563  
    11<project xmlns="http://maven.apache.org/POM/4.0.0" 
    2                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    3                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
     2        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     3        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    44    <modelVersion>4.0.0</modelVersion> 
    55 
     
    2121            <url>file:${project.basedir}/libs</url> 
    2222        </repository> 
    23             <!--<repository> 
    24                                         <id>local</id> 
    25                                         <name>Local filesystem repository</name> 
    26                                         <url>file:${project.basedir}/../LIBS/maven2/repo</url> 
    27                                 </repository>--> 
    28             <repository> 
     23        <!--<repository> 
     24                <id>local</id> 
     25                <name>Local filesystem repository</name> 
     26                <url>file:${project.basedir}/../LIBS/maven2/repo</url> 
     27            </repository>--> 
     28        <repository> 
    2929            <id>com.springsource.repository.bundles.release</id> 
    3030            <name>EBR Spring Release Repository</name> 
     
    5454        </repository> 
    5555 
    56             <!--<repository> 
    57                                         <id>datanucleus</id> 
    58                                         <url>http://www.datanucleus.org/downloads/maven2</url> 
    59                                 </repository>--> 
    60             <repository> 
     56        <!--<repository> 
     57                <id>datanucleus</id> 
     58                <url>http://www.datanucleus.org/downloads/maven2</url> 
     59            </repository>--> 
     60        <repository> 
    6161            <id>jetlang.googlecode.com</id> 
    6262            <name>Jetlang Repository for Maven</name> 
     
    7575    <dependencies> 
    7676        <!-- testing support --> 
    77             <dependency> 
     77        <dependency> 
    7878            <groupId>junit</groupId> 
    7979            <artifactId>junit</artifactId> 
     
    9393        </dependency> 
    9494 
    95             <!-- matrix/vector/math library --> 
    96             <dependency> 
     95        <!-- matrix/vector/math library --> 
     96        <dependency> 
    9797            <groupId>colt</groupId> 
    9898            <artifactId>colt</artifactId> 
    9999            <version>1.2.0</version> 
    100100        </dependency> 
    101             <!-- JetLang (message-passing concurrency) --> 
    102             <dependency> 
     101        <!-- JetLang (message-passing concurrency) --> 
     102        <dependency> 
    103103            <groupId>org.jetlang</groupId> 
    104104            <artifactId>jetlang</artifactId> 
     
    106106        </dependency> 
    107107 
    108             <!-- fast open addressing maps/sets, and primitive (int, double) collections --> 
    109             <dependency> 
     108        <!-- fast open addressing maps/sets, and primitive (int, double) collections --> 
     109        <dependency> 
    110110            <groupId>net.sf.trove4j</groupId> 
    111111            <artifactId>trove4j</artifactId> 
     
    113113        </dependency> 
    114114 
    115             <!-- logging facade --> 
    116             <dependency> 
     115        <!-- logging facade --> 
     116        <dependency> 
    117117            <groupId>commons-logging</groupId> 
    118118            <artifactId>commons-logging</artifactId> 
    119119            <version>1.1.1</version> 
    120120        </dependency> 
    121             <!-- logging implementation  --> 
    122             <dependency> 
     121        <!-- logging implementation  --> 
     122        <dependency> 
    123123            <groupId>log4j</groupId> 
    124124            <artifactId>log4j</artifactId> 
     
    150150        </dependency> 
    151151 
    152             <!--<dependency> 
    153                                         <groupId>high-scale-lib</groupId> 
    154                                         <artifactId>high-scale-lib</artifactId> 
    155                                         <version>UNKNOWN</version> 
    156                                         <scope>system</scope> 
    157                                         <systemPath>${basedir}/libs/high-scale-lib.jar</systemPath> 
    158                                 </dependency>--> 
    159             <dependency> 
     152        <!--<dependency> 
     153                <groupId>high-scale-lib</groupId> 
     154                <artifactId>high-scale-lib</artifactId> 
     155                <version>UNKNOWN</version> 
     156                <scope>system</scope> 
     157                <systemPath>${basedir}/libs/high-scale-lib.jar</systemPath> 
     158            </dependency>--> 
     159        <dependency> 
    160160            <groupId>high-scale-lib</groupId> 
    161161            <artifactId>high-scale-lib</artifactId> 
     
    163163        </dependency> 
    164164 
    165             <!-- Thread-safety annotations from Java Concurrency in Practice --> 
    166             <dependency> 
     165        <dependency> 
     166          <groupId>org.springframework</groupId> 
     167          <artifactId>spring-core</artifactId> 
     168          <version>3.0.5.RELEASE</version> 
     169        </dependency> 
     170 
     171        <!-- 
     172            Bean Factory and JavaBeans utilities (depends on spring-core) 
     173            Define this if you use Spring Bean APIs (org.springframework.beans.*) 
     174        --> 
     175        <dependency> 
     176          <groupId>org.springframework</groupId> 
     177          <artifactId>spring-beans</artifactId> 
     178          <version>3.0.5.RELEASE</version> 
     179        </dependency> 
     180 
     181 
     182        <!-- Thread-safety annotations from Java Concurrency in Practice --> 
     183        <dependency> 
    167184            <groupId>net.jcip</groupId> 
    168185            <artifactId>jcip-annotations</artifactId> 
     
    182199        </dependency> 
    183200 
    184             <!--<dependency> 
    185                                         <groupId>org.xerial.snappy</groupId> 
    186                                         <artifactId>snappy-java</artifactId> 
    187                                         <version>1.0.4.1</version> 
    188                                         <type>jar</type> 
    189                                         <scope>compile</scope> 
    190                                 </dependency>--> 
    191  
    192             <!--<dependency> 
     201        <!--<dependency> 
     202                <groupId>org.xerial.snappy</groupId> 
     203                <artifactId>snappy-java</artifactId> 
     204                <version>1.0.4.1</version> 
     205                <type>jar</type> 
     206                <scope>compile</scope> 
     207            </dependency>--> 
     208 
     209        <!--<dependency> 
    193210            <groupId>colt</groupId> 
    194211            <artifactId>colt</artifactId> 
     
    196213            <classifier>sources</classifier> 
    197214        </dependency>--> 
    198             <dependency> 
     215        <dependency> 
    199216            <groupId>net.sf.trove4j</groupId> 
    200217            <artifactId>trove4j</artifactId> 
     
    307324                            <transformers> 
    308325                                <transformer 
    309                                                 implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
     326                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
    310327                                    <manifestEntries> 
    311328                                        <Main-Class>test.ivan.Main</Main-Class> 
  • Tests/JAVA/test/src/main/java/test/threads/queue/stressed/ABQxNTask.java

    r498 r563  
    11package test.threads.queue.stressed; 
    22 
    3 import java.util.concurrent.*; 
     3import java.util.concurrent.ArrayBlockingQueue; 
     4import java.util.concurrent.BlockingQueue; 
     5import java.util.concurrent.Executor; 
    46 
    57import com.google.common.base.Throwables; 
     
    810import org.apache.commons.logging.LogFactory; 
    911import test.helpers.Config; 
     12import test.threads.queue.common.BaseEnqueuer; 
    1013 
    1114/** 
     
    1619 */ 
    1720public class ABQxNTask<E> extends AbstractTask<E> { 
    18     private static final Log log = LogFactory.getLog( ABQxNTask.class ); 
     21        private static final Log log = LogFactory.getLog( ABQxNTask.class ); 
    1922 
    20     private final int nodes; 
     23        private final int nodes; 
    2124 
    22     public ABQxNTask( final Config config ) { 
    23         super( config ); 
    24         nodes = config.getAsInt( "pipeline.nodes" ); 
    25     } 
     25        public ABQxNTask( final Config config ) { 
     26                super( config ); 
     27                nodes = config.getAsInt( "pipeline.nodes" ); 
     28        } 
    2629 
    2730 
    28     @Override 
    29     public int workersRequired() { 
    30         return nodes; 
    31     } 
     31        @Override 
     32        public int workersRequired() { 
     33                return nodes; 
     34        } 
    3235 
    33     private IUsefulWorkEmulator<E> lastEmulator; 
    34     private BlockingQueue<E> outbox; 
    35     private PassThroughNode<E>[] tasks; 
     36        private IUsefulWorkEmulator<E> lastEmulator; 
     37        private BlockingQueue<E> outbox; 
     38        private PassThroughNode<E>[] tasks; 
    3639 
    37     @Override 
    38     protected EventEnqueuer _initialize( final Executor threadPool, 
    39                                          final IUsefulWorkEmulator<E>[] emulators, 
    40                                          final EventFactory<E> eventFactory ) { 
    41         final BlockingQueue<E> inbox = createQueue(); 
     40        @Override 
     41        protected BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     42                                                      final IUsefulWorkEmulator<E>[] emulators, 
     43                                                      final EventFactory<E> eventFactory ) { 
     44                final BlockingQueue<E> inbox = createQueue(); 
    4245 
    4346 
    44         BlockingQueue<E> _outbox = inbox; 
    45         tasks = new PassThroughNode[nodes - 1]; 
    46         for ( int i = 0; i < tasks.length; i++ ) { 
    47             final BlockingQueue<E> _inbox = _outbox; 
    48             _outbox = createQueue(); 
     47                BlockingQueue<E> _outbox = inbox; 
     48                tasks = new PassThroughNode[nodes - 1]; 
     49                for( int i = 0; i < tasks.length; i++ ) { 
     50                        final BlockingQueue<E> _inbox = _outbox; 
     51                        _outbox = createQueue(); 
    4952 
    50             final String name = String.valueOf( i ); 
    51             final PassThroughNode<E> task = new PassThroughNode<E>( 
    52                     name, 
    53                     _inbox, 
    54                     emulators[i], 
    55                     _outbox 
    56             ); 
     53                        final String name = String.valueOf( i ); 
     54                        final PassThroughNode<E> task = new PassThroughNode<E>( 
     55                                        name, 
     56                                        _inbox, 
     57                                        emulators[i], 
     58                                        _outbox 
     59                        ); 
    5760 
    58             tasks[i] = task; 
    59             threadPool.execute( task ); 
    60         } 
     61                        tasks[i] = task; 
     62                        threadPool.execute( task ); 
     63                } 
    6164 
    62         //this is last task data 
    63         this.outbox = _outbox; 
    64         lastEmulator = emulators[nodes - 1]; 
     65                //this is last task data 
     66                this.outbox = _outbox; 
     67                lastEmulator = emulators[nodes - 1]; 
    6568 
    66         return new Enqueuer( eventsInBatch(), eventFactory, inbox ); 
    67     } 
     69                return new BaseEnqueuer[] { new Enqueuer( eventsInBatch(), eventFactory, inbox ) }; 
     70        } 
    6871 
    69     @Override 
    70     public void terminate() { 
    71         super.terminate(); 
    72         for ( final PassThroughNode<E> task : tasks ) { 
    73             task.terminate(); 
    74         } 
    75     } 
     72        @Override 
     73        public void terminate() { 
     74                super.terminate(); 
     75                for( final PassThroughNode<E> task : tasks ) { 
     76                        task.terminate(); 
     77                } 
     78        } 
    7679 
    77     private ArrayBlockingQueue<E> createQueue() { 
    78         return new ArrayBlockingQueue<E>( bufferSize() ); 
    79     } 
     80        private ArrayBlockingQueue<E> createQueue() { 
     81                return new ArrayBlockingQueue<E>( bufferSize() ); 
     82        } 
    8083 
    81     @Override 
    82     protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
    83         for ( int i = 0; i < eventsInBatch; i++ ) { 
    84             final E event = outbox.take(); 
    85             lastEmulator.spendCPUTime( event ); 
    86         } 
     84        @Override 
     85        protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
     86                for( int i = 0; i < eventsInBatch; i++ ) { 
     87                        final E event = outbox.take(); 
     88                        lastEmulator.spendCPUTime( event ); 
     89                } 
    8790 
    88         return 0; 
    89     } 
     91                return 0; 
     92        } 
    9093 
    91     private static class PassThroughNode<E> implements Runnable { 
    92         protected final String name; 
    93         protected final IUsefulWorkEmulator<E> emulator; 
    94         protected final BlockingQueue<E> inbox; 
    95         protected final BlockingQueue<E> outbox; 
     94        private static class PassThroughNode<E> implements Runnable { 
     95                protected final String name; 
     96                protected final IUsefulWorkEmulator<E> emulator; 
     97                protected final BlockingQueue<E> inbox; 
     98                protected final BlockingQueue<E> outbox; 
    9699 
    97         public PassThroughNode( final String name, 
    98                                 final BlockingQueue<E> inbox, 
    99                                 final IUsefulWorkEmulator<E> emulator, 
    100                                 final BlockingQueue<E> outbox ) { 
    101             this.name = name; 
    102             this.emulator = emulator; 
    103             this.inbox = inbox; 
    104             this.outbox = outbox; 
    105         } 
     100                public PassThroughNode( final String name, 
     101                                        final BlockingQueue<E> inbox, 
     102                                        final IUsefulWorkEmulator<E> emulator, 
     103                                        final BlockingQueue<E> outbox ) { 
     104                        this.name = name; 
     105                        this.emulator = emulator; 
     106                        this.inbox = inbox; 
     107                        this.outbox = outbox; 
     108                } 
    106109 
    107         private volatile Thread currentThread; 
     110                private volatile Thread currentThread; 
    108111 
    109         @Override 
    110         public void run() { 
    111             try { 
    112                 currentThread = Thread.currentThread(); 
    113                 while ( true ) { 
    114                     makeStep(); 
    115                 } 
    116             } catch ( InterruptedException e ) { 
    117                 log.info( "PassThroughNode[" + name + "] interrupted" ); 
    118             } catch ( Throwable t ) { 
    119                 log.error( "PassThroughNode[" + name + "] exited unexpectedly", t ); 
    120                 throw Throwables.propagate( t ); 
    121             } 
    122         } 
     112                @Override 
     113                public void run() { 
     114                        try { 
     115                                currentThread = Thread.currentThread(); 
     116                                while( true ) { 
     117                                        makeStep(); 
     118                                } 
     119                        } catch( InterruptedException e ) { 
     120                                log.info( "PassThroughNode[" + name + "] interrupted" ); 
     121                        } catch( Throwable t ) { 
     122                                log.error( "PassThroughNode[" + name + "] exited unexpectedly", t ); 
     123                                throw Throwables.propagate( t ); 
     124                        } 
     125                } 
    123126 
    124         protected void makeStep() throws InterruptedException { 
    125             final E taken = inbox.take(); 
    126             emulator.spendCPUTime( taken ); 
    127             outbox.put( taken ); 
    128         } 
     127                protected void makeStep() throws InterruptedException { 
     128                        final E taken = inbox.take(); 
     129                        emulator.spendCPUTime( taken ); 
     130                        outbox.put( taken ); 
     131                } 
    129132 
    130         public void terminate() { 
    131             currentThread.interrupt(); 
    132         } 
     133                public void terminate() { 
     134                        currentThread.interrupt(); 
     135                } 
    133136 
    134         @Override 
    135         public String toString() { 
    136             return name; 
    137         } 
    138     } 
     137                @Override 
     138                public String toString() { 
     139                        return name; 
     140                } 
     141        } 
    139142 
    140     private class Enqueuer extends EventEnqueuer<E> { 
    141         private final BlockingQueue<E> inbox; 
     143        private class Enqueuer extends EventEnqueuer<E> { 
     144                private final BlockingQueue<E> inbox; 
    142145 
    143         private Enqueuer( final int eventsInBatch, 
    144                           final EventFactory<E> factory, 
    145                           final BlockingQueue<E> inbox ) { 
    146             super( eventsInBatch, factory ); 
    147             this.inbox = inbox; 
    148         } 
     146                private Enqueuer( final int eventsInBatch, 
     147                                  final EventFactory<E> factory, 
     148                                  final BlockingQueue<E> inbox ) { 
     149                        super( eventsInBatch, factory ); 
     150                        this.inbox = inbox; 
     151                } 
    149152 
    150         @Override 
    151         protected void enqueueEventsBatch( final int eventsInBatch, 
    152                                            final EventFactory<E> factory ) throws Exception { 
    153             for ( int i = 0; i < eventsInBatch; i++ ) { 
    154                 inbox.put( factory.newInstance() ); 
    155             } 
    156         } 
    157     } 
     153                @Override 
     154                protected void enqueueEventsBatch( final int eventsInBatch, 
     155                                                   final EventFactory<E> factory ) throws Exception { 
     156                        for( int i = 0; i < eventsInBatch; i++ ) { 
     157                                inbox.put( factory.newInstance() ); 
     158                        } 
     159                } 
     160        } 
    158161} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/stressed/AbstractTask.java

    r523 r563  
    1919 */ 
    2020public abstract class AbstractTask<E> implements ITask<E> { 
    21     private static final Log log = LogFactory.getLog( AbstractTask.class ); 
    22  
    23     /** 5 секунд должно быть достаточно для всех! */ 
    24     private static final long MAX_WAIT_TIME = 5000L; 
    25  
    26     private final int bufferSize; 
    27     private final int eventsInBatch; 
    28  
    29     protected AbstractTask() { 
    30         this( TaskBenchmark.QUEUE_CAPACITY, TaskBenchmark.EVENTS_IN_BATCH ); 
    31     } 
    32  
    33     protected AbstractTask( final int bufferSize ) { 
    34         this( bufferSize, TaskBenchmark.EVENTS_IN_BATCH ); 
    35     } 
    36  
    37     protected AbstractTask( final Config config ) { 
    38         this( 
    39                 config.getAsInt( "task.buffer-size", TaskBenchmark.QUEUE_CAPACITY ), 
    40                 config.getAsInt( "task.events-in-batch", TaskBenchmark.EVENTS_IN_BATCH ) 
    41         ); 
    42     } 
    43  
    44     protected AbstractTask( final int bufferSize, 
    45                             final int eventsInBatch ) { 
    46         checkArgument( 
    47                 eventsInBatch < bufferSize, 
    48                 "eventsInBatch(%s) must be < bufferSize(%s)", 
    49                 eventsInBatch, bufferSize 
    50         ); 
    51         this.bufferSize = bufferSize; 
    52         this.eventsInBatch = eventsInBatch; 
    53     } 
    54  
    55     private boolean initialized = false; 
    56     private EventFactory<E> eventFactory = null; 
    57     private BaseEnqueuer eventEnqueuer = null; 
    58     private Executor threadPool = null; 
    59  
    60     private boolean executing = false; 
    61  
    62     @Override 
    63     public synchronized final void initialize( final Executor threadPool, 
    64                                                final IUsefulWorkEmulator<E>[] emulators, 
    65                                                final EventFactory<E> factory ) { 
    66         checkArgument( threadPool != null, "threadPool can't be null" ); 
    67         checkArgument( emulators != null, "emulators can't be null" ); 
    68         checkArgument( emulators.length > 0, "emulators.length(%s) can't be 0", emulators.length ); 
    69  
    70         checkState( !initialized, "Can't initialize more then once" ); 
    71  
    72         this.eventFactory = factory; 
    73         this.threadPool = threadPool; 
    74         try { 
    75             eventEnqueuer = _initialize( threadPool, emulators, factory ); 
    76             checkState( eventEnqueuer != null, "eventEnqueuer can't be null" ); 
    77             threadPool.execute( eventEnqueuer ); 
    78         } catch ( Exception e ) { 
    79             throw Throwables.propagate( e ); 
    80         } 
    81         initialized = true; 
    82     } 
    83  
    84     public int bufferSize() { 
    85         return bufferSize; 
    86     } 
    87  
    88     public int eventsInBatch() { 
    89         return eventsInBatch; 
    90     } 
    91  
    92     public synchronized boolean isInitialized() { 
    93         return initialized; 
    94     } 
    95  
    96     public synchronized EventFactory<E> eventFactory() { 
    97         checkState( initialized, "Task is not initialized" ); 
    98         return eventFactory; 
    99     } 
    100  
    101     protected abstract BaseEnqueuer _initialize( final Executor threadPool, 
    102                                                  final IUsefulWorkEmulator<E>[] emulators, 
    103                                                  final EventFactory<E> factory ) throws Exception; 
    104  
    105     @Override 
    106     public final BenchmarkResult[] execute( final long millisToBogus, 
    107                                             final long millisToMeasure, 
    108                                             final int measurements ) { 
    109         checkState( initialized, "Can't execute uninitialized task" ); 
    110         checkState( !executing, "Previous execution not finished yet" ); 
    111         checkState( eventEnqueuer != null, "eventEnqueuer can't be null" ); 
    112         checkArgument( measurements >= 1, "measurements(%s) can't be <1", measurements ); 
    113         executing = true; 
    114         try { 
    115             return executeImpl( millisToBogus, millisToMeasure, measurements ); 
    116         } catch ( Exception e ) { 
    117             throw Throwables.propagate( e ); 
    118         } finally { 
    119             executing = false; 
    120         } 
    121     } 
    122  
    123     @Override 
    124     public void terminate() { 
    125         checkState( initialized, "Can't terminate uninitialized task" ); 
    126         checkState( eventEnqueuer != null, "eventEnqueuer can't be null" ); 
    127         eventEnqueuer.terminate(); 
    128     } 
    129  
    130     protected BenchmarkResult[] executeImpl( final long millisToBogus, 
    131                                              final long millisToMeasure, 
    132                                              final int measurements ) throws Exception { 
    133         eventEnqueuer.waitForInitialized(); 
    134  
    135         eventEnqueuer.start(); 
    136         eventEnqueuer.waitForStarting(); 
    137  
    138         //dequeue some packets before start timer to warm/fill up pipeline (not JIT!) 
    139         final BenchmarkResult bogusResult = dequeueWhileTimeIsNotEllapsed( millisToBogus ); 
    140  
    141         final long msToOneMeasure = millisToMeasure / measurements; 
    142         checkState( 
    143                 msToOneMeasure > 1, 
    144                 "msToMeasure(%s) = millisToMeasure(%s)/measurements(%s) must be > 1", 
    145                 msToOneMeasure, millisToMeasure, measurements 
    146         ); 
    147         final BenchmarkResult[] results = new BenchmarkResult[measurements]; 
    148         long packetsCompleted = 0; 
    149         for ( int i = 0; i < results.length; i++ ) { 
    150             results[i] = dequeueWhileTimeIsNotEllapsed( msToOneMeasure ); 
    151             packetsCompleted += results[i].packetsCompleted; 
    152         } 
    153  
    154         long eventsDequeued = bogusResult.packetsCompleted + packetsCompleted; 
    155  
    156         eventEnqueuer.pause(); 
    157         //wait for packets exhausted 
    158         Thread.yield(); 
    159         //здесь периодически возникает ситуация, когда мы подвисаем. Понять причины точно не удается 
    160         //но чтобы не подвешивать эксперименты я здесь просто ввел ограничение времени 
    161         final long startedAt = System.currentTimeMillis(); 
    162         while ( !eventEnqueuer.is( State.WAITING ) ) { 
    163             while ( eventEnqueuer.eventsEnqueued() > eventsDequeued ) { 
    164 //            log.info( "Waiting for " + eventEnqueuer.eventsEnqueued() + " > " + eventsDequeued ); 
    165                 dequeueBatchEvents( eventsInBatch ); 
    166                 eventsDequeued += eventsInBatch; 
    167             } 
    168             Thread.yield(); 
    169             final long current = System.currentTimeMillis(); 
    170             if ( current - startedAt > MAX_WAIT_TIME ) { 
    171                 //идите в жопу, я -- заканчиваю 
    172                 break; 
    173             } 
    174         } 
    175         return results; 
    176     } 
    177  
    178     private BenchmarkResult dequeueWhileTimeIsNotEllapsed( final long timeLimit ) throws Exception { 
    179         long eventsDequeued = 0; 
    180         final long startedAt = System.currentTimeMillis(); 
    181         final long startedAtNs = System.nanoTime(); 
    182         while ( true ) { 
    183             dequeueBatchEvents( eventsInBatch ); 
    184             eventsDequeued += eventsInBatch; 
    185  
    186             final long finishedAtMs = System.currentTimeMillis(); 
    187             final long ellapsedMs = finishedAtMs - startedAt; 
    188             if ( ellapsedMs >= timeLimit ) { 
    189                 final long finishedAtNs = System.nanoTime(); 
    190                 final long ellapsedNs = finishedAtNs - startedAtNs; 
    191  
    192                 final BenchmarkResult result = new BenchmarkResult( 
    193                         ellapsedMs, 
    194                         ellapsedNs, 
    195                         eventsDequeued 
    196                 ); 
    197                 return result; 
    198             } 
    199         } 
    200     } 
    201  
    202     protected abstract long dequeueBatchEvents( final int eventsInBatch ) throws Exception; 
    203  
    204     @Override 
    205     public String toString() { 
    206         return String.format( 
    207                 "%s[workers:%d][buffer:%d]", 
    208                 getClass().getSimpleName(), 
    209                 workersRequired(), 
    210                 bufferSize() 
    211         ); 
    212     } 
    213  
    214     protected abstract static class EventEnqueuer<E> extends BaseEnqueuer<E> { 
    215  
    216         private final EventFactory<E> eventFactory; 
    217  
    218  
    219         public EventEnqueuer( final int eventsInBatch, 
    220                               final EventFactory<E> eventFactory ) { 
    221             super( eventsInBatch ); 
    222             this.eventFactory = eventFactory; 
    223         } 
    224  
    225         @Override 
    226         protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
    227             enqueueEventsBatch( eventsInBatch, eventFactory ); 
    228         } 
    229  
    230         protected abstract void enqueueEventsBatch( final int eventsInBatch, 
    231                                                     final EventFactory<E> factory ) throws Exception; 
    232  
    233     } 
     21        private static final Log log = LogFactory.getLog( AbstractTask.class ); 
     22 
     23        /** 5 секунд должно быть достаточно для всех! */ 
     24        private static final long MAX_WAIT_TIME = 5000L; 
     25 
     26        private final int bufferSize; 
     27        private final int eventsInBatch; 
     28 
     29        protected AbstractTask() { 
     30                this( TaskBenchmark.QUEUE_CAPACITY, TaskBenchmark.EVENTS_IN_BATCH ); 
     31        } 
     32 
     33        protected AbstractTask( final int bufferSize ) { 
     34                this( bufferSize, TaskBenchmark.EVENTS_IN_BATCH ); 
     35        } 
     36 
     37        protected AbstractTask( final Config config ) { 
     38                this( 
     39                                config.getAsInt( "task.buffer-size", TaskBenchmark.QUEUE_CAPACITY ), 
     40                                config.getAsInt( "task.events-in-batch", TaskBenchmark.EVENTS_IN_BATCH ) 
     41                ); 
     42        } 
     43 
     44        protected AbstractTask( final int bufferSize, 
     45                                final int eventsInBatch ) { 
     46                checkArgument( 
     47                                eventsInBatch < bufferSize, 
     48                                "eventsInBatch(%s) must be < bufferSize(%s)", 
     49                                eventsInBatch, bufferSize 
     50                ); 
     51                this.bufferSize = bufferSize; 
     52                this.eventsInBatch = eventsInBatch; 
     53        } 
     54 
     55        private boolean initialized = false; 
     56        private EventFactory<E> eventFactory = null; 
     57        private BaseEnqueuer[] eventEnqueuers = null; 
     58        private Executor threadPool = null; 
     59 
     60        private boolean executing = false; 
     61 
     62        @Override 
     63        public synchronized final void initialize( final Executor threadPool, 
     64                                                   final IUsefulWorkEmulator<E>[] emulators, 
     65                                                   final EventFactory<E> factory ) { 
     66                checkArgument( threadPool != null, "threadPool can't be null" ); 
     67                checkArgument( emulators != null, "emulators can't be null" ); 
     68                checkArgument( emulators.length > 0, "emulators.length(%s) can't be 0", emulators.length ); 
     69 
     70                checkState( !initialized, "Can't initialize more then once" ); 
     71 
     72                this.eventFactory = factory; 
     73                this.threadPool = threadPool; 
     74                try { 
     75                        eventEnqueuers = initializeEnqueuers( threadPool, emulators, factory ); 
     76                        checkState( eventEnqueuers != null, "eventEnqueuers can't be null" ); 
     77                        for( final BaseEnqueuer eventEnqueuer : eventEnqueuers ) { 
     78                                checkState( eventEnqueuer != null, "eventEnqueuers[i] can't be null" ); 
     79                                threadPool.execute( eventEnqueuer ); 
     80                        } 
     81                } catch( Exception e ) { 
     82                        throw Throwables.propagate( e ); 
     83                } 
     84                initialized = true; 
     85        } 
     86 
     87        public int bufferSize() { 
     88                return bufferSize; 
     89        } 
     90 
     91        public int eventsInBatch() { 
     92                return eventsInBatch; 
     93        } 
     94 
     95        public synchronized boolean isInitialized() { 
     96                return initialized; 
     97        } 
     98 
     99        public synchronized EventFactory<E> eventFactory() { 
     100                checkState( initialized, "Task is not initialized" ); 
     101                return eventFactory; 
     102        } 
     103 
     104        protected abstract BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     105                                                               final IUsefulWorkEmulator<E>[] emulators, 
     106                                                               final EventFactory<E> factory ) throws Exception; 
     107 
     108        @Override 
     109        public final BenchmarkResult[] execute( final long millisToBogus, 
     110                                                final long millisToMeasure, 
     111                                                final int measurements ) { 
     112                checkState( initialized, "Can't execute uninitialized task" ); 
     113                checkState( !executing, "Previous execution not finished yet" ); 
     114                checkState( eventEnqueuers != null, "eventEnqueuer can't be null" ); 
     115                checkArgument( measurements >= 1, "measurements(%s) can't be <1", measurements ); 
     116                executing = true; 
     117                try { 
     118                        return executeImpl( millisToBogus, millisToMeasure, measurements ); 
     119                } catch( Exception e ) { 
     120                        throw Throwables.propagate( e ); 
     121                } finally { 
     122                        executing = false; 
     123                } 
     124        } 
     125 
     126        @Override 
     127        public void terminate() { 
     128                checkState( initialized, "Can't terminate uninitialized task" ); 
     129                checkState( eventEnqueuers != null, "eventEnqueuer can't be null" ); 
     130                for( final BaseEnqueuer eventEnqueuer : eventEnqueuers ) { 
     131                        eventEnqueuer.terminate(); 
     132                } 
     133        } 
     134 
     135        protected BenchmarkResult[] executeImpl( final long millisToBogus, 
     136                                                 final long millisToMeasure, 
     137                                                 final int measurements ) throws Exception { 
     138                for( final BaseEnqueuer eventEnqueuer : eventEnqueuers ) { 
     139                        eventEnqueuer.waitForInitialized(); 
     140                } 
     141 
     142                for( final BaseEnqueuer eventEnqueuer : eventEnqueuers ) { 
     143                        eventEnqueuer.start(); 
     144                } 
     145 
     146                for( final BaseEnqueuer eventEnqueuer : eventEnqueuers ) { 
     147                        eventEnqueuer.waitForStarting(); 
     148                } 
     149 
     150                //dequeue some packets before start timer to warm/fill up pipeline (not JIT!) 
     151                final BenchmarkResult bogusResult = dequeueWhileTimeIsNotElapsed( millisToBogus ); 
     152 
     153                final long msToOneMeasure = millisToMeasure / measurements; 
     154                checkState( 
     155                                msToOneMeasure > 1, 
     156                                "msToMeasure(%s) = millisToMeasure(%s)/measurements(%s) must be > 1", 
     157                                msToOneMeasure, millisToMeasure, measurements 
     158                ); 
     159                final BenchmarkResult[] results = new BenchmarkResult[measurements]; 
     160                long packetsCompleted = 0; 
     161                for( int i = 0; i < results.length; i++ ) { 
     162                        results[i] = dequeueWhileTimeIsNotElapsed( msToOneMeasure ); 
     163                        packetsCompleted += results[i].packetsCompleted; 
     164                } 
     165 
     166                long eventsDequeued = bogusResult.packetsCompleted + packetsCompleted; 
     167                for( final BaseEnqueuer eventEnqueuer : eventEnqueuers ) { 
     168                        eventEnqueuer.pause(); 
     169                } 
     170                //wait for packets exhausted 
     171                Thread.yield(); 
     172                //здесь периодически возникает ситуация, когда мы подвисаем. Понять причины точно не удается 
     173                //но чтобы не подвешивать эксперименты я здесь просто ввел ограничение времени 
     174                final long startedAt = System.currentTimeMillis(); 
     175                do { 
     176                        boolean allStopped = true; 
     177                        long totalEnqueued = 0; 
     178                        for( final BaseEnqueuer eventEnqueuer : eventEnqueuers ) { 
     179                                allStopped &= !eventEnqueuer.is( State.WAITING ); 
     180                                totalEnqueued += eventEnqueuer.eventsEnqueued(); 
     181                        } 
     182                        if( !allStopped ) { 
     183                        } else if( totalEnqueued > eventsDequeued ) { 
     184                                dequeueBatchEvents( eventsInBatch ); 
     185                                eventsDequeued += eventsInBatch; 
     186                        } else { 
     187                                break; 
     188                        } 
     189                        Thread.yield(); 
     190                        final long current = System.currentTimeMillis(); 
     191                        if( current - startedAt > MAX_WAIT_TIME ) { 
     192                                //идите в жопу, я -- заканчиваю 
     193                                break; 
     194                        } 
     195                } while( true ); 
     196                return results; 
     197        } 
     198 
     199        private BenchmarkResult dequeueWhileTimeIsNotElapsed( final long timeLimit ) throws Exception { 
     200                long eventsDequeued = 0; 
     201                final long startedAt = System.currentTimeMillis(); 
     202                final long startedAtNs = System.nanoTime(); 
     203                while( true ) { 
     204                        dequeueBatchEvents( eventsInBatch ); 
     205                        eventsDequeued += eventsInBatch; 
     206 
     207                        final long finishedAtMs = System.currentTimeMillis(); 
     208                        final long elapsedMs = finishedAtMs - startedAt; 
     209                        if( elapsedMs >= timeLimit ) { 
     210                                final long finishedAtNs = System.nanoTime(); 
     211                                final long elapsedNs = finishedAtNs - startedAtNs; 
     212 
     213                                final BenchmarkResult result = new BenchmarkResult( 
     214                                                elapsedMs, 
     215                                                elapsedNs, 
     216                                                eventsDequeued 
     217                                ); 
     218                                return result; 
     219                        } 
     220                } 
     221        } 
     222 
     223        protected abstract long dequeueBatchEvents( final int eventsInBatch ) throws Exception; 
     224 
     225        @Override 
     226        public String toString() { 
     227                return String.format( 
     228                                "%s[workers:%d][buffer:%d]", 
     229                                getClass().getSimpleName(), 
     230                                workersRequired(), 
     231                                bufferSize() 
     232                ); 
     233        } 
     234 
     235        protected abstract static class EventEnqueuer<E> extends BaseEnqueuer<E> { 
     236 
     237                private final EventFactory<E> eventFactory; 
     238 
     239 
     240                public EventEnqueuer( final int eventsInBatch, 
     241                                      final EventFactory<E> eventFactory ) { 
     242                        super( eventsInBatch ); 
     243                        this.eventFactory = eventFactory; 
     244                } 
     245 
     246                @Override 
     247                protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
     248                        enqueueEventsBatch( eventsInBatch, eventFactory ); 
     249                } 
     250 
     251                protected abstract void enqueueEventsBatch( final int eventsInBatch, 
     252                                                            final EventFactory<E> factory ) throws Exception; 
     253 
     254        } 
    234255 
    235256} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/stressed/DxNTask.java

    r498 r563  
    11package test.threads.queue.stressed; 
    22 
    3 import java.util.List; 
     3import java.util.*; 
    44import java.util.concurrent.Executor; 
    55 
     
    99import org.apache.commons.logging.LogFactory; 
    1010import test.helpers.Config; 
     11import test.threads.queue.common.BaseEnqueuer; 
    1112 
    1213/** 
     
    1718 */ 
    1819public class DxNTask<E> extends AbstractTask<E> { 
    19     private static final Log log = LogFactory.getLog( DxNTask.class ); 
     20        private static final Log log = LogFactory.getLog( DxNTask.class ); 
    2021 
    21     private final WaitStrategy waitStrategy; 
    22     private final boolean publishInBatch; 
     22        private final WaitStrategy waitStrategy; 
     23        private final boolean publishInBatch; 
    2324 
    24     private final int nodes; 
     25        private final int nodes; 
    2526 
    26     public DxNTask( final Config config ) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 
    27         super( config ); 
     27        public DxNTask( final Config config ) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 
     28                super( config ); 
    2829 
    29         this.waitStrategy = config.newInstanceByClass( 
    30                 "disruptor.wait-strategy", 
    31                 new BusySpinWaitStrategy() 
    32         ); 
     30                this.waitStrategy = config.newInstanceByClass( 
     31                                "disruptor.wait-strategy", 
     32                                new BusySpinWaitStrategy() 
     33                ); 
    3334 
    34         this.nodes = config.getAsInt( "pipeline.nodes" ); 
    35         this.publishInBatch = config.getAsBoolean( "disruptor.publish-in-batch", false ); 
    36     } 
     35                this.nodes = config.getAsInt( "pipeline.nodes" ); 
     36                this.publishInBatch = config.getAsBoolean( "disruptor.publish-in-batch", false ); 
     37        } 
    3738 
    3839 
    39     private RingBuffer<E> ringBuffer; 
    40     private EventProcessor[] processors; 
     40        private RingBuffer<E> ringBuffer; 
     41        private EventProcessor[] processors; 
    4142 
    42     @Override 
    43     public int workersRequired() { 
    44         return nodes; 
    45     } 
     43        @Override 
     44        public int workersRequired() { 
     45                return nodes; 
     46        } 
    4647 
    47     private SequenceBarrier lastSequenceBarrier; 
    48     private final Sequence lastSequence = new Sequence( Sequencer.INITIAL_CURSOR_VALUE ); 
    49     private IUsefulWorkEmulator<E> lastEmulator; 
     48        private SequenceBarrier lastSequenceBarrier; 
     49        private final Sequence lastSequence = new Sequence( Sequencer.INITIAL_CURSOR_VALUE ); 
     50        private IUsefulWorkEmulator<E> lastEmulator; 
    5051 
    51     @Override 
    52     protected EventEnqueuer _initialize( final Executor threadPool, 
    53                                          final IUsefulWorkEmulator<E>[] emulators, 
    54                                          final EventFactory<E> eventFactory ) { 
    55         final ClaimStrategy claimStrategy = new SingleThreadedClaimStrategy( bufferSize() ); 
     52        @Override 
     53        protected BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     54                                                      final IUsefulWorkEmulator<E>[] emulators, 
     55                                                      final EventFactory<E> eventFactory ) { 
     56                final ClaimStrategy claimStrategy = new SingleThreadedClaimStrategy( bufferSize() ); 
    5657 
    57         ringBuffer = new RingBuffer<E>( 
    58                 eventFactory, 
    59                 claimStrategy, 
    60                 waitStrategy 
    61         ); 
     58                ringBuffer = new RingBuffer<E>( 
     59                                eventFactory, 
     60                                claimStrategy, 
     61                                waitStrategy 
     62                ); 
    6263 
    63         SequenceBarrier previousBarrier = ringBuffer.newBarrier(); 
    64         final List<EventProcessor> processors = Lists.newArrayList(); 
    65         for ( int i = 0; i < nodes - 1; i++ ) { 
    66             final IUsefulWorkEmulator<E> emulator = emulators[i]; 
    67             final PassThroughHandler<E> handler = new PassThroughHandler<E>( emulator ); 
    68             final BatchEventProcessor<E> processor = new BatchEventProcessor<E>( 
    69                     ringBuffer, 
    70                     previousBarrier, 
    71                     handler 
    72             ); 
    73             previousBarrier = ringBuffer.newBarrier( processor.getSequence() ); 
    74             processors.add( processor ); 
    75         } 
     64                SequenceBarrier previousBarrier = ringBuffer.newBarrier(); 
     65                final List<EventProcessor> processors = Lists.newArrayList(); 
     66                for( int i = 0; i < nodes - 1; i++ ) { 
     67                        final IUsefulWorkEmulator<E> emulator = emulators[i]; 
     68                        final PassThroughHandler<E> handler = new PassThroughHandler<E>( emulator ); 
     69                        final BatchEventProcessor<E> processor = new BatchEventProcessor<E>( 
     70                                        ringBuffer, 
     71                                        previousBarrier, 
     72                                        handler 
     73                        ); 
     74                        previousBarrier = ringBuffer.newBarrier( processor.getSequence() ); 
     75                        processors.add( processor ); 
     76                } 
    7677 
    77         this.processors = processors.toArray( new EventProcessor[0] ); 
     78                this.processors = processors.toArray( new EventProcessor[0] ); 
    7879 
    79         lastSequenceBarrier = previousBarrier; 
    80         lastEmulator = emulators[emulators.length - 1]; 
     80                lastSequenceBarrier = previousBarrier; 
     81                lastEmulator = emulators[emulators.length - 1]; 
    8182 
    82         ringBuffer.setGatingSequences( lastSequence ); 
     83                ringBuffer.setGatingSequences( lastSequence ); 
    8384 
    84         for ( final EventProcessor processor : processors ) { 
    85             threadPool.execute( processor ); 
    86         } 
     85                for( final EventProcessor processor : processors ) { 
     86                        threadPool.execute( processor ); 
     87                } 
    8788 
    88         return new Enqueuer( eventsInBatch(), eventFactory, ringBuffer ); 
    89     } 
     89                return new BaseEnqueuer[] { 
     90                                new Enqueuer( eventsInBatch(), eventFactory, ringBuffer ) 
     91                }; 
     92        } 
    9093 
    91     @Override 
    92     protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
    93         final long seq = lastSequence.get(); 
    94         final long maxSequence = seq + eventsInBatch; 
     94        @Override 
     95        protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
     96                final long seq = lastSequence.get(); 
     97                final long maxSequence = seq + eventsInBatch; 
    9598 
    9699 
    97         long nextSequence = lastSequence.get() + 1L; 
    98         while ( nextSequence <= maxSequence ) { 
    99             final long availableSequence = Math.min( 
    100                     lastSequenceBarrier.waitFor( nextSequence ), 
    101                     maxSequence 
    102             ); 
    103             while ( nextSequence <= availableSequence ) { 
    104                 final E event = ringBuffer.get( nextSequence ); 
    105                 lastEmulator.spendCPUTime( event ); 
     100                long nextSequence = lastSequence.get() + 1L; 
     101                while( nextSequence <= maxSequence ) { 
     102                        final long availableSequence = Math.min( 
     103                                        lastSequenceBarrier.waitFor( nextSequence ), 
     104                                        maxSequence 
     105                        ); 
     106                        while( nextSequence <= availableSequence ) { 
     107                                final E event = ringBuffer.get( nextSequence ); 
     108                                lastEmulator.spendCPUTime( event ); 
    106109 
    107                 nextSequence++; 
    108             } 
    109         } 
    110         lastSequence.set( nextSequence - 1L ); 
     110                                nextSequence++; 
     111                        } 
     112                } 
     113                lastSequence.set( nextSequence - 1L ); 
    111114 
    112         return 0; 
    113     } 
     115                return 0; 
     116        } 
    114117 
    115118 
    116     @Override 
    117     public void terminate() { 
    118         super.terminate(); 
     119        @Override 
     120        public void terminate() { 
     121                super.terminate(); 
    119122 
    120         for ( final EventProcessor processor : processors ) { 
    121             processor.halt(); 
    122         } 
    123     } 
     123                for( final EventProcessor processor : processors ) { 
     124                        processor.halt(); 
     125                } 
     126        } 
    124127 
    125     @Override 
    126     public String toString() { 
    127         return String.format( 
    128                 "%s[%s][%s]", 
    129                 super.toString(), 
    130                 waitStrategy.getClass().getSimpleName(), 
    131                 ( publishInBatch ) ? ( "batching" ) : ( "no-batching" ) 
    132         ); 
    133     } 
     128        @Override 
     129        public String toString() { 
     130                return String.format( 
     131                                "%s[%s][%s]", 
     132                                super.toString(), 
     133                                waitStrategy.getClass().getSimpleName(), 
     134                                ( publishInBatch ) ? ( "batching" ) : ( "no-batching" ) 
     135                ); 
     136        } 
    134137 
    135     private static class PassThroughHandler<E> implements EventHandler<E> { 
     138        private static class PassThroughHandler<E> implements EventHandler<E> { 
    136139 
    137         private final IUsefulWorkEmulator<E> emulator; 
     140                private final IUsefulWorkEmulator<E> emulator; 
    138141 
    139         public PassThroughHandler( final IUsefulWorkEmulator<E> emulator ) { 
    140             this.emulator = emulator; 
    141         } 
     142                public PassThroughHandler( final IUsefulWorkEmulator<E> emulator ) { 
     143                        this.emulator = emulator; 
     144                } 
    142145 
    143         @Override 
    144         public void onEvent( final E event, 
    145                              final long sequence, 
    146                              final boolean endOfBatch ) throws Exception { 
    147             emulator.spendCPUTime( event ); 
    148         } 
    149     } 
     146                @Override 
     147                public void onEvent( final E event, 
     148                                     final long sequence, 
     149                                     final boolean endOfBatch ) throws Exception { 
     150                        emulator.spendCPUTime( event ); 
     151                } 
     152        } 
    150153 
    151     private class Enqueuer extends EventEnqueuer<E> { 
    152         private final RingBuffer<E> ringBuffer; 
     154        private class Enqueuer extends EventEnqueuer<E> { 
     155                private final RingBuffer<E> ringBuffer; 
    153156 
    154         private Enqueuer( final int eventsInBatch, 
    155                           final EventFactory<E> factory, 
    156                           final RingBuffer<E> ringBuffer ) { 
    157             super( eventsInBatch, factory ); 
    158             this.ringBuffer = ringBuffer; 
    159         } 
     157                private Enqueuer( final int eventsInBatch, 
     158                                  final EventFactory<E> factory, 
     159                                  final RingBuffer<E> ringBuffer ) { 
     160                        super( eventsInBatch, factory ); 
     161                        this.ringBuffer = ringBuffer; 
     162                } 
    160163 
    161         @Override 
    162         protected void enqueueEventsBatch( final int eventsInBatch, 
    163                                            final EventFactory<E> factory ) throws Exception { 
    164             if ( publishInBatch ) { 
    165                 final BatchDescriptor batch = ringBuffer.newBatchDescriptor( eventsInBatch ); 
    166                 ringBuffer.next( batch ); 
     164                @Override 
     165                protected void enqueueEventsBatch( final int eventsInBatch, 
     166                                                   final EventFactory<E> factory ) throws Exception { 
     167                        if( publishInBatch ) { 
     168                                final BatchDescriptor batch = ringBuffer.newBatchDescriptor( eventsInBatch ); 
     169                                ringBuffer.next( batch ); 
    167170//                for(long sequence=batch.getStart();sequence<batch.getEnd();sequence++){ 
    168171//                    final E msg = ringBuffer.get( sequence ); 
    169172//                } 
    170                 ringBuffer.publish( batch ); 
    171             } else { 
    172                 for ( int i = 0; i < eventsInBatch; i++ ) { 
    173                     final long nextSequence = ringBuffer.next(); 
    174                     ringBuffer.get( nextSequence ); 
    175                     ringBuffer.publish( nextSequence ); 
    176                 } 
    177             } 
    178         } 
    179     } 
     173                                ringBuffer.publish( batch ); 
     174                        } else { 
     175                                for( int i = 0; i < eventsInBatch; i++ ) { 
     176                                        final long nextSequence = ringBuffer.next(); 
     177                                        ringBuffer.get( nextSequence ); 
     178                                        ringBuffer.publish( nextSequence ); 
     179                                } 
     180                        } 
     181                } 
     182        } 
    180183} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/stressed/ITask.java

    r523 r563  
    11package test.threads.queue.stressed; 
    22 
    3 import java.util.Locale; 
     3import java.util.*; 
    44import java.util.concurrent.Executor; 
    55 
     
    88 
    99/** 
    10  * fixme: Class ITask is for porn 
    11  * 
    1210 * @author cheremin 
    1311 * @since 27.02.12,  14:06 
     
    1513public interface ITask<E> { 
    1614 
    17     public int workersRequired(); 
     15        public int workersRequired(); 
    1816 
    19     public void initialize( final Executor threadPool, 
    20                             final IUsefulWorkEmulator<E>[] emulators, 
    21                             final EventFactory<E> eventFactory ); 
     17        public void initialize( final Executor threadPool, 
     18                                final IUsefulWorkEmulator<E>[] emulators, 
     19                                final EventFactory<E> eventFactory ); 
    2220 
    23     public BenchmarkResult[] execute( final long millisToBogus, 
    24                                     final long millisToMeasure, 
    25                                     final int turns ); 
     21        public BenchmarkResult[] execute( final long millisToBogus, 
     22                                          final long millisToMeasure, 
     23                                          final int turns ); 
    2624 
    27     public void terminate(); 
     25        public void terminate(); 
    2826 
    29     @Immutable 
    30     public static class BenchmarkResult { 
    31         public final long timeEllapsedMilliseconds; 
    32         public final long timeEllapsedNanoseconds; 
     27        @Immutable 
     28        public static class BenchmarkResult { 
     29                public final long timeElapsedMilliseconds; 
     30                public final long timeElapsedNanoseconds; 
    3331 
    34         public final long packetsCompleted; 
     32                public final long packetsCompleted; 
    3533 
    36         public BenchmarkResult( final long timeEllapsedMilliseconds, 
    37                                 final long timeEllapsedNanoseconds, 
    38                                 final long packetsCompleted ) { 
    39             this.timeEllapsedMilliseconds = timeEllapsedMilliseconds; 
    40             this.timeEllapsedNanoseconds = timeEllapsedNanoseconds; 
    41             this.packetsCompleted = packetsCompleted; 
    42         } 
     34                public BenchmarkResult( final long timeElapsedMilliseconds, 
     35                                        final long timeElapsedNanoseconds, 
     36                                        final long packetsCompleted ) { 
     37                        this.timeElapsedMilliseconds = timeElapsedMilliseconds; 
     38                        this.timeElapsedNanoseconds = timeElapsedNanoseconds; 
     39                        this.packetsCompleted = packetsCompleted; 
     40                } 
    4341 
    44         public String print( final String taskName, 
    45                              final String payload ) { 
    46             return String.format( 
    47                     Locale.US, 
    48                     "%s@%s: %d packets of %s, takes %d ms (%.1f packets/ms)", 
    49                     taskName, 
    50                     payload, 
    51                     packetsCompleted, payload, 
    52                     timeEllapsedMilliseconds, 
    53                     packetsCompleted * 1.0 / timeEllapsedMilliseconds 
     42                public String print( final String taskName, 
     43                                     final String payload ) { 
     44                        return String.format( 
     45                                        Locale.US, 
     46                                        "%s@%s: %d packets of %s, takes %d ms (%.1f packets/ms)", 
     47                                        taskName, 
     48                                        payload, 
     49                                        packetsCompleted, payload, 
     50                                        timeElapsedMilliseconds, 
     51                                        packetsCompleted * 1.0 / timeElapsedMilliseconds 
    5452 
    55             ); 
    56         } 
     53                        ); 
     54                } 
    5755 
    58         public String printTabular( final String taskName, 
    59                                     final String payloadDescription ) { 
    60             return String.format( 
    61                     Locale.US, 
    62                     "%s@%s\t%d\t%d\t%.1f", 
    63                     taskName, 
    64                     payloadDescription, 
    65                     packetsCompleted, 
    66                     timeEllapsedMilliseconds, 
    67                     packetsCompleted * 1.0 / timeEllapsedMilliseconds 
     56                public String printTabular( final String taskName, 
     57                                            final String payloadDescription ) { 
     58                        return String.format( 
     59                                        Locale.US, 
     60                                        "%s@%s\t%d\t%d\t%.1f", 
     61                                        taskName, 
     62                                        payloadDescription, 
     63                                        packetsCompleted, 
     64                                        timeElapsedMilliseconds, 
     65                                        packetsCompleted * 1.0 / timeElapsedMilliseconds 
    6866 
    69             ); 
    70         } 
    71     } 
     67                        ); 
     68                } 
     69        } 
    7270} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/stressed/SingleThreadedTask.java

    r523 r563  
    77import org.apache.commons.logging.LogFactory; 
    88import test.helpers.Config; 
     9import test.threads.queue.common.BaseEnqueuer; 
    910 
    1011/** 
     
    1516 */ 
    1617public class SingleThreadedTask<E> extends AbstractTask<E> { 
    17     private static final Log log = LogFactory.getLog( SingleThreadedTask.class ); 
     18        private static final Log log = LogFactory.getLog( SingleThreadedTask.class ); 
    1819 
    19     public SingleThreadedTask() { 
    20     } 
     20        public SingleThreadedTask() { 
     21        } 
    2122 
    22     public SingleThreadedTask( final int bufferSize, 
    23                                final int packetsInBatch ) { 
    24         super( bufferSize, packetsInBatch ); 
    25     } 
     23        public SingleThreadedTask( final int bufferSize, 
     24                                   final int packetsInBatch ) { 
     25                super( bufferSize, packetsInBatch ); 
     26        } 
    2627 
    27     public SingleThreadedTask( final Config config ) { 
    28         super( config ); 
    29     } 
     28        public SingleThreadedTask( final Config config ) { 
     29                super( config ); 
     30        } 
    3031 
    31     @Override 
    32     public int workersRequired() { 
    33         // this is fake: we do not actually use 1 additional thread, instead we do all work in 
    34         // calling thread. So we really use 1 worker, but it is calling thread worker, 
    35         // not additional thread worker, as usually 
    36         return 1; 
    37     } 
     32        @Override 
     33        public int workersRequired() { 
     34                // this is fake: we do not actually use 1 additional thread, instead we do all work in 
     35                // calling thread. So we really use 1 worker, but it is calling thread worker, 
     36                // not additional thread worker, as usually 
     37                return 1; 
     38        } 
    3839 
    39     private IUsefulWorkEmulator<E> emulator; 
     40        private IUsefulWorkEmulator<E> emulator; 
    4041 
    41     @Override 
    42     protected EventEnqueuer _initialize( final Executor threadPool, 
    43                                          final IUsefulWorkEmulator<E>[] emulators, 
    44                                          final EventFactory<E> factory ) throws Exception { 
    45         this.emulator = emulators[0]; 
    46         return new EventEnqueuer<E>( eventsInBatch(), factory ) { 
    47             @Override 
    48             protected void enqueueEventsBatch( final int eventsInBatch, 
    49                                                final EventFactory<E> factory ) throws Exception { 
    50                 //do nothing 
    51             } 
    52         }; 
    53     } 
     42        @Override 
     43        protected BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     44                                                      final IUsefulWorkEmulator<E>[] emulators, 
     45                                                      final EventFactory<E> factory ) throws Exception { 
     46                this.emulator = emulators[0]; 
     47                return new BaseEnqueuer[] { new EventEnqueuer<E>( eventsInBatch(), factory ) { 
     48                        @Override 
     49                        protected void enqueueEventsBatch( final int eventsInBatch, 
     50                                                           final EventFactory<E> factory ) throws Exception { 
     51                                //do nothing 
     52                        } 
     53                } }; 
     54        } 
    5455 
    55     @Override 
    56     protected BenchmarkResult[] executeImpl( final long millisToBogus, 
    57                                              final long millisToMeasure, 
    58                                              final int measurements ) throws Exception { 
    59         long eventsDequeued = 0; 
     56        @Override 
     57        protected BenchmarkResult[] executeImpl( final long millisToBogus, 
     58                                                 final long millisToMeasure, 
     59                                                 final int measurements ) throws Exception { 
     60                long eventsDequeued = 0; 
    6061 
    6162 
    6263//        final long msToOneMeasure = millisToMeasure / measurements; 
    63         long eventsAtStart = eventsDequeued; 
    64         long startedAtMs = System.currentTimeMillis(); 
    65         long startedAtNs = System.nanoTime(); 
    66         while ( true ) { 
    67             dequeueBatchEvents( eventsInBatch() ); 
    68             eventsDequeued += eventsInBatch(); 
     64                long eventsAtStart = eventsDequeued; 
     65                long startedAtMs = System.currentTimeMillis(); 
     66                long startedAtNs = System.nanoTime(); 
     67                while( true ) { 
     68                        dequeueBatchEvents( eventsInBatch() ); 
     69                        eventsDequeued += eventsInBatch(); 
    6970 
    70             final long finishedAtMs = System.currentTimeMillis(); 
    71             final long ellapsedMs = finishedAtMs - startedAtMs; 
    72             if ( ellapsedMs >= millisToMeasure ) { 
    73                 final long eventsProcessed = eventsDequeued - eventsAtStart; 
    74                 final long finishedAtNs = System.nanoTime(); 
    75                 final long ellapsedNs = finishedAtNs - startedAtNs; 
     71                        final long finishedAtMs = System.currentTimeMillis(); 
     72                        final long ellapsedMs = finishedAtMs - startedAtMs; 
     73                        if( ellapsedMs >= millisToMeasure ) { 
     74                                final long eventsProcessed = eventsDequeued - eventsAtStart; 
     75                                final long finishedAtNs = System.nanoTime(); 
     76                                final long ellapsedNs = finishedAtNs - startedAtNs; 
    7677 
    77                 final BenchmarkResult result = new BenchmarkResult( 
    78                         ellapsedMs, 
    79                         ellapsedNs, 
    80                         eventsProcessed 
    81                 ); 
    82                 return new BenchmarkResult[]{ result }; 
    83             } 
    84         } 
    85     } 
     78                                final BenchmarkResult result = new BenchmarkResult( 
     79                                                ellapsedMs, 
     80                                                ellapsedNs, 
     81                                                eventsProcessed 
     82                                ); 
     83                                return new BenchmarkResult[] { result }; 
     84                        } 
     85                } 
     86        } 
    8687 
    87     @Override 
    88     protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
    89         final EventFactory<E> factory = eventFactory(); 
    90         for ( int i = 0; i < eventsInBatch; i++ ) { 
    91             final E event = factory.newInstance(); 
    92             emulator.spendCPUTime( event ); 
    93         } 
    94         return 0; 
    95     } 
     88        @Override 
     89        protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
     90                final EventFactory<E> factory = eventFactory(); 
     91                for( int i = 0; i < eventsInBatch; i++ ) { 
     92                        final E event = factory.newInstance(); 
     93                        emulator.spendCPUTime( event ); 
     94                } 
     95                return 0; 
     96        } 
    9697} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/unstressed/DisruptorTask.java

    r543 r563  
    77import org.apache.commons.logging.LogFactory; 
    88import test.helpers.Config; 
     9import test.threads.queue.common.BaseEnqueuer; 
    910import test.threads.queue.stressed.AbstractTask; 
    1011import test.threads.queue.stressed.IUsefulWorkEmulator; 
     
    2021 */ 
    2122public class DisruptorTask extends AbstractTask<LongValueMessage> { 
    22     private static final Log log = LogFactory.getLog( DisruptorTask.class ); 
    23  
    24     private final WaitStrategy waitStrategy; 
    25     private final boolean publishInBatch; 
    26     private final int batchSize; 
    27     private final boolean subscribeInBatch; 
    28  
    29     public DisruptorTask( final Config config ) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 
    30         super( config ); 
    31  
    32         this.waitStrategy = config.newInstanceByClass( 
    33                 "disruptor.wait-strategy", 
    34                 new BusySpinWaitStrategy() 
    35         ); 
    36  
    37         this.publishInBatch = config.getAsBoolean( "disruptor.publish-in-batch", false ); 
    38         if ( this.publishInBatch ) { 
    39             batchSize = config.getAsInt( "disruptor.batch-size", 1 ); 
    40         } else { 
    41             batchSize = -1; 
    42         } 
    43         this.subscribeInBatch = config.getAsBoolean( "disruptor.subscribe-in-batch", true ); 
    44     } 
    45  
    46  
    47     private RingBuffer<LongValueMessage> ringBuffer; 
    48  
    49     private SequenceBarrier lastSequenceBarrier; 
    50  
    51     private final Sequence lastSequence = new Sequence( Sequencer.INITIAL_CURSOR_VALUE ); 
    52  
    53     @Override 
    54     protected EventEnqueuer _initialize( final Executor threadPool, 
    55                                          final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
    56                                          final EventFactory<LongValueMessage> eventFactory ) { 
    57         final ClaimStrategy claimStrategy = new SingleThreadedClaimStrategy( bufferSize() ); 
    58  
    59         ringBuffer = new RingBuffer<LongValueMessage>( 
    60                 eventFactory, 
    61                 claimStrategy, 
    62                 waitStrategy 
    63         ); 
    64  
    65         lastSequenceBarrier = ringBuffer.newBarrier(); 
    66  
    67         ringBuffer.setGatingSequences( lastSequence ); 
    68  
    69         return new Enqueuer( eventsInBatch(), batchSize, eventFactory, ringBuffer ); 
    70     } 
    71  
    72     private long sumBeforeGaps = 0; 
    73     private long sumAfterGaps = 0; 
    74     private int gapsMeasured = 0; 
    75  
    76     @Override 
    77     protected BenchmarkResult[] executeImpl( final long millisToBogus, 
    78                                              final long millisToMeasure, 
    79                                              final int measurements ) throws Exception { 
    80         sumBeforeGaps = sumAfterGaps = gapsMeasured = 0; 
    81  
    82         final BenchmarkResult[] results = super.executeImpl( millisToBogus, millisToMeasure, measurements ); 
    83  
    84         System.out.printf( 
    85                 "|b-gap|=%.2f, |a-gap|=%.2f, gaps=%d\n", 
    86                 ( sumBeforeGaps * 1.0 / gapsMeasured ), 
    87                 ( sumAfterGaps * 1.0 / gapsMeasured ), 
    88                 gapsMeasured 
    89         ); 
    90  
    91         return results; 
    92     } 
    93  
    94     @Override 
    95     protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
    96         final long seq = lastSequence.get(); 
    97         final long maxSequence = seq + eventsInBatch; 
    98  
    99         sumBeforeGaps += ringBuffer.getCursor() - seq; 
    100  
    101         long sum = 0; 
    102         if ( subscribeInBatch ) { 
    103             long nextSequence = lastSequence.get() + 1L; 
    104             while ( nextSequence <= maxSequence ) { 
    105                 final long availableSequence = Math.min( 
    106                         lastSequenceBarrier.waitFor( nextSequence ), 
    107                         maxSequence 
    108                 ); 
    109                 while ( nextSequence <= availableSequence ) { 
    110                     final LongValueMessage event = ringBuffer.get( nextSequence ); 
    111                     sum += event.value; 
    112                     nextSequence++; 
    113                 } 
    114                 lastSequence.set( nextSequence - 1L ); 
    115             } 
    116         } else { 
    117             for ( long nextSequence = lastSequence.get() + 1L; 
    118                     nextSequence <= maxSequence; 
    119                     nextSequence++ ) { 
    120                 lastSequenceBarrier.waitFor( nextSequence ); 
    121  
    122                 final LongValueMessage event = ringBuffer.get( nextSequence ); 
    123                 sum += event.value; 
    124  
    125                 lastSequence.set( nextSequence ); 
    126             } 
    127         } 
    128  
    129         final long gap = ringBuffer.getCursor() - lastSequence.get(); 
    130         sumAfterGaps += gap; 
    131         gapsMeasured++; 
    132  
    133         /*if ( gap < 4 ) { 
    134             Thread.yield(); 
    135         }*/ 
    136         return sum; 
    137     } 
    138  
    139     @Override 
    140     public int workersRequired() { 
    141         return 1; 
    142     } 
    143  
    144     @Override 
    145     public String toString() { 
    146         return String.format( 
    147                 "%s[%d][%s][publish:%s][subscribe:%s]", 
    148                 getClass().getSimpleName(), 
    149                 bufferSize(), 
    150                 waitStrategy.getClass().getSimpleName(), 
    151                 ( publishInBatch ) ? ( "batch[" + batchSize + "]" ) : ( "no-batch" ), 
    152                 ( subscribeInBatch ) ? ( "batch" ) : ( "no-batch" ) 
    153         ); 
    154     } 
    155  
    156     private class Enqueuer extends EventEnqueuer<LongValueMessage> { 
    157         private final RingBuffer<LongValueMessage> ringBuffer; 
    158         private final BatchDescriptor batch; 
    159  
    160         private final int batchesInBatch; 
    161  
    162         private Enqueuer( final int eventsInBatch, 
    163                           final int batchSize, 
    164                           final EventFactory<LongValueMessage> factory, 
    165                           final RingBuffer<LongValueMessage> ringBuffer ) { 
    166             super( eventsInBatch, factory ); 
    167  
    168             this.ringBuffer = ringBuffer; 
    169  
    170             checkArgument( 
    171                     eventsInBatch % batchSize == 0, 
    172                     "eventsInBatch(%s) % batchSize(%s) must be 0", 
    173                     eventsInBatch, batchSize 
    174             ); 
    175             batch = ringBuffer.newBatchDescriptor( batchSize ); 
    176  
    177             batchesInBatch = eventsInBatch / batchSize; 
    178         } 
    179  
    180         @Override 
    181         protected void enqueueEventsBatch( final int eventsInBatch, 
    182                                            final EventFactory<LongValueMessage> factory ) throws Exception { 
    183             if ( publishInBatch ) { 
    184                 int i = 0; 
    185                 for ( int batchNo = 0; batchNo < batchesInBatch; batchNo++ ) { 
    186                     ringBuffer.next( batch ); 
    187                     for ( int eventNo = 0; eventNo < batchSize; eventNo++ ) { 
    188                         final long sequence = batch.getStart() + eventNo; 
    189                         final LongValueMessage event = ringBuffer.get( sequence ); 
    190                         event.value = i; 
    191                         i++; 
    192                     } 
    193                     ringBuffer.publish( batch ); 
    194                 } 
    195             } else { 
    196                 for ( int i = 0; i < eventsInBatch; i++ ) { 
    197                     final long nextSequence = ringBuffer.next(); 
    198                     final LongValueMessage event = ringBuffer.get( nextSequence ); 
    199                     event.value = i; 
    200                     ringBuffer.publish( nextSequence ); 
    201                 } 
    202             } 
    203         } 
    204     } 
     23        private static final Log log = LogFactory.getLog( DisruptorTask.class ); 
     24 
     25        private final WaitStrategy waitStrategy; 
     26        private final boolean publishInBatch; 
     27        private final int batchSize; 
     28        private final boolean subscribeInBatch; 
     29        private final int enqueuersCount; 
     30 
     31        public DisruptorTask( final Config config ) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 
     32                super( config ); 
     33 
     34                enqueuersCount = config.getAsInt( "task.enqueuers", 1 ); 
     35 
     36                this.waitStrategy = config.newInstanceByClass( 
     37                                "disruptor.wait-strategy", 
     38                                new BusySpinWaitStrategy() 
     39                ); 
     40 
     41                this.publishInBatch = config.getAsBoolean( "disruptor.publish-in-batch", false ); 
     42                if( this.publishInBatch ) { 
     43                        batchSize = config.getAsInt( "disruptor.batch-size", 1 ); 
     44                } else { 
     45                        batchSize = -1; 
     46                } 
     47                this.subscribeInBatch = config.getAsBoolean( "disruptor.subscribe-in-batch", true ); 
     48        } 
     49 
     50 
     51        private RingBuffer<LongValueMessage> ringBuffer; 
     52 
     53        private SequenceBarrier lastSequenceBarrier; 
     54 
     55        private final Sequence lastSequence = new Sequence( Sequencer.INITIAL_CURSOR_VALUE ); 
     56 
     57        @Override 
     58        protected BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     59                                                      final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
     60                                                      final EventFactory<LongValueMessage> eventFactory ) { 
     61                final ClaimStrategy claimStrategy; 
     62                if( enqueuersCount == 1 ) { 
     63                        claimStrategy = new SingleThreadedClaimStrategy( bufferSize() ); 
     64                } else { 
     65                        claimStrategy = new MultiThreadedClaimStrategy( bufferSize() ); 
     66                } 
     67 
     68                ringBuffer = new RingBuffer<LongValueMessage>( 
     69                                eventFactory, 
     70                                claimStrategy, 
     71                                waitStrategy 
     72                ); 
     73 
     74                lastSequenceBarrier = ringBuffer.newBarrier(); 
     75 
     76                ringBuffer.setGatingSequences( lastSequence ); 
     77 
     78                final BaseEnqueuer[] enqueuers = new BaseEnqueuer[enqueuersCount]; 
     79                for( int i = 0; i < enqueuers.length; i++ ) { 
     80                        enqueuers[i] = new Enqueuer( 
     81                                        eventsInBatch(), 
     82                                        batchSize, 
     83                                        eventFactory, 
     84                                        ringBuffer 
     85                        ); 
     86 
     87                } 
     88                return enqueuers; 
     89        } 
     90 
     91        private long sumBeforeGaps = 0; 
     92        private long sumAfterGaps = 0; 
     93        private int gapsMeasured = 0; 
     94 
     95        @Override 
     96        protected BenchmarkResult[] executeImpl( final long millisToBogus, 
     97                                                 final long millisToMeasure, 
     98                                                 final int measurements ) throws Exception { 
     99                sumBeforeGaps = sumAfterGaps = gapsMeasured = 0; 
     100 
     101                final BenchmarkResult[] results = super.executeImpl( millisToBogus, millisToMeasure, measurements ); 
     102 
     103                System.out.printf( 
     104                                "|b-gap|=%.2f, |a-gap|=%.2f, gaps=%d\n", 
     105                                ( sumBeforeGaps * 1.0 / gapsMeasured ), 
     106                                ( sumAfterGaps * 1.0 / gapsMeasured ), 
     107                                gapsMeasured 
     108                ); 
     109 
     110                return results; 
     111        } 
     112 
     113        @Override 
     114        protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
     115                final long seq = lastSequence.get(); 
     116                final long maxSequence = seq + eventsInBatch; 
     117 
     118                sumBeforeGaps += ringBuffer.getCursor() - seq; 
     119 
     120                long sum = 0; 
     121                if( subscribeInBatch ) { 
     122                        long nextSequence = lastSequence.get() + 1L; 
     123                        while( nextSequence <= maxSequence ) { 
     124                                final long availableSequence = Math.min( 
     125                                                lastSequenceBarrier.waitFor( nextSequence ), 
     126                                                maxSequence 
     127                                ); 
     128                                while( nextSequence <= availableSequence ) { 
     129                                        final LongValueMessage event = ringBuffer.get( nextSequence ); 
     130                                        sum += event.value; 
     131                                        nextSequence++; 
     132                                } 
     133                                lastSequence.set( nextSequence - 1L ); 
     134                        } 
     135                } else { 
     136                        for( long nextSequence = lastSequence.get() + 1L; 
     137                             nextSequence <= maxSequence; 
     138                             nextSequence++ ) { 
     139                                lastSequenceBarrier.waitFor( nextSequence ); 
     140 
     141                                final LongValueMessage event = ringBuffer.get( nextSequence ); 
     142                                sum += event.value; 
     143 
     144                                lastSequence.set( nextSequence ); 
     145                        } 
     146                } 
     147 
     148                final long gap = ringBuffer.getCursor() - lastSequence.get(); 
     149                sumAfterGaps += gap; 
     150                gapsMeasured++; 
     151 
     152                return sum; 
     153        } 
     154 
     155        @Override 
     156        public int workersRequired() { 
     157                return enqueuersCount; 
     158        } 
     159 
     160        @Override 
     161        public String toString() { 
     162                return String.format( 
     163                                "%s[%d][%s][publish:%s][subscribe:%s]", 
     164                                getClass().getSimpleName(), 
     165                                bufferSize(), 
     166                                waitStrategy.getClass().getSimpleName(), 
     167                                ( publishInBatch ) ? ( "batch[" + batchSize + "]" ) : ( "no-batch" ), 
     168                                ( subscribeInBatch ) ? ( "batch" ) : ( "no-batch" ) 
     169                ); 
     170        } 
     171 
     172        private class Enqueuer extends EventEnqueuer<LongValueMessage> { 
     173                private final RingBuffer<LongValueMessage> ringBuffer; 
     174                private final BatchDescriptor batch; 
     175 
     176                private final int batchesInBatch; 
     177 
     178                private Enqueuer( final int eventsInBatch, 
     179                                  final int batchSize, 
     180                                  final EventFactory<LongValueMessage> factory, 
     181                                  final RingBuffer<LongValueMessage> ringBuffer ) { 
     182                        super( eventsInBatch, factory ); 
     183 
     184                        this.ringBuffer = ringBuffer; 
     185 
     186                        checkArgument( 
     187                                        eventsInBatch % batchSize == 0, 
     188                                        "eventsInBatch(%s) % batchSize(%s) must be 0", 
     189                                        eventsInBatch, batchSize 
     190                        ); 
     191                        batch = ringBuffer.newBatchDescriptor( batchSize ); 
     192 
     193                        batchesInBatch = eventsInBatch / batchSize; 
     194                } 
     195 
     196                @Override 
     197                protected void enqueueEventsBatch( final int eventsInBatch, 
     198                                                   final EventFactory<LongValueMessage> factory ) throws Exception { 
     199                        if( publishInBatch ) { 
     200                                int i = 0; 
     201                                for( int batchNo = 0; batchNo < batchesInBatch; batchNo++ ) { 
     202                                        ringBuffer.next( batch ); 
     203                                        for( int eventNo = 0; eventNo < batchSize; eventNo++ ) { 
     204                                                final long sequence = batch.getStart() + eventNo; 
     205                                                final LongValueMessage event = ringBuffer.get( sequence ); 
     206                                                event.value = i; 
     207                                                i++; 
     208                                        } 
     209                                        ringBuffer.publish( batch ); 
     210                                } 
     211                        } else { 
     212                                for( int i = 0; i < eventsInBatch; i++ ) { 
     213                                        final long nextSequence = ringBuffer.next(); 
     214                                        final LongValueMessage event = ringBuffer.get( nextSequence ); 
     215                                        event.value = i; 
     216                                        ringBuffer.publish( nextSequence ); 
     217                                } 
     218                        } 
     219                } 
     220        } 
    205221} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/unstressed/LongQueueTask.java

    r498 r563  
    2020 */ 
    2121public class LongQueueTask extends AbstractTask<LongValueMessage> { 
    22     private static final Log log = LogFactory.getLog( LongQueueTask.class ); 
     22        private static final Log log = LogFactory.getLog( LongQueueTask.class ); 
    2323 
    24     private final CABSESDMaskedLongQueue queue; 
     24        private final CABSESDMaskedLongQueue queue; 
    2525 
    26     public LongQueueTask( final Config config ) throws Exception { 
    27         super( config ); 
     26        public LongQueueTask( final Config config ) throws Exception { 
     27                super( config ); 
    2828 
    29         this.queue = new CABSESDMaskedLongQueue( bufferSize() ); 
    30     } 
     29                this.queue = new CABSESDMaskedLongQueue( bufferSize() ); 
     30        } 
    3131 
    3232 
    33     @Override 
    34     protected BaseEnqueuer _initialize( final Executor threadPool, 
    35                                         final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
    36                                         final EventFactory<LongValueMessage> factory ) throws Exception { 
    37         return new Enqueuer(); 
    38     } 
     33        @Override 
     34        protected BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     35                                                      final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
     36                                                      final EventFactory<LongValueMessage> factory ) throws Exception { 
     37                return new BaseEnqueuer[] { new Enqueuer() }; 
     38        } 
    3939 
    40     @Override 
    41     protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
    42         long sum = 0; 
    43         for ( int i = 0; i < eventsInBatch; i++ ) { 
    44             sum += queue.dequeue(); 
    45         } 
    46         return sum; 
    47     } 
     40        @Override 
     41        protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
     42                long sum = 0; 
     43                for( int i = 0; i < eventsInBatch; i++ ) { 
     44                        sum += queue.dequeue(); 
     45                } 
     46                return sum; 
     47        } 
    4848 
    49     @Override 
    50     public int workersRequired() { 
    51         return 1; 
    52     } 
     49        @Override 
     50        public int workersRequired() { 
     51                return 1; 
     52        } 
    5353 
    54     @Override 
    55     public String toString() { 
    56         return String.format( 
    57                 "%s[CABSESDMaskedLongQueue[%d]]", 
    58                 getClass().getSimpleName(), 
    59                 bufferSize() 
    60         ); 
    61     } 
     54        @Override 
     55        public String toString() { 
     56                return String.format( 
     57                                "%s[CABSESDMaskedLongQueue[%d]]", 
     58                                getClass().getSimpleName(), 
     59                                bufferSize() 
     60                ); 
     61        } 
    6262 
    63     private class Enqueuer extends BaseEnqueuer<LongValueMessage> { 
    64         private Enqueuer() { 
    65             super( eventsInBatch() ); 
    66         } 
     63        private class Enqueuer extends BaseEnqueuer<LongValueMessage> { 
     64                private Enqueuer() { 
     65                        super( eventsInBatch() ); 
     66                } 
    6767 
    68         @Override 
    69         protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
    70             for ( int i = 0; i < eventsInBatch; i++ ) { 
    71                 queue.enqueue( i ); 
    72             } 
    73         } 
    74     } 
     68                @Override 
     69                protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
     70                        for( int i = 0; i < eventsInBatch; i++ ) { 
     71                                queue.enqueue( i ); 
     72                        } 
     73                } 
     74        } 
    7575} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/unstressed/QueueTask.java

    r498 r563  
    1919 */ 
    2020public class QueueTask extends AbstractTask<LongValueMessage> { 
    21     private static final Log log = LogFactory.getLog( QueueTask.class ); 
     21        private static final Log log = LogFactory.getLog( QueueTask.class ); 
    2222 
    23     private final IBoundedQueueFactory<LongValueMessage, ? extends IQueue<LongValueMessage>> queueFactory; 
    24     private final IQueue<LongValueMessage> queue; 
     23        private final IBoundedQueueFactory<LongValueMessage, ? extends IQueue<LongValueMessage>> queueFactory; 
     24        private final IQueue<LongValueMessage> queue; 
     25        private final int enqueuersCount; 
    2526 
    26     public QueueTask( final Config config ) throws Exception { 
    27         super( config ); 
     27        public QueueTask( final Config config ) throws Exception { 
     28                super( config ); 
    2829 
    29         final Class<IBoundedQueueFactory> clazz = config.getAsClass( "task.queue-factory" ); 
     30                enqueuersCount = config.getAsInt( "task.enqueuers", 1 ); 
    3031 
    31         this.queueFactory = ( IBoundedQueueFactory ) clazz.getField( "FACTORY" ).get( null ); 
     32                final Class<IBoundedQueueFactory> clazz = config.getAsClass( "task.queue-factory" ); 
    3233 
    33         this.queue = queueFactory.create( bufferSize() ); 
    34     } 
     34                this.queueFactory = ( IBoundedQueueFactory ) clazz.getField( "FACTORY" ).get( null ); 
     35 
     36                this.queue = queueFactory.create( bufferSize() ); 
     37        } 
    3538 
    3639 
    37     @Override 
    38     protected BaseEnqueuer _initialize( final Executor threadPool, 
    39                                         final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
    40                                         final EventFactory<LongValueMessage> factory ) throws Exception { 
    41         return new Enqueuer(); 
    42     } 
     40        @Override 
     41        protected BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     42                                                      final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
     43                                                      final EventFactory<LongValueMessage> factory ) throws Exception { 
     44                final BaseEnqueuer[] enqueuers = new BaseEnqueuer[enqueuersCount]; 
     45                for( int i = 0; i < enqueuers.length; i++ ) { 
     46                        enqueuers[i] = new Enqueuer(); 
     47                } 
     48                return enqueuers; 
     49        } 
    4350 
    44     @Override 
    45     protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
    46         long sum = 0; 
    47         for ( int i = 0; i < eventsInBatch; i++ ) { 
    48             final LongValueMessage msg = queue.dequeue(); 
    49             sum += msg.value; 
    50         } 
    51         return sum; 
    52     } 
     51        @Override 
     52        protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
     53                long sum = 0; 
     54                for( int i = 0; i < eventsInBatch; i++ ) { 
     55                        final LongValueMessage msg = queue.dequeue(); 
     56                        sum += msg.value; 
     57                } 
     58                return sum; 
     59        } 
    5360 
    54     @Override 
    55     public int workersRequired() { 
    56         return 1; 
    57     } 
     61        @Override 
     62        public int workersRequired() { 
     63                return enqueuersCount; 
     64        } 
    5865 
    59     @Override 
    60     public String toString() { 
    61         return String.format( 
    62                 "%s[%s[%d]]", 
    63                 getClass().getSimpleName(), 
    64                 queueFactory, 
    65                 bufferSize() 
    66         ); 
    67     } 
     66        @Override 
     67        public String toString() { 
     68                return String.format( 
     69                                "%s[%s[%d]]", 
     70                                getClass().getSimpleName(), 
     71                                queueFactory, 
     72                                bufferSize() 
     73                ); 
     74        } 
    6875 
    69     private class Enqueuer extends BaseEnqueuer<LongValueMessage> { 
    70         private Enqueuer() { 
    71             super( eventsInBatch() ); 
    72         } 
     76        private class Enqueuer extends BaseEnqueuer<LongValueMessage> { 
     77                private Enqueuer() { 
     78                        super( eventsInBatch() ); 
     79                } 
    7380 
    74         @Override 
    75         protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
    76             final EventFactory<LongValueMessage> factory = eventFactory(); 
    77             for ( int i = 0; i < eventsInBatch; i++ ) { 
    78                 final LongValueMessage event = factory.newInstance(); 
    79                 event.value = i; 
    80                 queue.enqueue( event ); 
    81             } 
    82         } 
    83     } 
     81                @Override 
     82                protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
     83                        final EventFactory<LongValueMessage> factory = eventFactory(); 
     84                        for( int i = 0; i < eventsInBatch; i++ ) { 
     85                                final LongValueMessage event = factory.newInstance(); 
     86                                event.value = i; 
     87                                queue.enqueue( event ); 
     88                        } 
     89                } 
     90        } 
    8491} 
  • Tests/JAVA/test/src/main/java/test/threads/queue/unstressed/SequencerTask.java

    r498 r563  
    2020 */ 
    2121public class SequencerTask extends AbstractTask<LongValueMessage> { 
    22     private static final Log log = LogFactory.getLog( SequencerTask.class ); 
     22        private static final Log log = LogFactory.getLog( SequencerTask.class ); 
    2323 
    24     private final SESDSequencer sequencer; 
     24        private final SESDSequencer sequencer; 
    2525 
    26     public SequencerTask( final Config config ) throws Exception { 
    27         super( config ); 
     26        public SequencerTask( final Config config ) throws Exception { 
     27                super( config ); 
    2828 
    29         this.sequencer = new SESDSequencer( bufferSize() ); 
    30     } 
     29                this.sequencer = new SESDSequencer( bufferSize() ); 
     30        } 
    3131 
    3232 
    33     @Override 
    34     protected BaseEnqueuer _initialize( final Executor threadPool, 
    35                                         final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
    36                                         final EventFactory<LongValueMessage> factory ) throws Exception { 
    37         return new Enqueuer(); 
    38     } 
     33        @Override 
     34        protected BaseEnqueuer[] initializeEnqueuers( final Executor threadPool, 
     35                                                      final IUsefulWorkEmulator<LongValueMessage>[] emulators, 
     36                                                      final EventFactory<LongValueMessage> factory ) throws Exception { 
     37                return new BaseEnqueuer[] { new Enqueuer() }; 
     38        } 
    3939 
    40     @Override 
    41     protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
    42         for ( int i = 0; i < eventsInBatch; i++ ) { 
    43             sequencer.moveHead(); 
    44         } 
    45         return 0; 
    46     } 
     40        @Override 
     41        protected long dequeueBatchEvents( final int eventsInBatch ) throws Exception { 
     42                for( int i = 0; i < eventsInBatch; i++ ) { 
     43                        sequencer.moveHead(); 
     44                } 
     45                return 0; 
     46        } 
    4747 
    48     @Override 
    49     public int workersRequired() { 
    50         return 1; 
    51     } 
     48        @Override 
     49        public int workersRequired() { 
     50                return 1; 
     51        } 
    5252 
    53     @Override 
    54     public String toString() { 
    55         return String.format( 
    56                 "%s[SESDSequencer[%d]]", 
    57                 getClass().getSimpleName(), 
    58                 bufferSize() 
    59         ); 
    60     } 
     53        @Override 
     54        public String toString() { 
     55                return String.format( 
     56                                "%s[SESDSequencer[%d]]", 
     57                                getClass().getSimpleName(), 
     58                                bufferSize() 
     59                ); 
     60        } 
    6161 
    62     private class Enqueuer extends BaseEnqueuer<LongValueMessage> { 
    63         private Enqueuer() { 
    64             super( eventsInBatch() ); 
    65         } 
     62        private class Enqueuer extends BaseEnqueuer<LongValueMessage> { 
     63                private Enqueuer() { 
     64                        super( eventsInBatch() ); 
     65                } 
    6666 
    67         @Override 
    68         protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
    69             for ( int i = 0; i < eventsInBatch; i++ ) { 
    70                 sequencer.moveTail(); 
    71             } 
    72         } 
    73     } 
     67                @Override 
     68                protected void enqueueEventsBatch( final int eventsInBatch ) throws Exception { 
     69                        for( int i = 0; i < eventsInBatch; i++ ) { 
     70                                sequencer.moveTail(); 
     71                        } 
     72                } 
     73        } 
    7474} 
  • Tests/JAVA/test/test.iml

    r560 r563  
    4545    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" /> 
    4646    <orderEntry type="library" name="Maven: high-scale-lib:high-scale-lib:UNKNOWN" level="project" /> 
     47    <orderEntry type="library" name="Maven: org.springframework:spring-core:3.0.5.RELEASE" level="project" /> 
     48    <orderEntry type="library" name="Maven: org.springframework:spring-asm:3.0.5.RELEASE" level="project" /> 
     49    <orderEntry type="library" name="Maven: org.springframework:spring-beans:3.0.5.RELEASE" level="project" /> 
    4750    <orderEntry type="library" name="Maven: net.jcip:jcip-annotations:1.0" level="project" /> 
    4851    <orderEntry type="library" name="Maven: com.googlecode.disruptor:disruptor:2.8" level="project" /> 
  • Tests/JAVA/test/test.ipr

    r560 r563  
    5555  </component> 
    5656  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8"> 
    57     <file url="file://$PROJECT_DIR$/src/main/java/com/lmax/disruptor/Sequence.java" charset="UTF-8" /> 
    5857    <file url="file://$PROJECT_DIR$/src/main/java/test/hflabs/AccounterTest.java" charset="UTF-8" /> 
    5958    <file url="file://$PROJECT_DIR$/src/main/java/test/hflabs/Alphabet.java" charset="UTF-8" /> 
     
    350349  </component> 
    351350  <component name="ProjectDictionaryState"> 
     351    <dictionary name="ruslan"> 
     352      <words> 
     353        <w>demultiplexor</w> 
     354        <w>enqueuers</w> 
     355      </words> 
     356    </dictionary> 
    352357    <dictionary name="cheremin"> 
    353358      <words> 
     
    916921      </SOURCES> 
    917922    </library> 
     923    <library name="Maven: org.springframework:spring-asm:3.0.5.RELEASE"> 
     924      <CLASSES> 
     925        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-asm/3.0.5.RELEASE/spring-asm-3.0.5.RELEASE.jar!/" /> 
     926      </CLASSES> 
     927      <JAVADOC> 
     928        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-asm/3.0.5.RELEASE/spring-asm-3.0.5.RELEASE-javadoc.jar!/" /> 
     929      </JAVADOC> 
     930      <SOURCES> 
     931        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-asm/3.0.5.RELEASE/spring-asm-3.0.5.RELEASE-sources.jar!/" /> 
     932      </SOURCES> 
     933    </library> 
     934    <library name="Maven: org.springframework:spring-beans:3.0.5.RELEASE"> 
     935      <CLASSES> 
     936        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/3.0.5.RELEASE/spring-beans-3.0.5.RELEASE.jar!/" /> 
     937      </CLASSES> 
     938      <JAVADOC> 
     939        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/3.0.5.RELEASE/spring-beans-3.0.5.RELEASE-javadoc.jar!/" /> 
     940      </JAVADOC> 
     941      <SOURCES> 
     942        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-beans/3.0.5.RELEASE/spring-beans-3.0.5.RELEASE-sources.jar!/" /> 
     943      </SOURCES> 
     944    </library> 
     945    <library name="Maven: org.springframework:spring-core:3.0.5.RELEASE"> 
     946      <CLASSES> 
     947        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar!/" /> 
     948      </CLASSES> 
     949      <JAVADOC> 
     950        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE-javadoc.jar!/" /> 
     951      </JAVADOC> 
     952      <SOURCES> 
     953        <root url="jar://$MAVEN_REPOSITORY$/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE-sources.jar!/" /> 
     954      </SOURCES> 
     955    </library> 
    918956  </component> 
    919957</project> 
  • Tests/JAVA/test/test.iws

    r560 r563  
    4141  <component name="ChangeListManager"> 
    4242    <list default="true" readonly="true" id="9bc4d4f6-7262-400a-a261-e6cab84fc5a6" name="Default" comment=""> 
    43       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java" afterPath="$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java" /> 
    44       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/ivan/Main.java" afterPath="$PROJECT_DIR$/src/main/java/test/ivan/Main.java" /> 
    45       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/ivan/PacketEntry.java" afterPath="$PROJECT_DIR$/src/main/java/test/ivan/PacketEntry.java" /> 
    46       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/AbstractSESDSequencer.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/AbstractSESDSequencer.java" /> 
     43      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor" /> 
     44      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler" /> 
     45      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/impl" /> 
     46      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource" /> 
     47      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics" /> 
     48      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/demultiplexor" /> 
     49      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/metrics/profiler" /> 
     50      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/metrics/timesource/impl" /> 
     51      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/metrics/timesource" /> 
     52      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/metrics" /> 
     53      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/UnsafeAtomicIntegerFieldUpdater.java" /> 
     54      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/UnsafeAtomicLongFieldUpdater.java" /> 
     55      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/UnsafeUtils.java" /> 
     56      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkResult.java" /> 
     57      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkingThread.java" /> 
     58      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/CommittableEntry.java" /> 
     59      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexingBuffer.java" /> 
     60      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/Demultiplexor.java" /> 
     61      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBenchmark.java" /> 
     62      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBufferAdapter.java" /> 
     63      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorDisruptor.java" /> 
     64      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/LatencyControlPoints.java" /> 
     65      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/Profiler.java" /> 
     66      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/ProfilerImpl.java" /> 
     67      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/ProfilerMock.java" /> 
     68      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/ProfilerSpringBean.java" /> 
     69      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/RecordImpl.java" /> 
     70      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/SimpleLatencyReporter.java" /> 
     71      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/TimingRecordsBuffer.java" /> 
     72      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/ITimestampSource.java" /> 
     73      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/impl/JDKCombinedTimestampSource.java" /> 
     74      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/impl/OffsetUtils.java" /> 
     75      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/impl/OffsetUtilsTest.java" /> 
     76      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/impl/SynchronousJDKOffsetCalculator.java" /> 
     77      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/demultiplexor/DemultiplexingBufferTest.java" /> 
     78      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/metrics/profiler/TimingRecordsBufferTest.java" /> 
     79      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/test/threads/metrics/timesource/TimestampSourceMock.java" /> 
     80      <change type="DELETED" beforePath="$PROJECT_DIR$/src/main/java/com/lmax/disruptor/Sequence.java" afterPath="" /> 
     81      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/pom.xml" afterPath="$PROJECT_DIR$/pom.xml" /> 
     82      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/ABQxNTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/ABQxNTask.java" /> 
     83      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/AbstractTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/AbstractTask.java" /> 
     84      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/DxNTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/DxNTask.java" /> 
     85      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/ITask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/ITask.java" /> 
     86      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/SingleThreadedTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/stressed/SingleThreadedTask.java" /> 
     87      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/DisruptorTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/DisruptorTask.java" /> 
     88      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/LongQueueTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/LongQueueTask.java" /> 
     89      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/QueueTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/QueueTask.java" /> 
     90      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/SequencerTask.java" afterPath="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/SequencerTask.java" /> 
    4791      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test.iml" afterPath="$PROJECT_DIR$/test.iml" /> 
    4892      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test.ipr" afterPath="$PROJECT_DIR$/test.ipr" /> 
     
    81125        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
    82126        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
    83         <option name="CONDITION" value="" /> 
    84         <option name="LOG_MESSAGE" value="" /> 
     127        <option name="CONDITION" value="&#13;&#13;JAVA" /> 
     128        <option name="LOG_MESSAGE" value="&#13;&#13;JAVA" /> 
    85129      </breakpoint> 
    86130      <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/threads/FalseSharingExample.java" line="112" class="test.threads.FalseSharingExample.WriterThread" package="test.threads"> 
     
    110154        <option name="LOG_MESSAGE" value="" /> 
    111155      </breakpoint> 
    112       <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java" line="123" class="test.ivan.FileParser" package="test.ivan"> 
    113         <option name="ENABLED" value="true" /> 
    114         <option name="LOG_ENABLED" value="false" /> 
    115         <option name="LOG_EXPRESSION_ENABLED" value="false" /> 
    116         <option name="SUSPEND_POLICY" value="SuspendAll" /> 
    117         <option name="COUNT_FILTER_ENABLED" value="false" /> 
    118         <option name="COUNT_FILTER" value="0" /> 
    119         <option name="CONDITION_ENABLED" value="false" /> 
    120         <option name="CLASS_FILTERS_ENABLED" value="false" /> 
    121         <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
    122         <option name="CONDITION" value="" /> 
    123         <option name="LOG_MESSAGE" value="" /> 
    124       </breakpoint> 
    125156      <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java" line="111" class="test.ivan.FileParser" package="test.ivan"> 
    126157        <option name="ENABLED" value="true" /> 
     
    136167        <option name="LOG_MESSAGE" value="" /> 
    137168      </breakpoint> 
     169      <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java" line="134" class="test.ivan.FileParser" package="test.ivan"> 
     170        <option name="ENABLED" value="true" /> 
     171        <option name="LOG_ENABLED" value="false" /> 
     172        <option name="LOG_EXPRESSION_ENABLED" value="false" /> 
     173        <option name="SUSPEND_POLICY" value="SuspendAll" /> 
     174        <option name="COUNT_FILTER_ENABLED" value="false" /> 
     175        <option name="COUNT_FILTER" value="0" /> 
     176        <option name="CONDITION_ENABLED" value="false" /> 
     177        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
     178        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
     179        <option name="CONDITION" value="" /> 
     180        <option name="LOG_MESSAGE" value="" /> 
     181      </breakpoint> 
     182      <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java" line="121" class="test.ivan.FileParser" package="test.ivan"> 
     183        <option name="ENABLED" value="true" /> 
     184        <option name="LOG_ENABLED" value="false" /> 
     185        <option name="LOG_EXPRESSION_ENABLED" value="false" /> 
     186        <option name="SUSPEND_POLICY" value="SuspendAll" /> 
     187        <option name="COUNT_FILTER_ENABLED" value="false" /> 
     188        <option name="COUNT_FILTER" value="0" /> 
     189        <option name="CONDITION_ENABLED" value="false" /> 
     190        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
     191        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
     192        <option name="CONDITION" value="" /> 
     193        <option name="LOG_MESSAGE" value="" /> 
     194      </breakpoint> 
     195      <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/ivan/Main.java" line="128" class="test.ivan.Main.PacketEntryProcessor" package="test.ivan"> 
     196        <option name="ENABLED" value="true" /> 
     197        <option name="LOG_ENABLED" value="false" /> 
     198        <option name="LOG_EXPRESSION_ENABLED" value="false" /> 
     199        <option name="SUSPEND_POLICY" value="SuspendAll" /> 
     200        <option name="COUNT_FILTER_ENABLED" value="false" /> 
     201        <option name="COUNT_FILTER" value="0" /> 
     202        <option name="CONDITION_ENABLED" value="false" /> 
     203        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
     204        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
     205        <option name="CONDITION" value="" /> 
     206        <option name="LOG_MESSAGE" value="" /> 
     207      </breakpoint> 
     208      <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/CLQWrapperQueue.java" line="20" class="test.threads.queue.unstressed.impl.CLQWrapperQueue" package="test.threads.queue.unstressed.impl"> 
     209        <option name="ENABLED" value="true" /> 
     210        <option name="LOG_ENABLED" value="false" /> 
     211        <option name="LOG_EXPRESSION_ENABLED" value="false" /> 
     212        <option name="SUSPEND_POLICY" value="SuspendAll" /> 
     213        <option name="COUNT_FILTER_ENABLED" value="false" /> 
     214        <option name="COUNT_FILTER" value="0" /> 
     215        <option name="CONDITION_ENABLED" value="false" /> 
     216        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
     217        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
     218        <option name="CONDITION" value="" /> 
     219        <option name="LOG_MESSAGE" value="" /> 
     220      </breakpoint> 
     221      <breakpoint url="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/CABSESDMaskedUnrolledQueue.java" line="124" class="test.threads.queue.unstressed.impl.CABSESDMaskedUnrolledQueue" package="test.threads.queue.unstressed.impl"> 
     222        <option name="ENABLED" value="true" /> 
     223        <option name="LOG_ENABLED" value="false" /> 
     224        <option name="LOG_EXPRESSION_ENABLED" value="false" /> 
     225        <option name="SUSPEND_POLICY" value="SuspendAll" /> 
     226        <option name="COUNT_FILTER_ENABLED" value="false" /> 
     227        <option name="COUNT_FILTER" value="0" /> 
     228        <option name="CONDITION_ENABLED" value="false" /> 
     229        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
     230        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
     231        <option name="CONDITION" value="" /> 
     232        <option name="LOG_MESSAGE" value="" /> 
     233      </breakpoint> 
    138234    </line_breakpoints> 
     235    <exception_breakpoints> 
     236      <breakpoint class_name="java.lang.NullPointerException" package_name="java.lang"> 
     237        <option name="NOTIFY_CAUGHT" value="true" /> 
     238        <option name="NOTIFY_UNCAUGHT" value="true" /> 
     239        <option name="ENABLED" value="true" /> 
     240        <option name="LOG_ENABLED" value="false" /> 
     241        <option name="LOG_EXPRESSION_ENABLED" value="false" /> 
     242        <option name="SUSPEND_POLICY" value="SuspendAll" /> 
     243        <option name="COUNT_FILTER_ENABLED" value="false" /> 
     244        <option name="COUNT_FILTER" value="0" /> 
     245        <option name="CONDITION_ENABLED" value="false" /> 
     246        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
     247        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
     248        <option name="CONDITION" value="&#13;&#13;JAVA" /> 
     249        <option name="LOG_MESSAGE" value="&#13;&#13;JAVA" /> 
     250      </breakpoint> 
     251    </exception_breakpoints> 
    139252    <breakpoint_any> 
    140253      <breakpoint> 
     
    150263        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
    151264        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
    152         <option name="CONDITION" value="" /> 
    153         <option name="LOG_MESSAGE" value="" /> 
     265        <option name="CONDITION" value="&#13;&#13;JAVA" /> 
     266        <option name="LOG_MESSAGE" value="&#13;&#13;JAVA" /> 
    154267      </breakpoint> 
    155268      <breakpoint> 
     
    165278        <option name="CLASS_FILTERS_ENABLED" value="false" /> 
    166279        <option name="INSTANCE_FILTERS_ENABLED" value="false" /> 
    167         <option name="CONDITION" value="" /> 
    168         <option name="LOG_MESSAGE" value="" /> 
     280        <option name="CONDITION" value="&#13;&#13;JAVA" /> 
     281        <option name="LOG_MESSAGE" value="&#13;&#13;JAVA" /> 
    169282      </breakpoint> 
    170283    </breakpoint_any> 
     
    194307  <component name="FileEditorManager"> 
    195308    <leaf> 
    196       <file leaf-file-name="Main.java" pinned="false" current="true" current-in-tab="true"> 
    197         <entry file="file://$PROJECT_DIR$/src/main/java/test/ivan/Main.java"> 
     309      <file leaf-file-name="DemultiplexorBufferAdapter.java" pinned="false" current="false" current-in-tab="false"> 
     310        <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBufferAdapter.java"> 
    198311          <provider selected="true" editor-type-id="text-editor"> 
    199             <state line="158" column="43" selection-start="4649" selection-end="4649" vertical-scroll-proportion="0.5305292"> 
     312            <state line="78" column="0" selection-start="2576" selection-end="2576" vertical-scroll-proportion="0.0"> 
    200313              <folding> 
    201                 <element signature="e#3413#3424#0" expanded="true" /> 
     314                <element signature="imports" expanded="true" /> 
    202315              </folding> 
    203316            </state> 
     
    205318        </entry> 
    206319      </file> 
    207       <file leaf-file-name="FileParser.java" pinned="false" current="false" current-in-tab="false"> 
    208         <entry file="file://$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java"> 
     320      <file leaf-file-name="DemultiplexorBenchmark.java" pinned="false" current="false" current-in-tab="false"> 
     321        <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBenchmark.java"> 
    209322          <provider selected="true" editor-type-id="text-editor"> 
    210             <state line="147" column="27" selection-start="4461" selection-end="4461" vertical-scroll-proportion="0.0"> 
     323            <state line="79" column="67" selection-start="2264" selection-end="2264" vertical-scroll-proportion="0.0"> 
    211324              <folding> 
    212                 <element signature="imports" expanded="false" /> 
    213                 <element signature="docComment;class#FileParser#0" expanded="false" /> 
    214                 <element signature="method#forEachEntry#0;class#FileParser#0" expanded="false" /> 
    215                 <element signature="e#946#980#0" expanded="false" /> 
    216                 <element signature="method#readUnsignedInt#0;class#FileParser#0" expanded="false" /> 
    217                 <element signature="method#readUnsignedShort#0;class#FileParser#0" expanded="false" /> 
    218                 <element signature="method#packUnsignedShort#0;class#FileParser#0" expanded="false" /> 
    219                 <element signature="method#toHexString#0;class#FileParser#0" expanded="false" /> 
     325                <element signature="imports" expanded="true" /> 
     326                <element signature="e#2267#2274#0" expanded="true" /> 
     327                <element signature="e#2452#2779#0" expanded="true" /> 
     328                <element signature="e#2772#2773#0" expanded="true" /> 
     329                <element signature="class#Entry#0;class#DemultiplexorBenchmark#0" expanded="false" /> 
     330                <element signature="e#3874#3979#0" expanded="true" /> 
     331                <element signature="e#3890#3897#0" expanded="true" /> 
     332                <element signature="e#3974#3975#0" expanded="true" /> 
    220333              </folding> 
    221334            </state> 
     
    223336        </entry> 
    224337      </file> 
    225       <file leaf-file-name="PacketEntry.java" pinned="false" current="false" current-in-tab="false"> 
    226         <entry file="file://$PROJECT_DIR$/src/main/java/test/ivan/PacketEntry.java"> 
     338      <file leaf-file-name="DemultiplexorDisruptor.java" pinned="false" current="true" current-in-tab="true"> 
     339        <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorDisruptor.java"> 
    227340          <provider selected="true" editor-type-id="text-editor"> 
    228             <state line="30" column="16" selection-start="584" selection-end="584" vertical-scroll-proportion="0.0"> 
     341            <state line="18" column="28" selection-start="627" selection-end="627" vertical-scroll-proportion="0.5651163"> 
     342              <folding /> 
     343            </state> 
     344          </provider> 
     345        </entry> 
     346      </file> 
     347      <file leaf-file-name="BenchmarkingThread.java" pinned="false" current="false" current-in-tab="false"> 
     348        <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkingThread.java"> 
     349          <provider selected="true" editor-type-id="text-editor"> 
     350            <state line="37" column="0" selection-start="728" selection-end="728" vertical-scroll-proportion="0.0"> 
     351              <folding> 
     352                <element signature="docComment;class#BenchmarkingThread#0" expanded="false" /> 
     353                <element signature="class#State#0;class#BenchmarkingThread#0" expanded="false" /> 
     354                <element signature="method#BenchmarkingThread#0;class#BenchmarkingThread#0" expanded="false" /> 
     355                <element signature="e#505#522#0" expanded="true" /> 
     356                <element signature="method#startMeasuring#0;class#BenchmarkingThread#0" expanded="false" /> 
     357                <element signature="method#stopMeasuring#0;class#BenchmarkingThread#0" expanded="false" /> 
     358              </folding> 
     359            </state> 
     360          </provider> 
     361        </entry> 
     362      </file> 
     363      <file leaf-file-name="BenchmarkResult.java" pinned="false" current="false" current-in-tab="false"> 
     364        <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkResult.java"> 
     365          <provider selected="true" editor-type-id="text-editor"> 
     366            <state line="7" column="35" selection-start="163" selection-end="163" vertical-scroll-proportion="0.0"> 
    229367              <folding /> 
    230368            </state> 
     
    245383    <option name="changedFiles"> 
    246384      <list> 
    247         <option value="$PROJECT_DIR$/src/main/java/test/threads/UnsafePublishing.java" /> 
    248         <option value="$PROJECT_DIR$/src/main/java/test/threads/cache/Currency.java" /> 
    249         <option value="$PROJECT_DIR$/src/main/java/test/threads/cache/FastCache.java" /> 
    250         <option value="$PROJECT_DIR$/src/main/java/test/threads/cache/Entity.java" /> 
    251         <option value="$PROJECT_DIR$/src/main/java/test/threads/cache/FastEntityCache.java" /> 
    252         <option value="$PROJECT_DIR$/src/main/java/test/examples/Mapping.java" /> 
    253         <option value="$PROJECT_DIR$/src/main/java/test/examples/MappingBuilder.java" /> 
    254         <option value="$PROJECT_DIR$/src/main/java/test/examples/SmartMappingBuilder.java" /> 
    255         <option value="$PROJECT_DIR$/unstressed_task_benchmark_statistics.sh" /> 
    256         <option value="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/CABSESDUnrolledQueue.java" /> 
    257         <option value="$PROJECT_DIR$/src/main/java/test/threads/FalseSharingExample.java" /> 
    258         <option value="$PROJECT_DIR$/config.properties" /> 
    259         <option value="$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/AbstractSESDSequencer.java" /> 
    260         <option value="$PROJECT_DIR$/src/main/java/test/ivan/PacketEntry.java" /> 
    261         <option value="$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java" /> 
    262         <option value="$PROJECT_DIR$/src/main/java/test/ivan/Main.java" /> 
     385        <option value="$PROJECT_DIR$/src/test/java/test/threads/metrics/profiler/TimingRecordsBufferTest.java" /> 
     386        <option value="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/impl/OffsetUtils.java" /> 
     387        <option value="$PROJECT_DIR$/src/test/java/test/threads/metrics/timesource/impl/PreciseSynchronousOffsetCalculatorTest.java" /> 
     388        <option value="$PROJECT_DIR$/src/main/java/test/threads/metrics/timesource/impl/OffsetUtilsTest.java" /> 
     389        <option value="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler/TimingRecordsBuffer.java" /> 
     390        <option value="$PROJECT_DIR$/src/test/java/test/threads/demultiplexor/DemultiplexingBufferTest.java" /> 
     391        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexingBuffer.java" /> 
     392        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/Demultiplexor.java" /> 
     393        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/CommitableEntry.java" /> 
     394        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/CommittableEntry.java" /> 
     395        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkingThread.java" /> 
     396        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkingResult.java" /> 
     397        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkResult.java" /> 
     398        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBufferAdapter.java" /> 
     399        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBenchmark.java" /> 
     400        <option value="$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorDisruptor.java" /> 
    263401      </list> 
    264402    </option> 
     
    279417  </component> 
    280418  <component name="ProjectFrameBounds"> 
    281     <option name="y" value="22" /> 
    282419    <option name="width" value="1440" /> 
    283     <option name="height" value="874" /> 
     420    <option name="height" value="900" /> 
    284421  </component> 
    285422  <component name="ProjectLevelVcsManager" settingsEditedManually="false"> 
     
    319456              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
    320457            </PATH_ELEMENT> 
     458            <PATH_ELEMENT> 
     459              <option name="myItemId" value="External Libraries" /> 
     460              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> 
     461            </PATH_ELEMENT> 
    321462          </PATH> 
    322463          <PATH> 
     
    326467            </PATH_ELEMENT> 
    327468            <PATH_ELEMENT> 
    328               <option name="myItemId" value="test" /> 
    329               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     469              <option name="myItemId" value="External Libraries" /> 
     470              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> 
     471            </PATH_ELEMENT> 
     472            <PATH_ELEMENT> 
     473              <option name="myItemId" value="&lt; 1.6 &gt;" /> 
     474              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> 
    330475            </PATH_ELEMENT> 
    331476          </PATH> 
     
    336481            </PATH_ELEMENT> 
    337482            <PATH_ELEMENT> 
    338               <option name="myItemId" value="test" /> 
    339               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    340             </PATH_ELEMENT> 
    341             <PATH_ELEMENT> 
    342               <option name="myItemId" value="src" /> 
    343               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    344             </PATH_ELEMENT> 
    345             <PATH_ELEMENT> 
    346               <option name="myItemId" value="test" /> 
     483              <option name="myItemId" value="External Libraries" /> 
     484              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> 
     485            </PATH_ELEMENT> 
     486            <PATH_ELEMENT> 
     487              <option name="myItemId" value="&lt; 1.6 &gt;" /> 
     488              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> 
     489            </PATH_ELEMENT> 
     490            <PATH_ELEMENT> 
     491              <option name="myItemId" value="classes.jar" /> 
    347492              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    348493            </PATH_ELEMENT> 
     
    354499            </PATH_ELEMENT> 
    355500            <PATH_ELEMENT> 
    356               <option name="myItemId" value="test" /> 
    357               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    358             </PATH_ELEMENT> 
    359             <PATH_ELEMENT> 
    360               <option name="myItemId" value="src" /> 
    361               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    362             </PATH_ELEMENT> 
    363             <PATH_ELEMENT> 
    364               <option name="myItemId" value="main" /> 
    365               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    366             </PATH_ELEMENT> 
    367             <PATH_ELEMENT> 
    368               <option name="myItemId" value="resources" /> 
     501              <option name="myItemId" value="External Libraries" /> 
     502              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> 
     503            </PATH_ELEMENT> 
     504            <PATH_ELEMENT> 
     505              <option name="myItemId" value="&lt; 1.6 &gt;" /> 
     506              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> 
     507            </PATH_ELEMENT> 
     508            <PATH_ELEMENT> 
     509              <option name="myItemId" value="classes.jar" /> 
     510              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     511            </PATH_ELEMENT> 
     512            <PATH_ELEMENT> 
     513              <option name="myItemId" value="java" /> 
     514              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     515            </PATH_ELEMENT> 
     516            <PATH_ELEMENT> 
     517              <option name="myItemId" value="util" /> 
    369518              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    370519            </PATH_ELEMENT> 
     
    376525            </PATH_ELEMENT> 
    377526            <PATH_ELEMENT> 
    378               <option name="myItemId" value="test" /> 
    379               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    380             </PATH_ELEMENT> 
    381             <PATH_ELEMENT> 
    382               <option name="myItemId" value="src" /> 
    383               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    384             </PATH_ELEMENT> 
    385             <PATH_ELEMENT> 
    386               <option name="myItemId" value="main" /> 
     527              <option name="myItemId" value="External Libraries" /> 
     528              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> 
     529            </PATH_ELEMENT> 
     530            <PATH_ELEMENT> 
     531              <option name="myItemId" value="&lt; 1.6 &gt;" /> 
     532              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> 
     533            </PATH_ELEMENT> 
     534            <PATH_ELEMENT> 
     535              <option name="myItemId" value="classes.jar" /> 
    387536              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    388537            </PATH_ELEMENT> 
     
    392541            </PATH_ELEMENT> 
    393542            <PATH_ELEMENT> 
    394               <option name="myItemId" value="test" /> 
     543              <option name="myItemId" value="util" /> 
     544              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     545            </PATH_ELEMENT> 
     546            <PATH_ELEMENT> 
     547              <option name="myItemId" value="concurrent" /> 
    395548              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    396549            </PATH_ELEMENT> 
     
    402555            </PATH_ELEMENT> 
    403556            <PATH_ELEMENT> 
     557              <option name="myItemId" value="External Libraries" /> 
     558              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> 
     559            </PATH_ELEMENT> 
     560            <PATH_ELEMENT> 
     561              <option name="myItemId" value="&lt; 1.6 &gt;" /> 
     562              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> 
     563            </PATH_ELEMENT> 
     564            <PATH_ELEMENT> 
     565              <option name="myItemId" value="classes.jar" /> 
     566              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     567            </PATH_ELEMENT> 
     568            <PATH_ELEMENT> 
     569              <option name="myItemId" value="java" /> 
     570              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     571            </PATH_ELEMENT> 
     572            <PATH_ELEMENT> 
     573              <option name="myItemId" value="util" /> 
     574              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     575            </PATH_ELEMENT> 
     576            <PATH_ELEMENT> 
     577              <option name="myItemId" value="concurrent" /> 
     578              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     579            </PATH_ELEMENT> 
     580            <PATH_ELEMENT> 
     581              <option name="myItemId" value="atomic" /> 
     582              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     583            </PATH_ELEMENT> 
     584          </PATH> 
     585          <PATH> 
     586            <PATH_ELEMENT> 
     587              <option name="myItemId" value="test" /> 
     588              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     589            </PATH_ELEMENT> 
     590            <PATH_ELEMENT> 
     591              <option name="myItemId" value="External Libraries" /> 
     592              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" /> 
     593            </PATH_ELEMENT> 
     594            <PATH_ELEMENT> 
     595              <option name="myItemId" value="&lt; 1.6 &gt;" /> 
     596              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> 
     597            </PATH_ELEMENT> 
     598            <PATH_ELEMENT> 
     599              <option name="myItemId" value="classes.jar" /> 
     600              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     601            </PATH_ELEMENT> 
     602            <PATH_ELEMENT> 
     603              <option name="myItemId" value="java" /> 
     604              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     605            </PATH_ELEMENT> 
     606          </PATH> 
     607          <PATH> 
     608            <PATH_ELEMENT> 
     609              <option name="myItemId" value="test" /> 
     610              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     611            </PATH_ELEMENT> 
     612            <PATH_ELEMENT> 
     613              <option name="myItemId" value="test" /> 
     614              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     615            </PATH_ELEMENT> 
     616          </PATH> 
     617          <PATH> 
     618            <PATH_ELEMENT> 
     619              <option name="myItemId" value="test" /> 
     620              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     621            </PATH_ELEMENT> 
     622            <PATH_ELEMENT> 
    404623              <option name="myItemId" value="test" /> 
    405624              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     
    409628              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    410629            </PATH_ELEMENT> 
     630          </PATH> 
     631          <PATH> 
     632            <PATH_ELEMENT> 
     633              <option name="myItemId" value="test" /> 
     634              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     635            </PATH_ELEMENT> 
     636            <PATH_ELEMENT> 
     637              <option name="myItemId" value="test" /> 
     638              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     639            </PATH_ELEMENT> 
     640            <PATH_ELEMENT> 
     641              <option name="myItemId" value="src" /> 
     642              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     643            </PATH_ELEMENT> 
    411644            <PATH_ELEMENT> 
    412645              <option name="myItemId" value="main" /> 
    413646              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    414647            </PATH_ELEMENT> 
     648          </PATH> 
     649          <PATH> 
     650            <PATH_ELEMENT> 
     651              <option name="myItemId" value="test" /> 
     652              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     653            </PATH_ELEMENT> 
     654            <PATH_ELEMENT> 
     655              <option name="myItemId" value="test" /> 
     656              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     657            </PATH_ELEMENT> 
     658            <PATH_ELEMENT> 
     659              <option name="myItemId" value="src" /> 
     660              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     661            </PATH_ELEMENT> 
     662            <PATH_ELEMENT> 
     663              <option name="myItemId" value="main" /> 
     664              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     665            </PATH_ELEMENT> 
    415666            <PATH_ELEMENT> 
    416667              <option name="myItemId" value="java" /> 
     
    421672              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    422673            </PATH_ELEMENT> 
    423             <PATH_ELEMENT> 
    424               <option name="myItemId" value="ivan" /> 
     674          </PATH> 
     675          <PATH> 
     676            <PATH_ELEMENT> 
     677              <option name="myItemId" value="test" /> 
     678              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     679            </PATH_ELEMENT> 
     680            <PATH_ELEMENT> 
     681              <option name="myItemId" value="test" /> 
     682              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     683            </PATH_ELEMENT> 
     684            <PATH_ELEMENT> 
     685              <option name="myItemId" value="src" /> 
     686              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     687            </PATH_ELEMENT> 
     688            <PATH_ELEMENT> 
     689              <option name="myItemId" value="main" /> 
     690              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     691            </PATH_ELEMENT> 
     692            <PATH_ELEMENT> 
     693              <option name="myItemId" value="java" /> 
     694              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     695            </PATH_ELEMENT> 
     696            <PATH_ELEMENT> 
     697              <option name="myItemId" value="test" /> 
     698              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     699            </PATH_ELEMENT> 
     700            <PATH_ELEMENT> 
     701              <option name="myItemId" value="threads" /> 
     702              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     703            </PATH_ELEMENT> 
     704          </PATH> 
     705          <PATH> 
     706            <PATH_ELEMENT> 
     707              <option name="myItemId" value="test" /> 
     708              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     709            </PATH_ELEMENT> 
     710            <PATH_ELEMENT> 
     711              <option name="myItemId" value="test" /> 
     712              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     713            </PATH_ELEMENT> 
     714            <PATH_ELEMENT> 
     715              <option name="myItemId" value="src" /> 
     716              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     717            </PATH_ELEMENT> 
     718            <PATH_ELEMENT> 
     719              <option name="myItemId" value="main" /> 
     720              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     721            </PATH_ELEMENT> 
     722            <PATH_ELEMENT> 
     723              <option name="myItemId" value="java" /> 
     724              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     725            </PATH_ELEMENT> 
     726            <PATH_ELEMENT> 
     727              <option name="myItemId" value="test" /> 
     728              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     729            </PATH_ELEMENT> 
     730            <PATH_ELEMENT> 
     731              <option name="myItemId" value="threads" /> 
     732              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     733            </PATH_ELEMENT> 
     734            <PATH_ELEMENT> 
     735              <option name="myItemId" value="queue" /> 
     736              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     737            </PATH_ELEMENT> 
     738            <PATH_ELEMENT> 
     739              <option name="myItemId" value="unstressed" /> 
     740              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     741            </PATH_ELEMENT> 
     742          </PATH> 
     743          <PATH> 
     744            <PATH_ELEMENT> 
     745              <option name="myItemId" value="test" /> 
     746              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     747            </PATH_ELEMENT> 
     748            <PATH_ELEMENT> 
     749              <option name="myItemId" value="test" /> 
     750              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     751            </PATH_ELEMENT> 
     752            <PATH_ELEMENT> 
     753              <option name="myItemId" value="src" /> 
     754              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     755            </PATH_ELEMENT> 
     756            <PATH_ELEMENT> 
     757              <option name="myItemId" value="main" /> 
     758              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     759            </PATH_ELEMENT> 
     760            <PATH_ELEMENT> 
     761              <option name="myItemId" value="java" /> 
     762              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     763            </PATH_ELEMENT> 
     764            <PATH_ELEMENT> 
     765              <option name="myItemId" value="test" /> 
     766              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     767            </PATH_ELEMENT> 
     768            <PATH_ELEMENT> 
     769              <option name="myItemId" value="threads" /> 
     770              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     771            </PATH_ELEMENT> 
     772            <PATH_ELEMENT> 
     773              <option name="myItemId" value="queue" /> 
     774              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     775            </PATH_ELEMENT> 
     776            <PATH_ELEMENT> 
     777              <option name="myItemId" value="unstressed" /> 
     778              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     779            </PATH_ELEMENT> 
     780            <PATH_ELEMENT> 
     781              <option name="myItemId" value="impl" /> 
     782              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     783            </PATH_ELEMENT> 
     784          </PATH> 
     785          <PATH> 
     786            <PATH_ELEMENT> 
     787              <option name="myItemId" value="test" /> 
     788              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     789            </PATH_ELEMENT> 
     790            <PATH_ELEMENT> 
     791              <option name="myItemId" value="test" /> 
     792              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     793            </PATH_ELEMENT> 
     794            <PATH_ELEMENT> 
     795              <option name="myItemId" value="src" /> 
     796              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     797            </PATH_ELEMENT> 
     798            <PATH_ELEMENT> 
     799              <option name="myItemId" value="main" /> 
     800              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     801            </PATH_ELEMENT> 
     802            <PATH_ELEMENT> 
     803              <option name="myItemId" value="java" /> 
     804              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     805            </PATH_ELEMENT> 
     806            <PATH_ELEMENT> 
     807              <option name="myItemId" value="test" /> 
     808              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     809            </PATH_ELEMENT> 
     810            <PATH_ELEMENT> 
     811              <option name="myItemId" value="threads" /> 
     812              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     813            </PATH_ELEMENT> 
     814            <PATH_ELEMENT> 
     815              <option name="myItemId" value="queue" /> 
     816              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     817            </PATH_ELEMENT> 
     818            <PATH_ELEMENT> 
     819              <option name="myItemId" value="stressed" /> 
     820              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     821            </PATH_ELEMENT> 
     822          </PATH> 
     823          <PATH> 
     824            <PATH_ELEMENT> 
     825              <option name="myItemId" value="test" /> 
     826              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     827            </PATH_ELEMENT> 
     828            <PATH_ELEMENT> 
     829              <option name="myItemId" value="test" /> 
     830              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     831            </PATH_ELEMENT> 
     832            <PATH_ELEMENT> 
     833              <option name="myItemId" value="src" /> 
     834              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     835            </PATH_ELEMENT> 
     836            <PATH_ELEMENT> 
     837              <option name="myItemId" value="main" /> 
     838              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     839            </PATH_ELEMENT> 
     840            <PATH_ELEMENT> 
     841              <option name="myItemId" value="java" /> 
     842              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     843            </PATH_ELEMENT> 
     844            <PATH_ELEMENT> 
     845              <option name="myItemId" value="test" /> 
     846              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     847            </PATH_ELEMENT> 
     848            <PATH_ELEMENT> 
     849              <option name="myItemId" value="threads" /> 
     850              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     851            </PATH_ELEMENT> 
     852            <PATH_ELEMENT> 
     853              <option name="myItemId" value="queue" /> 
     854              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     855            </PATH_ELEMENT> 
     856            <PATH_ELEMENT> 
     857              <option name="myItemId" value="common" /> 
     858              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     859            </PATH_ELEMENT> 
     860          </PATH> 
     861          <PATH> 
     862            <PATH_ELEMENT> 
     863              <option name="myItemId" value="test" /> 
     864              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     865            </PATH_ELEMENT> 
     866            <PATH_ELEMENT> 
     867              <option name="myItemId" value="test" /> 
     868              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     869            </PATH_ELEMENT> 
     870            <PATH_ELEMENT> 
     871              <option name="myItemId" value="src" /> 
     872              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     873            </PATH_ELEMENT> 
     874            <PATH_ELEMENT> 
     875              <option name="myItemId" value="main" /> 
     876              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     877            </PATH_ELEMENT> 
     878            <PATH_ELEMENT> 
     879              <option name="myItemId" value="java" /> 
     880              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     881            </PATH_ELEMENT> 
     882            <PATH_ELEMENT> 
     883              <option name="myItemId" value="test" /> 
     884              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     885            </PATH_ELEMENT> 
     886            <PATH_ELEMENT> 
     887              <option name="myItemId" value="threads" /> 
     888              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     889            </PATH_ELEMENT> 
     890            <PATH_ELEMENT> 
     891              <option name="myItemId" value="demultiplexor" /> 
     892              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     893            </PATH_ELEMENT> 
     894          </PATH> 
     895          <PATH> 
     896            <PATH_ELEMENT> 
     897              <option name="myItemId" value="test" /> 
     898              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> 
     899            </PATH_ELEMENT> 
     900            <PATH_ELEMENT> 
     901              <option name="myItemId" value="test" /> 
     902              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     903            </PATH_ELEMENT> 
     904            <PATH_ELEMENT> 
     905              <option name="myItemId" value="src" /> 
     906              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     907            </PATH_ELEMENT> 
     908            <PATH_ELEMENT> 
     909              <option name="myItemId" value="main" /> 
     910              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     911            </PATH_ELEMENT> 
     912            <PATH_ELEMENT> 
     913              <option name="myItemId" value="java" /> 
     914              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     915            </PATH_ELEMENT> 
     916            <PATH_ELEMENT> 
     917              <option name="myItemId" value="test" /> 
     918              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     919            </PATH_ELEMENT> 
     920            <PATH_ELEMENT> 
     921              <option name="myItemId" value="threads" /> 
     922              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
     923            </PATH_ELEMENT> 
     924            <PATH_ELEMENT> 
     925              <option name="myItemId" value="benchmarking" /> 
    425926              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> 
    426927            </PATH_ELEMENT> 
     
    452953      <pane id="Scope"> 
    453954        <subPane subId="Problems" /> 
     955        <subPane subId="Project Files"> 
     956          <PATH> 
     957            <PATH_ELEMENT USER_OBJECT="Root"> 
     958              <option name="myItemId" value="" /> 
     959              <option name="myItemType" value="" /> 
     960            </PATH_ELEMENT> 
     961          </PATH> 
     962        </subPane> 
    454963      </pane> 
    455964      <pane id="PackagesPane" /> 
     
    475984    <property name="GoToClass.includeLibraries" value="false" /> 
    476985    <property name="options.splitter.details.proportions" value="0.2" /> 
     986    <property name="last_directory_selection" value="$PROJECT_DIR$/src/test/java/test/threads/metrics/timesource" /> 
    477987    <property name="GoToFile.includeJavaFiles" value="false" /> 
    478988    <property name="options.lastSelected" value="preferences.keymap" /> 
     
    486996  <component name="RecentsManager"> 
    487997    <key name="CopyClassDialog.RECENTS_KEY"> 
     998      <recent name="test.threads.queue.unstressed.impl" /> 
    488999      <recent name="test.examples" /> 
    4891000      <recent name="test.threads.cache" /> 
    4901001      <recent name="test.threads.queue.impl" /> 
    4911002      <recent name="test.threads.queue" /> 
    492       <recent name="com.lmax.disruptor" /> 
    4931003    </key> 
    4941004    <key name="CopyFile.RECENT_KEYS"> 
     
    5121022    </key> 
    5131023    <key name="CreateClassDialog.RecentsKey"> 
     1024      <recent name="test.threads.demultiplexor" /> 
    5141025      <recent name="test.threads.queue" /> 
    5151026      <recent name="test.threads.queue.impl" /> 
    5161027      <recent name="test.strings" /> 
    5171028      <recent name="codekata.two" /> 
    518       <recent name="test.threads.benchmarking" /> 
     1029    </key> 
     1030    <key name="MoveFile.RECENT_KEYS"> 
     1031      <recent name="$PROJECT_DIR$/src/main/java/test/threads/metrics/profiler" /> 
     1032      <recent name="$PROJECT_DIR$/src/main/java/test/threads/metrics" /> 
     1033      <recent name="$PROJECT_DIR$/src/main/java/test/threads" /> 
    5191034    </key> 
    5201035    <key name="MoveClassesOrPackagesDialog.RECENTS_KEY"> 
    521       <recent name="test.threads.queue.impl" /> 
    522       <recent name="test.helpers.ldap.fpd" /> 
    523       <recent name="test.helpers.ldap" /> 
    524       <recent name="test.sandbox.jetlang" /> 
    525       <recent name="test.sandbox.bufferedqueue" /> 
     1036      <recent name="test.threads.demultiplexor" /> 
     1037      <recent name="test.threads" /> 
     1038      <recent name="test.threads.metrics.profiler" /> 
     1039      <recent name="test.threads.metrics.timesource.impl" /> 
     1040      <recent name="test.threads.metrics.timesource" /> 
    5261041    </key> 
    5271042  </component> 
    528   <component name="RunManager" selected="Application.Main"> 
     1043  <component name="RunManager" selected="Application.DemultiplexorBenchmark"> 
    5291044    <configuration default="true" type="MavenRunConfiguration" factoryName="Maven"> 
    5301045      <MavenSettings> 
     
    5631078      </method> 
    5641079    </configuration> 
     1080    <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests"> 
     1081      <module name="" /> 
     1082      <option name="TESTING_TYPE" value="0" /> 
     1083      <option name="INSTRUMENTATION_RUNNER_CLASS" value="" /> 
     1084      <option name="METHOD_NAME" value="" /> 
     1085      <option name="CLASS_NAME" value="" /> 
     1086      <option name="PACKAGE_NAME" value="" /> 
     1087      <option name="TARGET_SELECTION_MODE" value="EMULATOR" /> 
     1088      <option name="PREFERRED_AVD" value="" /> 
     1089      <option name="COMMAND_LINE" value="" /> 
     1090      <option name="WIPE_USER_DATA" value="false" /> 
     1091      <option name="DISABLE_BOOT_ANIMATION" value="false" /> 
     1092      <option name="NETWORK_SPEED" value="full" /> 
     1093      <option name="NETWORK_LATENCY" value="none" /> 
     1094      <option name="CLEAR_LOGCAT" value="false" /> 
     1095      <method> 
     1096        <option name="AntTarget" enabled="false" /> 
     1097        <option name="BuildArtifacts" enabled="false" /> 
     1098        <option name="Make" enabled="true" /> 
     1099        <option name="Maven.BeforeRunTask" enabled="false" /> 
     1100      </method> 
     1101    </configuration> 
    5651102    <configuration default="true" type="Remote" factoryName="Remote"> 
    5661103      <option name="USE_SOCKET_TRANSPORT" value="true" /> 
     
    6081145        <option name="AntTarget" enabled="false" /> 
    6091146        <option name="BuildArtifacts" enabled="false" /> 
    610         <option name="Make" enabled="false" /> 
     1147        <option name="Make" enabled="true" /> 
    6111148        <option name="Maven.BeforeRunTask" enabled="false" /> 
    6121149      </method> 
     
    6371174      </method> 
    6381175    </configuration> 
     1176    <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application"> 
     1177      <module name="" /> 
     1178      <option name="ACTIVITY_CLASS" value="" /> 
     1179      <option name="MODE" value="default_activity" /> 
     1180      <option name="DEPLOY" value="true" /> 
     1181      <option name="TARGET_SELECTION_MODE" value="EMULATOR" /> 
     1182      <option name="PREFERRED_AVD" value="" /> 
     1183      <option name="COMMAND_LINE" value="" /> 
     1184      <option name="WIPE_USER_DATA" value="false" /> 
     1185      <option name="DISABLE_BOOT_ANIMATION" value="false" /> 
     1186      <option name="NETWORK_SPEED" value="full" /> 
     1187      <option name="NETWORK_LATENCY" value="none" /> 
     1188      <option name="CLEAR_LOGCAT" value="false" /> 
     1189      <method> 
     1190        <option name="AntTarget" enabled="false" /> 
     1191        <option name="BuildArtifacts" enabled="false" /> 
     1192        <option name="Make" enabled="true" /> 
     1193        <option name="Maven.BeforeRunTask" enabled="false" /> 
     1194      </method> 
     1195    </configuration> 
    6391196    <configuration default="false" name="UnsafePublishing" type="Application" factoryName="Application"> 
    6401197      <option name="MAIN_CLASS_NAME" value="test.threads.UnsafePublishing" /> 
     
    6511208      <RunnerSettings RunnerId="Run" /> 
    6521209      <ConfigurationWrapper RunnerId="Run" /> 
    653       <method /> 
     1210      <method> 
     1211        <option name="Make" enabled="false" /> 
     1212      </method> 
    6541213    </configuration> 
    6551214    <configuration default="false" name="LockExitPuzzle" type="Application" factoryName="Application"> 
     
    6671226      <RunnerSettings RunnerId="Run" /> 
    6681227      <ConfigurationWrapper RunnerId="Run" /> 
    669       <method /> 
     1228      <method> 
     1229        <option name="Make" enabled="false" /> 
     1230      </method> 
    6701231    </configuration> 
    6711232    <configuration default="false" name="OOMTest" type="Application" factoryName="Application"> 
     
    6831244      <RunnerSettings RunnerId="Run" /> 
    6841245      <ConfigurationWrapper RunnerId="Run" /> 
    685       <method /> 
    686     </configuration> 
    687     <configuration default="false" name="QueueBenchmark[ABQ]" type="Application" factoryName="Application"> 
    688       <option name="MAIN_CLASS_NAME" value="test.threads.queue.QueueBenchmark" /> 
    689       <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512" /> 
    690       <option name="PROGRAM_PARAMETERS" value="0 true" /> 
    691       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
    692       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
    693       <option name="ALTERNATIVE_JRE_PATH" value="" /> 
    694       <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
    695       <option name="ENV_VARIABLES" /> 
    696       <option name="PASS_PARENT_ENVS" value="true" /> 
    697       <module name="test" /> 
    698       <envs /> 
    699       <RunnerSettings RunnerId="Debug"> 
    700         <option name="DEBUG_PORT" value="62738" /> 
    701         <option name="TRANSPORT" value="0" /> 
    702         <option name="LOCAL" value="true" /> 
    703       </RunnerSettings> 
    704       <RunnerSettings RunnerId="Profile "> 
    705         <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
    706       </RunnerSettings> 
    707       <RunnerSettings RunnerId="Run" /> 
    708       <ConfigurationWrapper RunnerId="Debug" /> 
    709       <ConfigurationWrapper RunnerId="Run" /> 
    710       <method /> 
    711     </configuration> 
    712     <configuration default="false" name="QueueBenchmark[SESD]" type="Application" factoryName="Application"> 
    713       <option name="MAIN_CLASS_NAME" value="test.threads.queue.QueueBenchmark" /> 
    714       <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512 -XX:+AggressiveOpts" /> 
    715       <option name="PROGRAM_PARAMETERS" value="1 true" /> 
    716       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
    717       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
    718       <option name="ALTERNATIVE_JRE_PATH" value="" /> 
    719       <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
    720       <option name="ENV_VARIABLES" /> 
    721       <option name="PASS_PARENT_ENVS" value="true" /> 
    722       <module name="test" /> 
    723       <envs /> 
    724       <RunnerSettings RunnerId="Profile "> 
    725         <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
    726       </RunnerSettings> 
    727       <RunnerSettings RunnerId="Run" /> 
    728       <ConfigurationWrapper RunnerId="Run" /> 
    729       <method /> 
    730     </configuration> 
    731     <configuration default="false" name="QueueBenchmark[CABSESD]" type="Application" factoryName="Application"> 
    732       <option name="MAIN_CLASS_NAME" value="test.threads.queue.QueueBenchmark" /> 
    733       <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512" /> 
    734       <option name="PROGRAM_PARAMETERS" value="2 true" /> 
    735       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
    736       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
    737       <option name="ALTERNATIVE_JRE_PATH" value="" /> 
    738       <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
    739       <option name="ENV_VARIABLES" /> 
    740       <option name="PASS_PARENT_ENVS" value="true" /> 
    741       <module name="test" /> 
    742       <envs /> 
    743       <RunnerSettings RunnerId="Debug"> 
    744         <option name="DEBUG_PORT" value="58768" /> 
    745         <option name="TRANSPORT" value="0" /> 
    746         <option name="LOCAL" value="true" /> 
    747       </RunnerSettings> 
    748       <RunnerSettings RunnerId="Profile "> 
    749         <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
    750       </RunnerSettings> 
    751       <RunnerSettings RunnerId="Run" /> 
    752       <ConfigurationWrapper RunnerId="Debug" /> 
    753       <ConfigurationWrapper RunnerId="Run" /> 
    754       <method /> 
    755     </configuration> 
    756     <configuration default="false" name="QueueBenchmark[DisruptorNoBatch]" type="Application" factoryName="Application"> 
    757       <option name="MAIN_CLASS_NAME" value="test.threads.queue.QueueBenchmark" /> 
    758       <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512" /> 
    759       <option name="PROGRAM_PARAMETERS" value="5 false" /> 
    760       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
    761       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
    762       <option name="ALTERNATIVE_JRE_PATH" value="" /> 
    763       <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
    764       <option name="ENV_VARIABLES" /> 
    765       <option name="PASS_PARENT_ENVS" value="true" /> 
    766       <module name="test" /> 
    767       <envs /> 
    768       <RunnerSettings RunnerId="Profile "> 
    769         <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
    770       </RunnerSettings> 
    771       <RunnerSettings RunnerId="Run" /> 
    772       <ConfigurationWrapper RunnerId="Run" /> 
    773       <method /> 
    774     </configuration> 
    775     <configuration default="false" name="QueueBenchmark[DisruptorWithBatch]" type="Application" factoryName="Application"> 
    776       <option name="MAIN_CLASS_NAME" value="test.threads.queue.QueueBenchmark" /> 
    777       <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512" /> 
    778       <option name="PROGRAM_PARAMETERS" value="5 true" /> 
    779       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
    780       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
    781       <option name="ALTERNATIVE_JRE_PATH" value="" /> 
    782       <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
    783       <option name="ENV_VARIABLES" /> 
    784       <option name="PASS_PARENT_ENVS" value="true" /> 
    785       <module name="test" /> 
    786       <envs /> 
    787       <RunnerSettings RunnerId="Profile "> 
    788         <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
    789       </RunnerSettings> 
    790       <RunnerSettings RunnerId="Run" /> 
    791       <ConfigurationWrapper RunnerId="Run" /> 
    792       <method /> 
    793     </configuration> 
    794     <configuration default="false" name="QueueBenchmark[Sequencer]" type="Application" factoryName="Application"> 
    795       <option name="MAIN_CLASS_NAME" value="test.threads.queue.QueueBenchmark" /> 
    796       <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512 -XX:+PrintCompilation -XX:+PrintGC -XX:+PrintCommandLineFlags -XX:+DisableExplicitGC" /> 
    797       <option name="PROGRAM_PARAMETERS" value="6 180 2,6" /> 
    798       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
    799       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
    800       <option name="ALTERNATIVE_JRE_PATH" value="" /> 
    801       <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
    802       <option name="ENV_VARIABLES" /> 
    803       <option name="PASS_PARENT_ENVS" value="true" /> 
    804       <module name="test" /> 
    805       <envs /> 
    806       <RunnerSettings RunnerId="Profile "> 
    807         <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
    808       </RunnerSettings> 
    809       <RunnerSettings RunnerId="Run" /> 
    810       <ConfigurationWrapper RunnerId="Run" /> 
    811       <method /> 
    812     </configuration> 
    813     <configuration default="false" name="QueueBenchmark[LongCABSESD]" type="Application" factoryName="Application"> 
    814       <option name="MAIN_CLASS_NAME" value="test.threads.queue.QueueBenchmark" /> 
    815       <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512" /> 
    816       <option name="PROGRAM_PARAMETERS" value="7 false" /> 
    817       <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
    818       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
    819       <option name="ALTERNATIVE_JRE_PATH" value="" /> 
    820       <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
    821       <option name="ENV_VARIABLES" /> 
    822       <option name="PASS_PARENT_ENVS" value="true" /> 
    823       <module name="test" /> 
    824       <envs /> 
    825       <RunnerSettings RunnerId="Profile "> 
    826         <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
    827       </RunnerSettings> 
    828       <RunnerSettings RunnerId="Run" /> 
    829       <ConfigurationWrapper RunnerId="Run" /> 
    830       <method /> 
     1246      <method> 
     1247        <option name="Make" enabled="false" /> 
     1248      </method> 
    8311249    </configuration> 
    8321250    <configuration default="false" name="LogParser" type="Application" factoryName="Application"> 
     
    8531271      <ConfigurationWrapper RunnerId="Debug" /> 
    8541272      <ConfigurationWrapper RunnerId="Run" /> 
    855       <method /> 
     1273      <method> 
     1274        <option name="Make" enabled="false" /> 
     1275      </method> 
    8561276    </configuration> 
    8571277    <configuration default="false" name="FalseSharingExample" type="Application" factoryName="Application"> 
     
    8751295      <ConfigurationWrapper RunnerId="Debug" /> 
    8761296      <ConfigurationWrapper RunnerId="Run" /> 
    877       <method> 
    878         <option name="Make" enabled="true" /> 
    879       </method> 
     1297      <method /> 
    8801298    </configuration> 
    8811299    <configuration default="false" name="Main" type="Application" factoryName="Application"> 
     
    9011319      <method /> 
    9021320    </configuration> 
     1321    <configuration default="false" name="QueueBenchmark[SESD]" type="Application" factoryName="Application"> 
     1322      <option name="MAIN_CLASS_NAME" value="test.threads.queue.stressed.TaskBenchmark" /> 
     1323      <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512 -XX:+AggressiveOpts" /> 
     1324      <option name="PROGRAM_PARAMETERS" value="--task=test.threads.queue.unstressed.QueueTask --payload=none -Dtask.queue-factory=test.threads.queue.unstressed.impl.CABSESDMaskedUnrolledQueue" /> 
     1325      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
     1326      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
     1327      <option name="ALTERNATIVE_JRE_PATH" value="" /> 
     1328      <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
     1329      <option name="ENV_VARIABLES" /> 
     1330      <option name="PASS_PARENT_ENVS" value="true" /> 
     1331      <module name="test" /> 
     1332      <envs /> 
     1333      <RunnerSettings RunnerId="Debug"> 
     1334        <option name="DEBUG_PORT" value="62738" /> 
     1335        <option name="TRANSPORT" value="0" /> 
     1336        <option name="LOCAL" value="true" /> 
     1337      </RunnerSettings> 
     1338      <RunnerSettings RunnerId="Profile "> 
     1339        <option name="myExternalizedOptions" value="&#10;snapshots-dir=&#10;additional-options2=onexit\=snapshot&#10;" /> 
     1340      </RunnerSettings> 
     1341      <RunnerSettings RunnerId="Run" /> 
     1342      <ConfigurationWrapper RunnerId="Debug" /> 
     1343      <ConfigurationWrapper RunnerId="Run" /> 
     1344      <method /> 
     1345    </configuration> 
     1346    <configuration default="false" name="QueueBenchmark[CAQ]" type="Application" factoryName="Application"> 
     1347      <option name="MAIN_CLASS_NAME" value="test.threads.queue.stressed.TaskBenchmark" /> 
     1348      <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512 -XX:+AggressiveOpts" /> 
     1349      <option name="PROGRAM_PARAMETERS" value="--task=test.threads.queue.unstressed.QueueTask --payload=none -Dtask.queue-factory=test.threads.queue.unstressed.impl.CAQWrapperQueue" /> 
     1350      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
     1351      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
     1352      <option name="ALTERNATIVE_JRE_PATH" value="" /> 
     1353      <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
     1354      <option name="ENV_VARIABLES" /> 
     1355      <option name="PASS_PARENT_ENVS" value="true" /> 
     1356      <module name="test" /> 
     1357      <envs /> 
     1358      <RunnerSettings RunnerId="Run" /> 
     1359      <ConfigurationWrapper RunnerId="Run" /> 
     1360      <method /> 
     1361    </configuration> 
     1362    <configuration default="false" name="QueueBenchmark[CLQ]" type="Application" factoryName="Application"> 
     1363      <option name="MAIN_CLASS_NAME" value="test.threads.queue.stressed.TaskBenchmark" /> 
     1364      <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512 -XX:+AggressiveOpts" /> 
     1365      <option name="PROGRAM_PARAMETERS" value="--task=test.threads.queue.unstressed.QueueTask --payload=none -Dtask.queue-factory=test.threads.queue.unstressed.impl.CLQWrapperQueue" /> 
     1366      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
     1367      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
     1368      <option name="ALTERNATIVE_JRE_PATH" value="" /> 
     1369      <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
     1370      <option name="ENV_VARIABLES" /> 
     1371      <option name="PASS_PARENT_ENVS" value="true" /> 
     1372      <module name="test" /> 
     1373      <envs /> 
     1374      <RunnerSettings RunnerId="Debug"> 
     1375        <option name="DEBUG_PORT" value="" /> 
     1376        <option name="TRANSPORT" value="0" /> 
     1377        <option name="LOCAL" value="true" /> 
     1378      </RunnerSettings> 
     1379      <RunnerSettings RunnerId="Run" /> 
     1380      <ConfigurationWrapper RunnerId="Debug" /> 
     1381      <ConfigurationWrapper RunnerId="Run" /> 
     1382      <method /> 
     1383    </configuration> 
     1384    <configuration default="false" name="QueueBenchmark[ABQ]" type="Application" factoryName="Application"> 
     1385      <option name="MAIN_CLASS_NAME" value="test.threads.queue.stressed.TaskBenchmark" /> 
     1386      <option name="VM_PARAMETERS" value="-da -server -Xmx1024m -Xms512 -XX:+AggressiveOpts " /> 
     1387      <option name="PROGRAM_PARAMETERS" value="--task=test.threads.queue.unstressed.QueueTask --payload=none -Dtask.queue-factory=test.threads.queue.unstressed.impl.ABQWrapperQueue" /> 
     1388      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
     1389      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
     1390      <option name="ALTERNATIVE_JRE_PATH" value="" /> 
     1391      <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
     1392      <option name="ENV_VARIABLES" /> 
     1393      <option name="PASS_PARENT_ENVS" value="true" /> 
     1394      <module name="test" /> 
     1395      <envs /> 
     1396      <RunnerSettings RunnerId="Debug"> 
     1397        <option name="DEBUG_PORT" value="" /> 
     1398        <option name="TRANSPORT" value="0" /> 
     1399        <option name="LOCAL" value="true" /> 
     1400      </RunnerSettings> 
     1401      <RunnerSettings RunnerId="Run" /> 
     1402      <ConfigurationWrapper RunnerId="Debug" /> 
     1403      <ConfigurationWrapper RunnerId="Run" /> 
     1404      <method /> 
     1405    </configuration> 
     1406    <configuration default="false" name="DisruptorBenchmark" type="Application" factoryName="Application"> 
     1407      <option name="MAIN_CLASS_NAME" value="test.threads.queue.stressed.TaskBenchmark" /> 
     1408      <option name="VM_PARAMETERS" value="-da -server -Xmx512m -Xms512 -XX:+AggressiveOpts" /> 
     1409      <option name="PROGRAM_PARAMETERS" value="--task=test.threads.queue.unstressed.DisruptorTask --payload=none" /> 
     1410      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
     1411      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
     1412      <option name="ALTERNATIVE_JRE_PATH" value="" /> 
     1413      <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
     1414      <option name="ENV_VARIABLES" /> 
     1415      <option name="PASS_PARENT_ENVS" value="true" /> 
     1416      <module name="test" /> 
     1417      <envs /> 
     1418      <RunnerSettings RunnerId="Run" /> 
     1419      <ConfigurationWrapper RunnerId="Run" /> 
     1420      <method /> 
     1421    </configuration> 
     1422    <configuration default="false" name="DemultiplexorBenchmark" type="Application" factoryName="Application"> 
     1423      <option name="MAIN_CLASS_NAME" value="test.threads.demultiplexor.DemultiplexorBenchmark" /> 
     1424      <option name="VM_PARAMETERS" value="-ea -server -Xmx1g -DthreadsCount=3" /> 
     1425      <option name="PROGRAM_PARAMETERS" value="" /> 
     1426      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" /> 
     1427      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> 
     1428      <option name="ALTERNATIVE_JRE_PATH" value="" /> 
     1429      <option name="ENABLE_SWING_INSPECTOR" value="false" /> 
     1430      <option name="ENV_VARIABLES" /> 
     1431      <option name="PASS_PARENT_ENVS" value="true" /> 
     1432      <module name="test" /> 
     1433      <envs /> 
     1434      <RunnerSettings RunnerId="Debug"> 
     1435        <option name="DEBUG_PORT" value="" /> 
     1436        <option name="TRANSPORT" value="0" /> 
     1437        <option name="LOCAL" value="true" /> 
     1438      </RunnerSettings> 
     1439      <RunnerSettings RunnerId="Run" /> 
     1440      <ConfigurationWrapper RunnerId="Debug" /> 
     1441      <ConfigurationWrapper RunnerId="Run" /> 
     1442      <method /> 
     1443    </configuration> 
    9031444    <configuration default="false" name="CABSESDQueueTest" type="JUnit" factoryName="JUnit"> 
    9041445      <module name="test" /> 
     
    9891530      <method /> 
    9901531    </configuration> 
    991     <list size="17"> 
     1532    <list size="16"> 
    9921533      <item index="0" class="java.lang.String" itemvalue="Application.UnsafePublishing" /> 
    9931534      <item index="1" class="java.lang.String" itemvalue="Application.LockExitPuzzle" /> 
    9941535      <item index="2" class="java.lang.String" itemvalue="Application.OOMTest" /> 
    995       <item index="3" class="java.lang.String" itemvalue="Application.QueueBenchmark[ABQ]" /> 
    996       <item index="4" class="java.lang.String" itemvalue="Application.QueueBenchmark[SESD]" /> 
    997       <item index="5" class="java.lang.String" itemvalue="Application.QueueBenchmark[CABSESD]" /> 
    998       <item index="6" class="java.lang.String" itemvalue="Application.QueueBenchmark[DisruptorNoBatch]" /> 
    999       <item index="7" class="java.lang.String" itemvalue="Application.QueueBenchmark[DisruptorWithBatch]" /> 
    1000       <item index="8" class="java.lang.String" itemvalue="Application.QueueBenchmark[Sequencer]" /> 
    1001       <item index="9" class="java.lang.String" itemvalue="Application.QueueBenchmark[LongCABSESD]" /> 
    1002       <item index="10" class="java.lang.String" itemvalue="Application.LogParser" /> 
    1003       <item index="11" class="java.lang.String" itemvalue="Application.FalseSharingExample" /> 
    1004       <item index="12" class="java.lang.String" itemvalue="Application.Main" /> 
    1005       <item index="13" class="java.lang.String" itemvalue="JUnit.CABSESDQueueTest" /> 
    1006       <item index="14" class="java.lang.String" itemvalue="JUnit.test.threads.queue in test" /> 
    1007       <item index="15" class="java.lang.String" itemvalue="JUnit.test.threads.queue.impl in test" /> 
    1008       <item index="16" class="java.lang.String" itemvalue="JUnit.MultithreadedBitSetPerformanceTest.testScalePerformance" /> 
     1536      <item index="3" class="java.lang.String" itemvalue="Application.LogParser" /> 
     1537      <item index="4" class="java.lang.String" itemvalue="Application.FalseSharingExample" /> 
     1538      <item index="5" class="java.lang.String" itemvalue="Application.Main" /> 
     1539      <item index="6" class="java.lang.String" itemvalue="Application.QueueBenchmark[SESD]" /> 
     1540      <item index="7" class="java.lang.String" itemvalue="Application.QueueBenchmark[CAQ]" /> 
     1541      <item index="8" class="java.lang.String" itemvalue="Application.QueueBenchmark[CLQ]" /> 
     1542      <item index="9" class="java.lang.String" itemvalue="Application.QueueBenchmark[ABQ]" /> 
     1543      <item index="10" class="java.lang.String" itemvalue="Application.DisruptorBenchmark" /> 
     1544      <item index="11" class="java.lang.String" itemvalue="Application.DemultiplexorBenchmark" /> 
     1545      <item index="12" class="java.lang.String" itemvalue="JUnit.CABSESDQueueTest" /> 
     1546      <item index="13" class="java.lang.String" itemvalue="JUnit.test.threads.queue in test" /> 
     1547      <item index="14" class="java.lang.String" itemvalue="JUnit.test.threads.queue.impl in test" /> 
     1548      <item index="15" class="java.lang.String" itemvalue="JUnit.MultithreadedBitSetPerformanceTest.testScalePerformance" /> 
    10091549    </list> 
    10101550    <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false"> 
     
    10761616      <updated>1343476289105</updated> 
    10771617    </task> 
    1078     <option name="localTasksCounter" value="3" /> 
     1618    <task id="LOCAL-00003" summary="vania"> 
     1619      <created>1343934211109</created> 
     1620      <updated>1343934211109</updated> 
     1621    </task> 
     1622    <task id="LOCAL-00004" summary="vania"> 
     1623      <created>1343940770104</created> 
     1624      <updated>1343940770104</updated> 
     1625    </task> 
     1626    <task id="LOCAL-00005"> 
     1627      <created>1346821594108</created> 
     1628      <updated>1346821594108</updated> 
     1629    </task> 
     1630    <option name="localTasksCounter" value="6" /> 
    10791631    <servers /> 
    10801632  </component> 
     
    11001652  </component> 
    11011653  <component name="ToolWindowManager"> 
    1102     <frame x="0" y="22" width="1440" height="874" extended-state="0" /> 
     1654    <frame x="0" y="0" width="1440" height="900" extended-state="0" /> 
    11031655    <editor active="true" /> 
    11041656    <layout> 
     
    11061658      <window_info id="JetGradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> 
    11071659      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> 
     1660      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32848486" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> 
    11081661      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> 
    1109       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.44658944" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> 
     1662      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4460606" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> 
    11101663      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32947233" sideWeight="0.5" order="9" side_tool="true" content_ui="tabs" /> 
    1111       <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" /> 
     1664      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2025862" sideWeight="0.42728442" order="3" side_tool="true" content_ui="tabs" /> 
    11121665      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32947233" sideWeight="0.0" order="11" side_tool="false" content_ui="tabs" /> 
    1113       <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32818532" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" /> 
     1666      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3272727" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" /> 
    11141667      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> 
    11151668      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5641026" order="2" side_tool="false" content_ui="tabs" /> 
    11161669      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3297414" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> 
    11171670      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3994253" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 
    1118       <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2025862" sideWeight="0.55341053" order="0" side_tool="false" content_ui="combo" /> 
    1119       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.43114543" sideWeight="0.99198717" order="3" side_tool="false" content_ui="tabs" /> 
     1671      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2025862" sideWeight="0.56969696" order="0" side_tool="false" content_ui="combo" /> 
     1672      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.43030304" sideWeight="0.99198717" order="3" side_tool="false" content_ui="tabs" /> 
    11201673      <window_info id="Dataflow to this" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" /> 
    11211674      <window_info id="ConsoleMavenPlugin" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> 
     
    11261679      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 
    11271680      <window_info id="Maven-2 Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> 
    1128       <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32948717" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> 
    11291681      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> 
    11301682      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> 
     
    12011753  </component> 
    12021754  <component name="editorHistoryManager"> 
    1203     <entry file="file://$PROJECT_DIR$/src/main/java/test/examples/SmartMappingBuilder.java"> 
     1755    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/SESDSequencer.java"> 
    12041756      <provider selected="true" editor-type-id="text-editor"> 
    1205         <state line="51" column="61" selection-start="1132" selection-end="1132" vertical-scroll-proportion="0.5427408" /> 
    1206       </provider> 
    1207     </entry> 
    1208     <entry file="file://$PROJECT_DIR$/src/main/java/test/examples/MappingBuilder.java"> 
    1209       <provider selected="true" editor-type-id="text-editor"> 
    1210         <state line="23" column="47" selection-start="550" selection-end="733" vertical-scroll-proportion="0.78018993" /> 
    1211       </provider> 
    1212     </entry> 
    1213     <entry file="file://$PROJECT_DIR$/src/main/java/test/examples/Mapping.java"> 
    1214       <provider selected="true" editor-type-id="text-editor"> 
    1215         <state line="8" column="41" selection-start="190" selection-end="190" vertical-scroll-proportion="0.26666668" /> 
    1216       </provider> 
    1217     </entry> 
    1218     <entry file="file://$PROJECT_DIR$/unstressed_task_benchmark.sh"> 
    1219       <provider selected="true" editor-type-id="text-editor"> 
    1220         <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" /> 
    1221       </provider> 
    1222     </entry> 
    1223     <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/CABSESDUnrolledQueue.java"> 
    1224       <provider selected="true" editor-type-id="text-editor"> 
    1225         <state line="46" column="10" selection-start="1479" selection-end="1479" vertical-scroll-proportion="0.0"> 
     1757        <state line="9" column="42" selection-start="188" selection-end="188" vertical-scroll-proportion="0.28195488"> 
    12261758          <folding /> 
    12271759        </state> 
    12281760      </provider> 
    12291761    </entry> 
    1230     <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/FalseSharingExample.java"> 
     1762    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/CABSESDLazySetPaddedSpinOptimizedUnrolledQueue.java"> 
    12311763      <provider selected="true" editor-type-id="text-editor"> 
    1232         <state line="206" column="24" selection-start="4936" selection-end="4936" vertical-scroll-proportion="0.0"> 
     1764        <state line="16" column="13" selection-start="444" selection-end="444" vertical-scroll-proportion="-1.5923567"> 
     1765          <folding /> 
     1766        </state> 
     1767      </provider> 
     1768    </entry> 
     1769    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/UnsafeAtomicLongFieldUpdater.java"> 
     1770      <provider selected="true" editor-type-id="text-editor"> 
     1771        <state line="82" column="48" selection-start="2565" selection-end="2565" vertical-scroll-proportion="0.0"> 
     1772          <folding /> 
     1773        </state> 
     1774      </provider> 
     1775    </entry> 
     1776    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/benchmarking/BenchmarkState.java"> 
     1777      <provider selected="true" editor-type-id="text-editor"> 
     1778        <state line="15" column="4" selection-start="317" selection-end="317" vertical-scroll-proportion="0.33333334"> 
     1779          <folding /> 
     1780        </state> 
     1781      </provider> 
     1782    </entry> 
     1783    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/benchmarking/ThreadingBenchmark.java"> 
     1784      <provider selected="true" editor-type-id="text-editor"> 
     1785        <state line="97" column="24" selection-start="3241" selection-end="3241" vertical-scroll-proportion="0.6369427"> 
     1786          <folding /> 
     1787        </state> 
     1788      </provider> 
     1789    </entry> 
     1790    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/benchmarking/IBenchmarkingThreadResult.java"> 
     1791      <provider selected="true" editor-type-id="text-editor"> 
     1792        <state line="8" column="0" selection-start="148" selection-end="148" vertical-scroll-proportion="0.25062656"> 
     1793          <folding /> 
     1794        </state> 
     1795      </provider> 
     1796    </entry> 
     1797    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/benchmarking/IBenchmarkingTask.java"> 
     1798      <provider selected="true" editor-type-id="text-editor"> 
     1799        <state line="8" column="17" selection-start="157" selection-end="157" vertical-scroll-proportion="0.25062656"> 
     1800          <folding /> 
     1801        </state> 
     1802      </provider> 
     1803    </entry> 
     1804    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/benchmarking/BenchmarkingThread.java"> 
     1805      <provider selected="true" editor-type-id="text-editor"> 
     1806        <state line="81" column="17" selection-start="2716" selection-end="2716" vertical-scroll-proportion="0.0"> 
     1807          <folding /> 
     1808        </state> 
     1809      </provider> 
     1810    </entry> 
     1811    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/CommittableEntry.java"> 
     1812      <provider selected="true" editor-type-id="text-editor"> 
     1813        <state line="11" column="24" selection-start="213" selection-end="213" vertical-scroll-proportion="0.0"> 
     1814          <folding /> 
     1815        </state> 
     1816      </provider> 
     1817    </entry> 
     1818    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkResult.java"> 
     1819      <provider selected="true" editor-type-id="text-editor"> 
     1820        <state line="7" column="35" selection-start="163" selection-end="163" vertical-scroll-proportion="0.0"> 
     1821          <folding /> 
     1822        </state> 
     1823      </provider> 
     1824    </entry> 
     1825    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexingBuffer.java"> 
     1826      <provider selected="true" editor-type-id="text-editor"> 
     1827        <state line="94" column="16" selection-start="3150" selection-end="3150" vertical-scroll-proportion="0.33248407"> 
     1828          <folding /> 
     1829        </state> 
     1830      </provider> 
     1831    </entry> 
     1832    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/QueueTask.java"> 
     1833      <provider selected="true" editor-type-id="text-editor"> 
     1834        <state line="55" column="0" selection-start="1927" selection-end="1927" vertical-scroll-proportion="0.17707007"> 
     1835          <folding /> 
     1836        </state> 
     1837      </provider> 
     1838    </entry> 
     1839    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/BenchmarkingThread.java"> 
     1840      <provider selected="true" editor-type-id="text-editor"> 
     1841        <state line="37" column="0" selection-start="728" selection-end="728" vertical-scroll-proportion="0.0"> 
    12331842          <folding> 
    1234             <element signature="docComment;class#FalseSharingExample#0" expanded="false" /> 
    1235             <element signature="class#Arena#0;class#FalseSharingExample#0" expanded="false" /> 
    1236             <element signature="class#PlainArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1237             <element signature="method#PlainArrayArena#0;class#PlainArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1238             <element signature="method#write#0;class#PlainArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1239             <element signature="class#VolatileArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1240             <element signature="method#VolatileArrayArena#0;class#VolatileArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1241             <element signature="method#write#0;class#VolatileArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1242             <element signature="class#LazySetArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1243             <element signature="method#LazySetArrayArena#0;class#LazySetArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1244             <element signature="method#write#0;class#LazySetArrayArena#0;class#FalseSharingExample#0" expanded="false" /> 
    1245             <element signature="class#WriterThread#0;class#FalseSharingExample#0" expanded="false" /> 
    1246             <element signature="class#State#0;class#WriterThread#0;class#FalseSharingExample#0" expanded="false" /> 
    1247             <element signature="method#WriterThread#0;class#WriterThread#0;class#FalseSharingExample#0" expanded="false" /> 
    1248             <element signature="method#run#0;class#WriterThread#0;class#FalseSharingExample#0" expanded="false" /> 
    1249             <element signature="method#startMeasuring#0;class#WriterThread#0;class#FalseSharingExample#0" expanded="false" /> 
    1250             <element signature="method#stopMeasuring#0;class#WriterThread#0;class#FalseSharingExample#0" expanded="false" /> 
    1251             <element signature="method#stopAndWaitForResults#0;class#WriterThread#0;class#FalseSharingExample#0" expanded="false" /> 
    1252             <element signature="class#BenchmarkResult#0;class#FalseSharingExample#0" expanded="false" /> 
    1253             <element signature="method#BenchmarkResult#0;class#BenchmarkResult#0;class#FalseSharingExample#0" expanded="false" /> 
     1843            <element signature="docComment;class#BenchmarkingThread#0" expanded="false" /> 
     1844            <element signature="class#State#0;class#BenchmarkingThread#0" expanded="false" /> 
     1845            <element signature="method#BenchmarkingThread#0;class#BenchmarkingThread#0" expanded="false" /> 
     1846            <element signature="e#505#522#0" expanded="true" /> 
     1847            <element signature="method#startMeasuring#0;class#BenchmarkingThread#0" expanded="false" /> 
     1848            <element signature="method#stopMeasuring#0;class#BenchmarkingThread#0" expanded="false" /> 
    12541849          </folding> 
    12551850        </state> 
    12561851      </provider> 
    12571852    </entry> 
    1258     <entry file="file://$PROJECT_DIR$/unstressed_task_benchmark_statistics.sh"> 
     1853    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBufferAdapter.java"> 
    12591854      <provider selected="true" editor-type-id="text-editor"> 
    1260         <state line="17" column="63" selection-start="495" selection-end="495" vertical-scroll-proportion="0.0" /> 
    1261       </provider> 
    1262     </entry> 
    1263     <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/CABSESDLazySetPaddedSpinOptimizedCleanFreeTASUnrolledQueue.java"> 
    1264       <provider selected="true" editor-type-id="text-editor"> 
    1265         <state line="16" column="13" selection-start="444" selection-end="444" vertical-scroll-proportion="-2.2048848"> 
    1266           <folding /> 
    1267         </state> 
    1268       </provider> 
    1269     </entry> 
    1270     <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/CABSESDMaskedQueue.java"> 
    1271       <provider selected="true" editor-type-id="text-editor"> 
    1272         <state line="17" column="37" selection-start="362" selection-end="380" vertical-scroll-proportion="0.339213"> 
    1273           <folding /> 
    1274         </state> 
    1275       </provider> 
    1276     </entry> 
    1277     <entry file="file://$PROJECT_DIR$/config.properties"> 
    1278       <provider selected="true" editor-type-id="text-editor"> 
    1279         <state line="18" column="0" selection-start="428" selection-end="428" vertical-scroll-proportion="0.0"> 
    1280           <folding /> 
    1281         </state> 
    1282       </provider> 
    1283     </entry> 
    1284     <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/queue/unstressed/impl/AbstractSESDSequencer.java"> 
    1285       <provider selected="true" editor-type-id="text-editor"> 
    1286         <state line="22" column="50" selection-start="624" selection-end="624" vertical-scroll-proportion="0.094979644"> 
    1287           <folding /> 
    1288         </state> 
    1289       </provider> 
    1290     </entry> 
    1291     <entry file="file://$PROJECT_DIR$/src/main/java/test/ivan/PacketEntry.java"> 
    1292       <provider selected="true" editor-type-id="text-editor"> 
    1293         <state line="30" column="16" selection-start="584" selection-end="584" vertical-scroll-proportion="0.0"> 
    1294           <folding /> 
    1295         </state> 
    1296       </provider> 
    1297     </entry> 
    1298     <entry file="file://$PROJECT_DIR$/src/main/java/test/ivan/FileParser.java"> 
    1299       <provider selected="true" editor-type-id="text-editor"> 
    1300         <state line="147" column="27" selection-start="4461" selection-end="4461" vertical-scroll-proportion="0.0"> 
     1855        <state line="78" column="0" selection-start="2576" selection-end="2576" vertical-scroll-proportion="0.0"> 
    13011856          <folding> 
    1302             <element signature="imports" expanded="false" /> 
    1303             <element signature="docComment;class#FileParser#0" expanded="false" /> 
    1304             <element signature="method#forEachEntry#0;class#FileParser#0" expanded="false" /> 
    1305             <element signature="e#946#980#0" expanded="false" /> 
    1306             <element signature="method#readUnsignedInt#0;class#FileParser#0" expanded="false" /> 
    1307             <element signature="method#readUnsignedShort#0;class#FileParser#0" expanded="false" /> 
    1308             <element signature="method#packUnsignedShort#0;class#FileParser#0" expanded="false" /> 
    1309             <element signature="method#toHexString#0;class#FileParser#0" expanded="false" /> 
     1857            <element signature="imports" expanded="true" /> 
    13101858          </folding> 
    13111859        </state> 
    13121860      </provider> 
    13131861    </entry> 
    1314     <entry file="jar://$MAVEN_REPOSITORY$/net/sf/trove4j/trove4j/2.0.2/trove4j-2.0.2.jar!/gnu/trove/TObjectLongHashMap.class"> 
     1862    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorBenchmark.java"> 
    13151863      <provider selected="true" editor-type-id="text-editor"> 
    1316         <state line="29" column="16" selection-start="1256" selection-end="1256" vertical-scroll-proportion="-9.8"> 
    1317           <folding /> 
     1864        <state line="79" column="67" selection-start="2264" selection-end="2264" vertical-scroll-proportion="0.0"> 
     1865          <folding> 
     1866            <element signature="imports" expanded="true" /> 
     1867            <element signature="e#2267#2274#0" expanded="true" /> 
     1868            <element signature="e#2452#2779#0" expanded="true" /> 
     1869            <element signature="e#2772#2773#0" expanded="true" /> 
     1870            <element signature="class#Entry#0;class#DemultiplexorBenchmark#0" expanded="false" /> 
     1871            <element signature="e#3874#3979#0" expanded="true" /> 
     1872            <element signature="e#3890#3897#0" expanded="true" /> 
     1873            <element signature="e#3974#3975#0" expanded="true" /> 
     1874          </folding> 
    13181875        </state> 
    13191876      </provider> 
    13201877    </entry> 
    1321     <entry file="jar://$MAVEN_REPOSITORY$/net/sf/trove4j/trove4j/2.0.2/trove4j-2.0.2-sources.jar!/gnu/trove/TObjectLongHashMap.java"> 
     1878    <entry file="file://$PROJECT_DIR$/src/main/java/test/threads/demultiplexor/DemultiplexorDisruptor.java"> 
    13221879      <provider selected="true" editor-type-id="text-editor"> 
    1323         <state line="192" column="16" selection-start="6331" selection-end="6331" vertical-scroll-proportion="0.33242875"> 
     1880        <state line="18" column="28" selection-start="627" selection-end="627" vertical-scroll-proportion="0.5651163"> 
    13241881          <folding /> 
    1325         </state> 
    1326       </provider> 
    1327     </entry> 
    1328     <entry file="file://$PROJECT_DIR$/src/main/java/test/ivan/Main.java"> 
    1329       <provider selected="true" editor-type-id="text-editor"> 
    1330         <state line="158" column="43" selection-start="4649" selection-end="4649" vertical-scroll-proportion="0.5305292"> 
    1331           <folding> 
    1332             <element signature="e#3413#3424#0" expanded="true" /> 
    1333           </folding> 
    13341882        </state> 
    13351883      </provider> 
Note: See TracChangeset for help on using the changeset viewer.