Skip to content

Commit 282ff15

Browse files
Refractored internship folder and added benchmark script
1 parent 780abf3 commit 282ff15

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+806
-98
lines changed

java/com/engflow/internship/binaryinput/BUILD renamed to java/com/engflow/binaryinput/BUILD

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
load("@rules_java//java:defs.bzl", "java_binary", "java_library")
22

3-
NUM_FILES = 500
3+
NUM_FILES = 1
44

55
#Generates a number of java files based on the value of NUM_FILES
66
#Each file is named HelloX.java where X is the number of the file
@@ -11,6 +11,9 @@ NUM_FILES = 500
1111
cmd_bash = "echo 'package com.engflow.internship.binaryinput;" + "\n" +
1212
"public class Hello" + str(x) +
1313
" { public static void greetNum() { System.out.println(\"Hello " + str(x) + "\"); } }' > $@",
14+
#cmd_ps = "echo 'package com.engflow.internship.binaryinput;" + "\n" +
15+
# "public class Hello" + str(x) +
16+
# " { public static void greetNum() { System.out.println(\"Hello " + str(x) + "\"); } }' > $($outputFile.FullName)",
1417
) for x in range(1,NUM_FILES+1)]
1518

1619
#Generates a java library that contains all the generated java files
@@ -24,9 +27,9 @@ NUM_FILES = 500
2427
java_binary(
2528
name = "main",
2629
srcs = ["Main.java"],
27-
main_class = "com.engflow.internship.binaryinput.Main",
30+
main_class = "com.engflow.binaryinput.Main",
2831
deps = [
2932
":genbinary" + str(x) for x in range(1,NUM_FILES+1)
3033
],
3134
args = [str(NUM_FILES)],
32-
)
35+
)
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import subprocess
2+
import uuid
3+
import csv
4+
import os
5+
import json
6+
7+
# Modify the BUILD file to define the number of files
8+
def modify_build_file(num_files):
9+
with open('BUILD', 'r') as file:
10+
lines = file.readlines()
11+
12+
with open('BUILD', 'w') as file:
13+
for line in lines:
14+
if line.startswith('NUM_FILES'):
15+
file.write(f'NUM_FILES = {num_files}\n')
16+
else:
17+
file.write(line)
18+
19+
def run_bazel_command(command):
20+
subprocess.run(command, check=True)
21+
22+
# Read the Bazel profile data
23+
def analyze_bazel_profile(profile_path):
24+
with open(profile_path, 'r') as file:
25+
profile_data = json.load(file)
26+
return profile_data
27+
28+
# Extract the critical time and total run time from the Bazel profile data
29+
def extract_times(profile_data):
30+
critical_time = 0
31+
start_time = None
32+
end_time = None
33+
34+
# Iterate through the events in the profile data to extract the critical time and total run time
35+
for event in profile_data['traceEvents']:
36+
if event.get('cat') == 'critical path component':
37+
critical_time += event['dur'] / 1000000.0 # Convert microseconds to seconds
38+
if event.get('cat') == 'build phase marker' and event['name'] == 'Launch Blaze':
39+
start_time = event['ts'] / 1000000.0 # Convert microseconds to seconds
40+
if event.get('cat') == 'build phase marker' and event['name'] == 'Complete build':
41+
end_time = event['ts'] / 1000000.0 # Convert microseconds to seconds
42+
43+
# Calculate the total run time
44+
total_run_time = end_time - start_time if start_time and end_time else None
45+
46+
return critical_time, total_run_time
47+
48+
49+
def main():
50+
num_files = int(input("Enter the number of files: "))
51+
execution_type = input("Enter the execution type (local/remote): ")
52+
iterations = int(input("Enter the number of iterations: "))
53+
54+
modify_build_file(num_files)
55+
56+
results = []
57+
58+
# Path to the Bazel profile data
59+
# Using an absolute path to avoid issues with the Bazel workspace
60+
profile_path = os.path.abspath('profile.json')
61+
62+
for i in range(iterations):
63+
if execution_type == 'local':
64+
# Clear the Bazel cache
65+
run_bazel_command(['bazel', 'clean', '--expunge'])
66+
# Generate the input files
67+
targets = [f':genbinary{j}' for j in range(1, num_files + 1)]
68+
run_bazel_command(['bazel', 'build'] + targets)
69+
# Build the main target and generate the Bazel profile data
70+
run_bazel_command(['bazel', 'build', f'--profile={profile_path}', ':main'])
71+
elif execution_type == 'remote':
72+
# Generate a unique key for the cache silo
73+
key = str(uuid.uuid4())
74+
# Generate the input files
75+
targets = [f':genbinary{j}' for j in range(1, num_files + 1)]
76+
run_bazel_command(['bazel', 'build', '--config=engflow', f'--remote_default_exec_properties=cache-silo-key={key}'] + targets)
77+
# Build the main target and generate the Bazel profile data
78+
run_bazel_command(['bazel', 'build', '--config=engflow', f'--profile={profile_path}', f'--remote_default_exec_properties=cache-silo-key={key}', ':main'])
79+
80+
profile_output = analyze_bazel_profile(profile_path)
81+
critical_time, total_run_time = extract_times(profile_output)
82+
results.append((critical_time, total_run_time))
83+
84+
# Write the results to a CSV file
85+
#with open(f'results{num_files}.csv', 'w', newline='') as csvfile:
86+
# writer = csv.writer(csvfile)
87+
# writer.writerow(['Critical Time', 'Total Run Time'])
88+
# writer.writerows(results)
89+
90+
critical_times = [result[0] for result in results]
91+
total_run_times = [result[1] for result in results]
92+
93+
print(results)
94+
95+
# Calculate the highest critical time and total run time
96+
critical_time_max = max(critical_times)
97+
total_run_time_max = max(total_run_times)
98+
99+
print(f'Highest Critical Time: {critical_time_max}')
100+
print(f'Highest Total Run Time: {total_run_time_max}')
101+
102+
if __name__ == '__main__':
103+
main()

java/com/engflow/internship/binaryinput/Main.java renamed to java/com/engflow/binaryinput/Main.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.engflow.internship.binaryinput;
1+
package com.engflow.binaryinput;
22

33
import java.lang.reflect.InvocationTargetException;
44

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package(default_visibility = ["//visibility:public"])
2+
3+
java_library(
4+
name = "class_a",
5+
srcs = ["ClassA.java"],
6+
deps = [
7+
"//java/com/engflow/cycleexample/class_b:class_b",
8+
"//java/com/engflow/cycleexample/interface_a:interface_a",
9+
],
10+
)
11+
12+
java_test(
13+
name = "class_a_test",
14+
srcs = ["ClassATest.java"],
15+
test_class = "com.engflow.internship.cycleexample.class_a.ClassATest",
16+
deps = [
17+
":class_a",
18+
"//java/com/engflow/cycleexample/class_b:class_b",
19+
"//java/com/engflow/cycleexample/class_c:class_c",
20+
"//java/com/engflow/cycleexample/interface_a:interface_a",
21+
],
22+
)

java/com/engflow/internship/cycleexample/class_a/ClassA.java renamed to java/com/engflow/cycleexample/class_a/ClassA.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.engflow.internship.cycleexample.class_a;
1+
package com.engflow.cycleexample.class_a;
22

3-
import com.engflow.internship.cycleexample.class_b.ClassB;
4-
import com.engflow.internship.cycleexample.interface_a.InterfaceA;
3+
import com.engflow.cycleexample.class_b.ClassB;
4+
import com.engflow.cycleexample.interface_a.InterfaceA;
55

66
public class ClassA implements InterfaceA {
77
private ClassB classB;

java/com/engflow/internship/cycleexample/class_a/ClassATest.java renamed to java/com/engflow/cycleexample/class_a/ClassATest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.engflow.internship.cycleexample.class_a;
1+
package com.engflow.cycleexample.class_a;
22

3-
import com.engflow.internship.cycleexample.class_b.ClassB;
4-
import com.engflow.internship.cycleexample.class_c.ClassC;
3+
import com.engflow.cycleexample.class_b.ClassB;
4+
import com.engflow.cycleexample.class_c.ClassC;
55
import org.junit.Test;
66
import static org.junit.Assert.assertTrue;
77

java/com/engflow/internship/cycleexample/class_b/BUILD renamed to java/com/engflow/cycleexample/class_b/BUILD

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ java_library(
44
name = "class_b",
55
srcs = ["ClassB.java"],
66
deps = [
7-
"//java/com/engflow/internship/cycleexample/class_c",
8-
"//java/com/engflow/internship/cycleexample/interface_b",
7+
"//java/com/engflow/cycleexample/class_c:class_c",
8+
"//java/com/engflow/cycleexample/interface_b:interface_b",
99
],
1010
)
1111

@@ -15,7 +15,7 @@ java_test(
1515
test_class = "com.engflow.internship.cycleexample.class_b.ClassBTest",
1616
deps = [
1717
":class_b",
18-
"//java/com/engflow/internship/cycleexample/class_c:class_c",
19-
"//java/com/engflow/internship/cycleexample/interface_b:interface_b",
18+
"//java/com/engflow/cycleexample/class_c:class_c",
19+
"//java/com/engflow/cycleexample/interface_b:interface_b",
2020
],
2121
)

java/com/engflow/internship/cycleexample/class_b/ClassB.java renamed to java/com/engflow/cycleexample/class_b/ClassB.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.engflow.internship.cycleexample.class_b;
1+
package com.engflow.cycleexample.class_b;
22

3-
import com.engflow.internship.cycleexample.class_c.ClassC;
4-
import com.engflow.internship.cycleexample.interface_b.InterfaceB;
3+
import com.engflow.cycleexample.class_c.ClassC;
4+
import com.engflow.cycleexample.interface_b.InterfaceB;
55

66
public class ClassB implements InterfaceB {
77
private ClassC classC;

java/com/engflow/internship/cycleexample/class_b/ClassBTest.java renamed to java/com/engflow/cycleexample/class_b/ClassBTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.engflow.internship.cycleexample.class_b;
1+
package com.engflow.cycleexample.class_b;
22

3-
import com.engflow.internship.cycleexample.class_c.ClassC;
3+
import com.engflow.cycleexample.class_c.ClassC;
44
import org.junit.Test;
55
import static org.junit.Assert.assertTrue;
66

java/com/engflow/internship/cycleexample/class_c/BUILD renamed to java/com/engflow/cycleexample/class_c/BUILD

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ java_library(
55
srcs = ["ClassC.java"],
66
visibility = ["//visibility:public"],
77
deps = [
8-
"//java/com/engflow/internship/cycleexample/interface_a",
8+
"//java/com/engflow/cycleexample/interface_a:interface_a",
99
],
1010
)
1111

@@ -15,6 +15,6 @@ java_test(
1515
test_class = "com.engflow.internship.cycleexample.class_c.ClassCTest",
1616
deps = [
1717
":class_c",
18-
"//java/com/engflow/internship/cycleexample/class_a:class_a",
18+
"//java/com/engflow/cycleexample/class_a:class_a",
1919
],
2020
)

java/com/engflow/internship/cycleexample/class_c/ClassC.java renamed to java/com/engflow/cycleexample/class_c/ClassC.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.engflow.internship.cycleexample.class_c;
1+
package com.engflow.cycleexample.class_c;
22

3-
import com.engflow.internship.cycleexample.interface_a.InterfaceA;
3+
import com.engflow.cycleexample.interface_a.InterfaceA;
44

55
public class ClassC implements InterfaceA {
66
private InterfaceA classA;

java/com/engflow/internship/cycleexample/class_c/ClassCTest.java renamed to java/com/engflow/cycleexample/class_c/ClassCTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package com.engflow.internship.cycleexample.class_c;
1+
package com.engflow.cycleexample.class_c;
22

3-
import com.engflow.internship.cycleexample.class_a.ClassA;
3+
import com.engflow.cycleexample.class_a.ClassA;
44
import org.junit.Test;
55
import static org.junit.Assert.assertTrue;
66

java/com/engflow/internship/cycleexample/interface_a/InterfaceA.java renamed to java/com/engflow/cycleexample/interface_a/InterfaceA.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.engflow.internship.cycleexample.interface_a;
1+
package com.engflow.cycleexample.interface_a;
22

33
public interface InterfaceA {
44
void methodA(String input);

java/com/engflow/internship/cycleexample/interface_b/InterfaceB.java renamed to java/com/engflow/cycleexample/interface_b/InterfaceB.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.engflow.internship.cycleexample.interface_b;
1+
package com.engflow.cycleexample.interface_b;
22

33
public interface InterfaceB {
44
void methodB(String input);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
load("@rules_java//java:defs.bzl", "java_binary")
2+
3+
java_binary(
4+
name = "main",
5+
srcs = ["Main.java"],
6+
deps = [
7+
"//java/com/engflow/cycleexample/class_a:class_a",
8+
"//java/com/engflow/cycleexample/class_b:class_b",
9+
"//java/com/engflow/cycleexample/class_c:class_c",
10+
],
11+
data = [
12+
"//java/com/engflow/cycleexample/input:input",
13+
],
14+
main_class = "com.engflow.internship.cycleexample.main.Main",
15+
)

java/com/engflow/internship/cycleexample/main/Main.java renamed to java/com/engflow/cycleexample/main/Main.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.engflow.internship.cycleexample.main;
1+
package com.engflow.cycleexample.main;
22

3-
import com.engflow.internship.cycleexample.class_a.ClassA;
4-
import com.engflow.internship.cycleexample.class_b.ClassB;
5-
import com.engflow.internship.cycleexample.class_c.ClassC;
3+
import com.engflow.cycleexample.class_a.ClassA;
4+
import com.engflow.cycleexample.class_b.ClassB;
5+
import com.engflow.cycleexample.class_c.ClassC;
66

77
import java.io.BufferedReader;
88
import java.io.FileReader;
@@ -11,7 +11,7 @@
1111
public class Main {
1212
public static void main(String[] args) {
1313
//Input file path
14-
String fileName = "java/com/engflow/internship/cycleexample/input/input.txt";
14+
String fileName = "com/engflow/cycleexample/input/input.txt";
1515
StringBuilder content = new StringBuilder();
1616

1717
//Read the input file and store the content in a StringBuilder

java/com/engflow/internship/README.md

Lines changed: 0 additions & 13 deletions
This file was deleted.

java/com/engflow/internship/cycleexample/class_a/BUILD

Lines changed: 0 additions & 22 deletions
This file was deleted.

java/com/engflow/internship/cycleexample/main/BUILD

Lines changed: 0 additions & 15 deletions
This file was deleted.

java/com/engflow/internship/setinput/genreader/GenReader.java renamed to java/com/engflow/setinput/genreader/GenReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.engflow.internship.setinput.genreader;
1+
package com.engflow.setinput.genreader;
22

33
import java.io.File;
44
import java.io.FileReader;

java/com/engflow/internship/setinput/main/BUILD renamed to java/com/engflow/setinput/main/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ java_binary(
44
name = "main",
55
srcs = ["Main.java"],
66
deps = [
7-
"//java/com/engflow/internship/setinput/genreader",
7+
"//java/com/engflow/setinput/genreader:genreader",
88
],
99
data = glob(["java/com/engflow/internship/setinput/genfile/*.txt"]),
1010
main_class = "com.engflow.internship.setinput.main.Main",

0 commit comments

Comments
 (0)