test_backend_sizes.py calculates space in the binary each backend uses #7998
This commit is contained in:
parent
024ff6ed15
commit
642d4082ac
1 changed files with 78 additions and 0 deletions
78
bin/test_backend_sizes.py
Executable file
78
bin/test_backend_sizes.py
Executable file
|
@ -0,0 +1,78 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Test the sizes in the rclone binary of each backend by compiling
|
||||||
|
rclone with and without the backend and measuring the difference.
|
||||||
|
|
||||||
|
Run with no arguments to test all backends or a supply a list of
|
||||||
|
backends to test.
|
||||||
|
"""
|
||||||
|
|
||||||
|
all_backends = "backend/all/all.go"
|
||||||
|
|
||||||
|
# compile command which is more or less like the production builds
|
||||||
|
compile_command = ["go", "build", "--ldflags", "-s", "-trimpath"]
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
match_backend = re.compile(r'"github.com/rclone/rclone/backend/(.*?)"')
|
||||||
|
|
||||||
|
def read_backends():
|
||||||
|
"""
|
||||||
|
Reads the backends file, returning a list of backends and the original file
|
||||||
|
"""
|
||||||
|
with open(all_backends) as fd:
|
||||||
|
orig_all = fd.read()
|
||||||
|
# find the backends
|
||||||
|
backends = []
|
||||||
|
for line in orig_all.split("\n"):
|
||||||
|
match = match_backend.search(line)
|
||||||
|
if match:
|
||||||
|
backends.append(match.group(1))
|
||||||
|
return backends, orig_all
|
||||||
|
|
||||||
|
def write_all(orig_all, backend):
|
||||||
|
"""
|
||||||
|
Write the all backends file without the backend given
|
||||||
|
"""
|
||||||
|
with open(all_backends, "w") as fd:
|
||||||
|
for line in orig_all.split("\n"):
|
||||||
|
match = re.search(r'"github.com/rclone/rclone/backend/(.*?)"', line)
|
||||||
|
# Comment out line matching backend
|
||||||
|
if match and match.group(1) == backend:
|
||||||
|
line = "// " + line
|
||||||
|
fd.write(line+"\n")
|
||||||
|
|
||||||
|
def compile():
|
||||||
|
"""
|
||||||
|
Compile the binary, returning the size
|
||||||
|
"""
|
||||||
|
subprocess.check_call(compile_command)
|
||||||
|
return os.stat("rclone").st_size
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# change directory to the one with this script in
|
||||||
|
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
# change directory to the main rclone source
|
||||||
|
os.chdir("..")
|
||||||
|
|
||||||
|
to_test = sys.argv[1:]
|
||||||
|
backends, orig_all = read_backends()
|
||||||
|
if len(to_test) == 0:
|
||||||
|
to_test = backends
|
||||||
|
# Compile with all backends
|
||||||
|
ref = compile()
|
||||||
|
print(f"Total binary size {ref/1024/1024:.3f} MiB")
|
||||||
|
print("Backend,Size MiB")
|
||||||
|
for test_backend in to_test:
|
||||||
|
write_all(orig_all, test_backend)
|
||||||
|
new_size = compile()
|
||||||
|
print(f"{test_backend},{(ref-new_size)/1024/1024:.3f}")
|
||||||
|
# restore all file
|
||||||
|
with open(all_backends, "w") as fd:
|
||||||
|
fd.write(orig_all)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue