@@ -52,9 +52,10 @@ public class JCStressTestProcessor extends AbstractProcessor {
52
52
53
53
private final List <TestInfo > tests = new ArrayList <>();
54
54
55
- public static final String TASK_LOOP_PREFIX = "task_" ;
56
- public static final String RUN_LOOP_PREFIX = "run_" ;
57
- public static final String AUX_PREFIX = "jcstress_" ;
55
+ public static final String TASK_LOOP_PREFIX = "jcstress_task_" ;
56
+ public static final String RUN_LOOP_PREFIX = "jcstress_run_" ;
57
+ public static final String CONSUME_PREFIX = "jcstress_consume_" ;
58
+ public static final String CONSUME_NI_PREFIX = "jcstress_ni_consume_" ;
58
59
59
60
@ Override
60
61
public SourceVersion getSupportedSourceVersion () {
@@ -478,7 +479,7 @@ private void generateContinuous(TestInfo info) {
478
479
pw .println (" }" );
479
480
pw .println (" workerSync = new WorkerSync(false, " + actorsCount + ", config.spinLoopStyle);" );
480
481
pw .println ();
481
- pw .println (" control.isStopped = false;" );
482
+ pw .println (" control.stopping = false;" );
482
483
pw .println ();
483
484
484
485
// Initialize affinity before starting the timing measurement, so that init time
@@ -510,56 +511,65 @@ private void generateContinuous(TestInfo info) {
510
511
pw .println (" }" );
511
512
pw .println (" }" );
512
513
pw .println ();
513
- pw .println (" control.isStopped = true;" );
514
+ pw .println (" control.stopping = true;" );
514
515
pw .println ();
515
516
pw .println (" return threads;" );
516
517
pw .println (" }" );
517
518
pw .println ();
518
519
519
- pw .println (" private void " + AUX_PREFIX + "consume(Counter<" + r + "> cnt, int a) {" );
520
- pw .println (" " + s + "[] ls = gs;" );
521
- pw .println (" " + r + "[] lr = gr;" );
522
- pw .println (" int len = config.strideSize * config.strideCount;" );
523
- pw .println (" int left = a * len / " + actorsCount + ";" );
524
- pw .println (" int right = (a + 1) * len / " + actorsCount + ";" );
525
- pw .println (" for (int c = left; c < right; c++) {" );
526
- pw .println (" " + r + " r = lr[c];" );
527
- pw .println (" " + s + " s = ls[c];" );
520
+ for (boolean reinit : new boolean [] { false , true }) {
521
+ String name = reinit ? (CONSUME_PREFIX + "reinit" ) : (CONSUME_NI_PREFIX + "final" );
522
+ pw .println (" private void " + name + "(Counter<" + r + "> cnt, int a) {" );
523
+ pw .println (" " + s + "[] ls = gs;" );
524
+ pw .println (" " + r + "[] lr = gr;" );
525
+ pw .println (" int len = config.strideSize * config.strideCount;" );
526
+ pw .println (" int left = a * len / " + actorsCount + ";" );
527
+ pw .println (" int right = (a + 1) * len / " + actorsCount + ";" );
528
+ pw .println (" for (int c = left; c < right; c++) {" );
529
+ pw .println (" " + r + " r = lr[c];" );
530
+ pw .println (" " + s + " s = ls[c];" );
528
531
529
- if (info .getArbiter () != null ) {
530
- if (isStateItself ) {
531
- emitMethod (pw , info .getArbiter (), " s." + info .getArbiter ().getSimpleName (), "s" , "r" , true );
532
- } else {
533
- emitMethod (pw , info .getArbiter (), " test." + info .getArbiter ().getSimpleName (), "s" , "r" , true );
532
+ if (info .getArbiter () != null ) {
533
+ if (isStateItself ) {
534
+ emitMethod (pw , info .getArbiter (), " s." + info .getArbiter ().getSimpleName (), "s" , "r" , true );
535
+ } else {
536
+ emitMethod (pw , info .getArbiter (), " test." + info .getArbiter ().getSimpleName (), "s" , "r" , true );
537
+ }
534
538
}
535
- }
536
539
537
- // If state is trivial, we can reset its fields directly, without
538
- // reallocating the object.
539
-
540
- if (allFieldsAreDefault (info .getState ())) {
541
- for (VariableElement var : ElementFilter .fieldsIn (info .getState ().getEnclosedElements ())) {
542
- if (var .getModifiers ().contains (Modifier .STATIC )) continue ;
543
- pw .print (" s." + var .getSimpleName ().toString () + " = " );
544
- pw .print (getDefaultVal (var ));
545
- pw .println (";" );
540
+ if (reinit ) {
541
+ // If state is trivial, we can reset its fields directly, without
542
+ // reallocating the object.
543
+
544
+ if (allFieldsAreDefault (info .getState ())) {
545
+ for (VariableElement var : ElementFilter .fieldsIn (info .getState ().getEnclosedElements ())) {
546
+ if (var .getModifiers ().contains (Modifier .STATIC ))
547
+ continue ;
548
+ pw .print (" s." + var .getSimpleName ().toString () + " = " );
549
+ pw .print (getDefaultVal (var ));
550
+ pw .println (";" );
551
+ }
552
+ } else {
553
+ pw .println (" ls[c] = new " + s + "();" );
554
+ }
546
555
}
547
- } else {
548
- pw .println (" ls[c] = new " + s + "();" );
549
- }
550
556
551
- pw .println (" cnt.record(r, 1);" );
557
+ pw .println (" cnt.record(r, 1);" );
552
558
553
- for (VariableElement var : ElementFilter .fieldsIn (info .getResult ().getEnclosedElements ())) {
554
- if (var .getSimpleName ().toString ().equals ("jcstress_trap" )) continue ;
555
- pw .print (" r." + var .getSimpleName ().toString () + " = " );
556
- pw .print (getDefaultVal (var ));
557
- pw .println (";" );
558
- }
559
+ if (reinit ) {
560
+ for (VariableElement var : ElementFilter .fieldsIn (info .getResult ().getEnclosedElements ())) {
561
+ if (var .getSimpleName ().toString ().equals ("jcstress_trap" ))
562
+ continue ;
563
+ pw .print (" r." + var .getSimpleName ().toString () + " = " );
564
+ pw .print (getDefaultVal (var ));
565
+ pw .println (";" );
566
+ }
567
+ }
559
568
560
- pw .println (" }" );
561
- pw .println (" }" );
562
- pw .println ();
569
+ pw .println (" }" );
570
+ pw .println (" }" );
571
+ pw .println ();
572
+ }
563
573
564
574
int n = 0 ;
565
575
for (ExecutableElement a : info .getActors ()) {
@@ -571,18 +581,20 @@ private void generateContinuous(TestInfo info) {
571
581
pw .println (" if (config.localAffinity) AffinitySupport.bind(config.localAffinityMap[" + n + "]);" );
572
582
pw .println (" while (true) {" );
573
583
pw .println (" WorkerSync sync = workerSync;" );
574
- pw .println (" if (sync.stopped) {" );
575
- pw .println (" return counter;" );
576
- pw .println (" }" );
577
584
pw .println (" int check = 0;" );
578
585
pw .println (" for (int start = 0; start < len; start += stride) {" );
579
586
pw .println (" " + RUN_LOOP_PREFIX + a .getSimpleName () + "(gs, gr, start, start + stride);" );
580
587
pw .println (" check += " + actorsCount + ";" );
581
588
pw .println (" sync.awaitCheckpoint(check);" );
582
589
pw .println (" }" );
583
- pw .println (" " + AUX_PREFIX + "consume(counter, " + n + ");" );
590
+ pw .println (" if (sync.stopping) {" );
591
+ pw .println (" " + CONSUME_NI_PREFIX + "final(counter, " + n + ");" );
592
+ pw .println (" return counter;" );
593
+ pw .println (" } else {" );
594
+ pw .println (" " + CONSUME_PREFIX + "reinit(counter, " + n + ");" );
595
+ pw .println (" }" );
584
596
pw .println (" if (sync.tryStartUpdate()) {" );
585
- pw .println (" workerSync = new WorkerSync(control.isStopped , " + actorsCount + ", config.spinLoopStyle);" );
597
+ pw .println (" workerSync = new WorkerSync(control.stopping , " + actorsCount + ", config.spinLoopStyle);" );
586
598
pw .println (" }" );
587
599
pw .println (" sync.postUpdate();" );
588
600
pw .println (" }" );
0 commit comments