JAL-2662 Adjustments to hidden columns benchmark
authorkiramt <k.mourao@dundee.ac.uk>
Wed, 20 Sep 2017 10:28:01 +0000 (11:28 +0100)
committerkiramt <k.mourao@dundee.ac.uk>
Wed, 20 Sep 2017 10:28:01 +0000 (11:28 +0100)
benchmarking/src/main/java/org/jalview/HiddenColumnsBenchmark.java

index 2518494..eb35e3b 100644 (file)
 package org.jalview;
 
 import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
 import org.openjdk.jmh.annotations.Setup;
 import org.openjdk.jmh.annotations.State;
-import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
 import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Param;
+
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Random;
+import java.util.concurrent.TimeUnit;
 
+import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.HiddenColumns;
 
 /*
  * A class to benchmark hidden columns performance
  */
+@Warmup(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
+@Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
+@Fork(1)
 public class HiddenColumnsBenchmark 
-{
+{      
+       /*
+        * State with multiple hidden columns and a start position set
+        */
        @State(Scope.Thread)
-       public static class ThreadState
+       public static class HiddenColsAndStartState
        {
+               @Param({"300", "10000", "100000"})
+               public int maxcols;
+               
+               @Param({"1", "50", "90"})
+               public int startpcnt; // position as percentage of maxcols
+               
+               @Param({"1","15","100"})
+               public int hide;
+               
                HiddenColumns h = new HiddenColumns();
-               int MAXCOLS = 100000;
                Random rand = new Random();
+               
+               public int hiddenColumn;
+               public int visibleColumn;
        
                @Setup
                public void setup()
                {
                        rand.setSeed(1234);
-               for (int i=0; i<MAXCOLS; ++i)
+                       int lastcol = 0;
+               while (lastcol < maxcols)
                {
-                       int col = rand.nextInt(MAXCOLS); 
-                       h.hideColumns(col, col+1);
+                       int count = rand.nextInt(100); 
+                       lastcol += count;
+                       h.hideColumns(lastcol, lastcol+hide);
+                       lastcol+=hide;
                }
+               
+               // make sure column at start is hidden
+               hiddenColumn = (int)(maxcols * startpcnt/100.0);
+               h.hideColumns(hiddenColumn, hiddenColumn);
+               
+               // and column <hide> after start is visible
+               ColumnSelection sel = new ColumnSelection();
+               h.revealHiddenColumns(hiddenColumn+hide, sel);
+               visibleColumn = hiddenColumn+hide;
+               
+               System.out.println("Maxcols: " + maxcols + " HiddenCol: " + hiddenColumn + " Hide: " + hide);
+               System.out.println("Number of hidden columns: " + h.getSize());
                }
+       }
        
-               @TearDown
-               public void tearDown()
-               {
-                       
-               }
+       /* Convention: functions in alphabetical order */
+       
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+       public int benchAdjustForHiddenColumns(HiddenColsAndStartState tstate)
+       {
+               return tstate.h.adjustForHiddenColumns(tstate.visibleColumn);
+       }
+       
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+       public int benchFindColumnPosition(HiddenColsAndStartState tstate)
+       {
+               return tstate.h.findColumnPosition(tstate.visibleColumn);
+       }
+       
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+       public List<Integer> benchFindHiddenRegionPositions(HiddenColsAndStartState tstate)
+       {
+               return tstate.h.findHiddenRegionPositions();
+       }
+       
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+       public ArrayList<int[]> benchGetHiddenColumnsCopy(HiddenColsAndStartState tstate)
+       {
+               return tstate.h.getHiddenColumnsCopy();
+       }
+       
+       
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+    public int benchGetSize(HiddenColsAndStartState tstate)
+    {
+               return tstate.h.getSize();
+    }
+
+   @Benchmark
+    @BenchmarkMode({Mode.Throughput})
+    public HiddenColumns benchHideCols(HiddenColsAndStartState tstate) 
+    {
+       tstate.h.hideColumns(tstate.visibleColumn,
+                       tstate.visibleColumn+2000); 
+       return tstate.h;
+    }
+   
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+    public boolean benchIsVisible(HiddenColsAndStartState tstate) 
+    {
+       return tstate.h.isVisible(tstate.hiddenColumn); 
     }
        
-       /*
-        * isVisible benchmarking
-        */
-    @Benchmark
-    public boolean benchIsVisibleLastCol(ThreadState tstate) 
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+    public HiddenColumns benchReveal(HiddenColsAndStartState tstate) 
     {
-       return tstate.h.isVisible(tstate.MAXCOLS - 3); 
+               ColumnSelection sel = new ColumnSelection();
+       tstate.h.revealHiddenColumns(tstate.hiddenColumn, sel);
+       return tstate.h;
     }
-    
-    @Benchmark
-    public boolean benchIsVisibleFirstCol(ThreadState tstate)
+       
+       @Benchmark
+       @BenchmarkMode({Mode.Throughput})
+    public HiddenColumns benchRevealAll(HiddenColsAndStartState tstate) 
     {
-       return tstate.h.isVisible(1);
+               ColumnSelection sel = new ColumnSelection();
+       tstate.h.revealAllHiddenColumns(sel);
+       return tstate.h;
     }
-
-}
+       
+       
+}
\ No newline at end of file