mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-11-25 05:03:05 +00:00
edc1265c07
Finally all pieces are together and we can start uploading the metrics. There's also a typo in catapult converter that's fixed. Tested via led presubmit with few modifidcations to allow upload happen in a presubmit runner. TEST=https://chromeperf.appspot.com/report?sid=a7f57b2395b43aeaa65009589e17bc31548b78cb58daae21f12f70ee24ed9578 BUG=b:257303497 Change-Id: I351586f52ef18be95b14cc3310bb05db4f49a101 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/4249502 Reviewed-by: Dennis Kempin <denniskempin@google.com> Commit-Queue: Zihan Chen <zihanchen@google.com>
149 lines
4.3 KiB
Python
Executable file
149 lines
4.3 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# Copyright 2023 The ChromiumOS Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import argparse
|
|
import json
|
|
import tempfile
|
|
import os
|
|
import sys
|
|
import time
|
|
import pathlib
|
|
|
|
sys.path.append(os.path.dirname(sys.path[0]))
|
|
|
|
from impl.common import cwd, CROSVM_ROOT, cmd
|
|
|
|
BOT_MASTERS = "crosvm.ci"
|
|
METRIC_NAME = "file_size"
|
|
TEST_SUITE_NAME = "crosvm.binary_output"
|
|
CHROMEPERF_URL = "https://chromeperf.appspot.com"
|
|
|
|
|
|
# TODO(zihanchen): upload binary size to db for backup
|
|
# TODO(zihanchen): Add usage
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"--base-dir",
|
|
help="Base dir of cargo target, used to convert target path to shorter relative path, must "
|
|
"be absolute",
|
|
)
|
|
parser.add_argument(
|
|
"--target-name",
|
|
help="Target name of binary",
|
|
)
|
|
parser.add_argument(
|
|
"--target-path",
|
|
help="Path to binary, must be absolute if base dir is provided",
|
|
required=True,
|
|
)
|
|
parser.add_argument("--upload", action="store_true")
|
|
parser.add_argument(
|
|
"--catapult-tool-path",
|
|
help="Path to catapult dashboard upload tool",
|
|
default="/tools/catapult",
|
|
)
|
|
parser.add_argument(
|
|
"--builder-name",
|
|
help="Name of builder generating binaries",
|
|
)
|
|
parser.add_argument("--log-url", help="Url to build execution")
|
|
parser.add_argument("--build-version", help="Version of crosvm corresponding to the results")
|
|
|
|
args = parser.parse_args()
|
|
if args.base_dir:
|
|
if not os.path.isabs(args.base_dir):
|
|
raise AssertionError("Base dir mush be and absolute path")
|
|
if not os.path.isabs(args.target_path):
|
|
raise AssertionError("When base dir is provided, target path must be an absolute path")
|
|
if not os.path.commonpath([args.base_dir, args.target_path]) == os.path.normpath(
|
|
args.base_dir
|
|
):
|
|
raise AssertionError("Base dir must be a parent directory of target path")
|
|
output_path = (
|
|
os.path.relpath(args.target_path, start=args.base_dir)
|
|
if args.base_dir
|
|
else os.path.normpath(args.target_path)
|
|
)
|
|
|
|
# output path can contain duplicated target names, dedup before printing
|
|
if len(output_path.split("/")) > 2 and output_path.split("/")[0] == output_path.split("/")[1]:
|
|
output_path = "/".join(output_path.split("/")[1:])
|
|
|
|
file_size = os.path.getsize(args.target_path)
|
|
size_dict_for_gerrit = {output_path: file_size}
|
|
print(json.dumps(size_dict_for_gerrit))
|
|
|
|
if not args.upload:
|
|
return
|
|
|
|
fuchiaperf_fd, fuchiaperf_file_path = tempfile.mkstemp(suffix=".fuchisaperf.json", text=True)
|
|
|
|
fuchiaperf_file = os.fdopen(fuchiaperf_fd, "w")
|
|
|
|
fuchsiaperf_data = [
|
|
{
|
|
"test_name": output_path,
|
|
"test_suite": TEST_SUITE_NAME,
|
|
"unit": "bytes",
|
|
"values": [file_size],
|
|
"metric": METRIC_NAME,
|
|
}
|
|
]
|
|
|
|
json.dump(fuchsiaperf_data, fuchiaperf_file)
|
|
fuchiaperf_file.close()
|
|
|
|
with open(fuchiaperf_file_path, "r") as f:
|
|
print(f.read(), file=sys.stderr)
|
|
|
|
_, catapult_file_path = tempfile.mkstemp(suffix=".json", text=True)
|
|
|
|
with cwd(CROSVM_ROOT / "tools" / "impl" / "catapult_converter"):
|
|
cmd(
|
|
"cargo",
|
|
"run",
|
|
"--",
|
|
"--input",
|
|
fuchiaperf_file_path,
|
|
"--execution-timestamp-ms",
|
|
str(int(time.time() * 1000)),
|
|
"--masters",
|
|
BOT_MASTERS,
|
|
"--bots",
|
|
args.builder_name,
|
|
"--log-url",
|
|
args.log_url,
|
|
*(
|
|
(
|
|
"--product-versions",
|
|
args.build_version,
|
|
)
|
|
if args.build_version
|
|
else ()
|
|
)
|
|
).write_to(pathlib.Path(catapult_file_path))
|
|
|
|
# print catapult file to stderr so we retain a copy
|
|
with open(catapult_file_path, "r") as f:
|
|
print(f.read(), file=sys.stderr)
|
|
|
|
print(
|
|
cmd(
|
|
args.catapult_tool_path,
|
|
"upload",
|
|
'--service-account-json=":gce"',
|
|
"--url",
|
|
CHROMEPERF_URL,
|
|
catapult_file_path,
|
|
).stdout(),
|
|
file=sys.stderr,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|