1 /*
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  *  http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 package software.amazon.awssdk.s3benchmarks;
17 
18 import java.util.function.Supplier;
19 
20 /**
21  * Factory to create the benchmark
22  */
23 @FunctionalInterface
24 public interface TransferManagerBenchmark {
25 
26     /**
27      * The benchmark method to run
28      */
run()29     void run();
30 
v2Download(TransferManagerBenchmarkConfig config)31     static TransferManagerBenchmark v2Download(TransferManagerBenchmarkConfig config) {
32         return new TransferManagerDownloadBenchmark(config);
33     }
34 
downloadDirectory(TransferManagerBenchmarkConfig config)35     static TransferManagerBenchmark downloadDirectory(TransferManagerBenchmarkConfig config) {
36         return new TransferManagerDownloadDirectoryBenchmark(config);
37     }
38 
v2Upload(TransferManagerBenchmarkConfig config)39     static TransferManagerBenchmark v2Upload(TransferManagerBenchmarkConfig config) {
40         return new TransferManagerUploadBenchmark(config);
41     }
42 
uploadDirectory(TransferManagerBenchmarkConfig config)43     static TransferManagerBenchmark uploadDirectory(TransferManagerBenchmarkConfig config) {
44         return new TransferManagerUploadDirectoryBenchmark(config);
45     }
46 
copy(TransferManagerBenchmarkConfig config)47     static TransferManagerBenchmark copy(TransferManagerBenchmarkConfig config) {
48         return new TransferManagerCopyBenchmark(config);
49     }
50 
v1Download(TransferManagerBenchmarkConfig config)51     static TransferManagerBenchmark v1Download(TransferManagerBenchmarkConfig config) {
52         return new V1TransferManagerDownloadBenchmark(config);
53     }
54 
v1DownloadDirectory(TransferManagerBenchmarkConfig config)55     static TransferManagerBenchmark v1DownloadDirectory(TransferManagerBenchmarkConfig config) {
56         return new V1TransferManagerDownloadDirectoryBenchmark(config);
57     }
58 
v1Upload(TransferManagerBenchmarkConfig config)59     static TransferManagerBenchmark v1Upload(TransferManagerBenchmarkConfig config) {
60         return new V1TransferManagerUploadBenchmark(config);
61     }
62 
v1UploadDirectory(TransferManagerBenchmarkConfig config)63     static TransferManagerBenchmark v1UploadDirectory(TransferManagerBenchmarkConfig config) {
64         return new V1TransferManagerUploadDirectoryBenchmark(config);
65     }
66 
v1Copy(TransferManagerBenchmarkConfig config)67     static TransferManagerBenchmark v1Copy(TransferManagerBenchmarkConfig config) {
68         return new V1TransferManagerCopyBenchmark(config);
69     }
70 
runWithTime(Supplier<T> toRun)71     default <T> TimedResult<T> runWithTime(Supplier<T> toRun) {
72         long start = System.currentTimeMillis();
73         T result = toRun.get();
74         long end = System.currentTimeMillis();
75         return new TimedResult<>(result, (end - start) / 1000.0);
76     }
77 
78     final class TimedResult<T> {
79         private final Double latency;
80         private final T result;
81 
TimedResult(T result, Double latency)82         public TimedResult(T result, Double latency) {
83             this.result = result;
84             this.latency = latency;
85         }
86 
latency()87         public Double latency() {
88             return latency;
89         }
90 
result()91         public T result() {
92             return result;
93         }
94 
95     }
96 }
97