test/micro/org/openjdk/bench/java/net/NetworkInterfaceLookup.java
author redestad
Fri, 05 Jul 2019 13:40:29 +0200
changeset 55596 d01b345865d7
permissions -rw-r--r--
8225239: Refactor NetworkInterface lookups Reviewed-by: michaelm, dfuchs, chegar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
55596
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     1
/*
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     4
 *
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     7
 * published by the Free Software Foundation.
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     8
 *
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    13
 * accompanied this code).
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    14
 *
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    18
 *
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    21
 * questions.
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    22
 */
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    23
package org.openjdk.bench.java.net;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    24
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    25
import org.openjdk.jmh.annotations.Benchmark;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    26
import org.openjdk.jmh.annotations.BenchmarkMode;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    27
import org.openjdk.jmh.annotations.Fork;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    28
import org.openjdk.jmh.annotations.Measurement;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    29
import org.openjdk.jmh.annotations.Mode;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    30
import org.openjdk.jmh.annotations.OutputTimeUnit;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    31
import org.openjdk.jmh.annotations.Scope;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    32
import org.openjdk.jmh.annotations.State;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    33
import org.openjdk.jmh.annotations.Warmup;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    34
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    35
import java.lang.reflect.Method;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    36
import java.net.InetAddress;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    37
import java.net.NetworkInterface;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    38
import java.util.concurrent.TimeUnit;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    39
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    40
/**
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    41
 * Assess time to perform native NetworkInterface lookups; uses
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    42
 * reflection to access both package-private isBoundInetAddress and
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    43
 * public getByInetAddress (to get comparable numbers)
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    44
 */
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    45
@BenchmarkMode(Mode.Throughput)
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    46
@OutputTimeUnit(TimeUnit.SECONDS)
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    47
@State(Scope.Thread)
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    48
@Fork(2)
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    49
@Warmup(iterations = 5, time = 2)
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    50
@Measurement(iterations = 10, time = 2)
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    51
public class NetworkInterfaceLookup {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    52
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    53
    static final InetAddress address = InetAddress.getLoopbackAddress();
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    54
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    55
    static final Method isBoundInetAddress_method;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    56
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    57
    static final Method getByInetAddress_method;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    58
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    59
    static {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    60
        Method isBound = null;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    61
        Method getByInet = null;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    62
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    63
        try {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    64
            isBound = NetworkInterface.class.getDeclaredMethod("isBoundInetAddress", InetAddress.class);
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    65
            isBound.setAccessible(true);
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    66
        } catch (Exception e) {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    67
            System.out.println("NetworkInterface.isBoundInetAddress not found");
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    68
        }
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    69
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    70
        try {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    71
            getByInet = NetworkInterface.class.getDeclaredMethod("getByInetAddress", InetAddress.class);
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    72
        } catch (Exception e) {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    73
            System.out.println("NetworkInterface.getByInetAddress not found");
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    74
        }
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    75
        isBoundInetAddress_method = isBound;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    76
        getByInetAddress_method = getByInet;
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    77
    }
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    78
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    79
    @Benchmark
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    80
    public boolean bound() throws Exception {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    81
        return (boolean)isBoundInetAddress_method.invoke(null, address);
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    82
    }
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    83
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    84
    @Benchmark
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    85
    public NetworkInterface getByInetAddress() throws Exception {
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    86
        return (NetworkInterface)getByInetAddress_method.invoke(null, address);
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    87
    }
d01b345865d7 8225239: Refactor NetworkInterface lookups
redestad
parents:
diff changeset
    88
}