Skip to content

Commit ab6db46

Browse files
yifanyangDavid Motsonashvili
authored and
David Motsonashvili
committed
Improve fireci CLI for macrobenchmark (#4359)
- Output more analysis results - Close figure after saving to file - Switch to `redfin` for more consistent results
1 parent c3b84a4 commit ab6db46

File tree

5 files changed

+17
-5
lines changed

5 files changed

+17
-5
lines changed

ci/fireci/fireciplugins/macrobenchmark/analyze/aggregator.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def mapper(quantile: float) -> str: return f'p{int(quantile * 100)}'
4747

4848
# Optionally save percentiles and dispersions to file
4949
if output_dir:
50+
output_dir.mkdir(parents=True, exist_ok=True)
5051
percentiles.to_json(output_dir.joinpath('percentiles.json'), orient='index')
5152
dispersions.to_json(output_dir.joinpath('dispersions.json'), orient='index')
5253
logger.info(f'Percentiles and dispersions saved in: {output_dir}')
@@ -63,8 +64,8 @@ def calculate_statistic_diff(
6364
):
6465
logger.info(f'Calculating statistic diff for trace "{trace}" on device "{device}" ...')
6566

66-
ctl_percentiles, _ = calculate_statistic(trace, device, control)
67-
exp_percentiles, _ = calculate_statistic(trace, device, experimental)
67+
ctl_percentiles, _ = calculate_statistic(trace, device, control, output_dir.joinpath("ctl"))
68+
exp_percentiles, _ = calculate_statistic(trace, device, experimental, output_dir.joinpath("exp"))
6869

6970
ctl_mean = ctl_percentiles.mean()
7071
exp_mean = exp_percentiles.mean()
@@ -74,6 +75,7 @@ def calculate_statistic_diff(
7475

7576
# Optionally save statistics to file
7677
if output_dir:
78+
output_dir.mkdir(parents=True, exist_ok=True)
7779
delta.to_json(output_dir.joinpath('delta.json'))
7880
percentage.to_json(output_dir.joinpath('percentage.json'))
7981
logger.info(f'Percentiles diff saved in: {output_dir}')

ci/fireci/fireciplugins/macrobenchmark/analyze/analyzer.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ def _process(data_points: List[DataPoint], output_dir: Path) -> None:
6565
with progressbar(trace_device_combinations) as combinations:
6666
for trace, device in combinations:
6767
combination_dir = output_dir.joinpath(trace, device)
68-
combination_dir.mkdir(parents=True, exist_ok=True)
6968
subset = _filter_subset(data, trace, device)
7069
calculate_statistic(trace, device, subset, combination_dir)
7170
plot_graph(trace, device, subset, combination_dir)
@@ -88,7 +87,6 @@ def _diff(
8887
with progressbar(trace_device_combinations) as combinations:
8988
for trace, device in combinations:
9089
combination_dir = output_dir.joinpath(trace, device)
91-
combination_dir.mkdir(parents=True, exist_ok=True)
9290

9391
ctl_subset = _filter_subset(ctl_data, trace, device)
9492
exp_subset = _filter_subset(exp_data, trace, device)

ci/fireci/fireciplugins/macrobenchmark/analyze/plotter.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414

1515
import logging
16+
import matplotlib.pyplot as plt
1617
import numpy as np
1718
import pandas as pd
1819
import seaborn as sns
@@ -27,20 +28,24 @@
2728
def plot_graph(trace: str, device: str, data: pd.DataFrame, output_dir: Path):
2829
logger.info(f'Plotting graphs for trace "{trace}" on device "{device}" ...')
2930

31+
output_dir.mkdir(parents=True, exist_ok=True)
32+
3033
unique_run_ids = len(data['run_id'].unique())
3134
col_wrap = int(np.ceil(np.sqrt(unique_run_ids)))
3235

3336
histograms = sns.displot(data=data, x='duration', kde=True, col="run_id", col_wrap=col_wrap)
3437
histograms.set_axis_labels(x_var=f'{trace} (ms)')
3538
histograms.set_titles(f'{device} ({{col_var}} = {{col_name}})')
3639
histograms.savefig(output_dir.joinpath('histograms.svg'))
40+
plt.close(histograms.fig)
3741

3842
distributions = sns.displot(
3943
data=data, x='duration', kde=True, height=8,
4044
hue='run_id', palette='muted', multiple='dodge'
4145
)
4246
distributions.set_axis_labels(x_var=f'{trace} (ms)').set(title=device)
4347
distributions.savefig(output_dir.joinpath('distributions.svg'))
48+
plt.close(distributions.fig)
4449

4550
logger.info(f'Graphs saved in: {output_dir}')
4651

@@ -54,6 +59,8 @@ def plot_diff_graph(
5459
):
5560
logger.info(f'Plotting distribution diff graph for trace "{trace}" on device "{device}" ...')
5661

62+
output_dir.mkdir(parents=True, exist_ok=True)
63+
5764
control_run_ids = control['run_id']
5865
experimental_run_ids = experimental['run_id']
5966
all_data = pd.concat([control, experimental])
@@ -66,5 +73,6 @@ def plot_diff_graph(
6673
)
6774
distribution_diff.set_axis_labels(x_var=f'{trace} (ms)').set(title=device)
6875
distribution_diff.savefig(output_dir.joinpath('distribution_diff.svg'))
76+
plt.close(distribution_diff.fig)
6977

7078
logger.info(f'Graph saved in: {output_dir}')

ci/fireci/fireciplugins/macrobenchmark/run/test_project.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ async def run(index: int, run_id: str) -> str:
8383
args += ['--type', 'instrumentation']
8484
args += ['--app', app_apk_path]
8585
args += ['--test', test_apk_path]
86-
args += ['--device', 'model=oriole,version=32,locale=en,orientation=portrait']
86+
args += ['--device', 'model=redfin,version=30,locale=en,orientation=portrait']
8787
args += ['--directories-to-pull', '/sdcard/Download']
8888
args += ['--results-bucket', 'fireescape-benchmark-results']
8989
args += ['--results-dir', run_id]

ci/fireci/setup.cfg

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ console_scripts =
2828
strict_optional = False
2929
[mypy-google.cloud]
3030
ignore_missing_imports = True
31+
[mypy-matplotlib]
32+
ignore_missing_imports = True
33+
[mypy-matplotlib.pyplot]
34+
ignore_missing_imports = True
3135
[mypy-pandas]
3236
ignore_missing_imports = True
3337
[mypy-pystache]

0 commit comments

Comments
 (0)