JAL-2662 First attempt to set up JMH hidden columns benchmark
[jalview.git] / benchmarking / src / main / java / org / jalview / HiddenColumnsBenchmark.java
1 /*
2  * Copyright (c) 2014, Oracle America, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  *  * Redistributions of source code must retain the above copyright notice,
9  *    this list of conditions and the following disclaimer.
10  *
11  *  * Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  *  * Neither the name of Oracle nor the names of its contributors may be used
16  *    to endorse or promote products derived from this software without
17  *    specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29  * THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 package org.jalview;
33
34 import org.openjdk.jmh.annotations.Benchmark;
35 import org.openjdk.jmh.annotations.Setup;
36 import org.openjdk.jmh.annotations.State;
37 import org.openjdk.jmh.annotations.TearDown;
38 import org.openjdk.jmh.annotations.Scope;
39 import java.util.Random;
40
41 import jalview.datamodel.HiddenColumns;
42
43 public class HiddenColumnsBenchmark 
44 {
45         @State(Scope.Thread)
46         public static class ThreadState
47         {
48                 HiddenColumns h = new HiddenColumns();
49                 int MAXCOLS = 100000;
50                 Random rand = new Random();
51         
52                 @Setup
53                 public void setup()
54                 {
55                         rand.setSeed(1234);
56                 for (int i=0; i<MAXCOLS; ++i)
57                 {
58                         int col = rand.nextInt(MAXCOLS); 
59                         h.hideColumns(col, col+1);
60                 }
61                 }
62         
63                 @TearDown
64                 public void tearDown()
65                 {
66                         
67                 }
68     }
69         
70         
71     @Benchmark
72     public boolean benchIsVisibleLastCol(ThreadState tstate) 
73     {
74         return tstate.h.isVisible(tstate.MAXCOLS - 3); 
75     }
76     
77     @Benchmark
78     public boolean benchIsVisibleFirstCol(ThreadState tstate)
79     {
80         return tstate.h.isVisible(1);
81     }
82
83 }