diff --git a/tests/conditional_compilation/conftest.py b/tests/conditional_compilation/conftest.py index 6c4202c1e44..0f67798fbfd 100644 --- a/tests/conditional_compilation/conftest.py +++ b/tests/conditional_compilation/conftest.py @@ -58,6 +58,11 @@ def pytest_addoption(parser): type=Path, help="Artifacts directory where tests write output or read input", ) + parser.addoption( + "--openvino_ref", + type=Path, + help="Path to root directory with installed OpenVINO", + ) def pytest_generate_tests(metafunc): @@ -103,3 +108,9 @@ def collector_dir(request): def artifacts(request): """Fixture function for command-line option.""" return request.config.getoption("artifacts") + + +@pytest.fixture(scope="session") +def openvino_root_dir(request): + """Fixture function for command-line option.""" + return request.config.getoption("openvino_ref") diff --git a/tests/conditional_compilation/test_size_tracking.py b/tests/conditional_compilation/test_size_tracking.py new file mode 100644 index 00000000000..f80a0b49b2d --- /dev/null +++ b/tests/conditional_compilation/test_size_tracking.py @@ -0,0 +1,38 @@ +from pathlib import Path +import logging + +from path_utils import get_lib_path # pylint: disable=import-error + + +def get_lib_sizes(path, libraries): + """Function for getting lib sizes by lib names""" + assert Path.exists(path), f'Directory {path} isn\'t created' + result = {} + error_lib = [] + for lib in libraries: + try: + result[lib] = Path(path).joinpath(get_lib_path(lib)).stat().st_size + except FileNotFoundError as error: + error_lib.append(str(error)) + assert len(error_lib) == 0, 'Following libraries couldn\'t be found: \n{}'.format('\n'.join(error_lib)) + return result + + +def test_size_tracking_libs(openvino_root_dir, test_id, model, artifacts): + log = logging.getLogger('size_tracking') + libraries = ['inference_engine_transformations', 'MKLDNNPlugin', 'ngraph'] + + ref_libs_size = get_lib_sizes(openvino_root_dir, libraries) + install_prefix = artifacts / test_id / 'install_pkg' + lib_sizes = get_lib_sizes(install_prefix, libraries) + + for lib in libraries: + lib_size_diff = ref_libs_size[lib] - lib_sizes[lib] + lib_size_diff_percent = lib_size_diff / ref_libs_size[lib] * 100 + log.info('{}: old - {}kB; new - {}kB; diff = {}kB({:.2f}%)'.format(lib, + ref_libs_size[lib] / 1024, + lib_sizes[lib] / 1024, + lib_size_diff / 1024, + lib_size_diff_percent)) + res = [lib for lib in libraries if lib_sizes[lib] > ref_libs_size[lib]] + assert len(res) == 0, f'These libraries: {res} have increased in size!' diff --git a/tests/lib/path_utils.py b/tests/lib/path_utils.py index 5d9718996a0..cd86a36d89d 100644 --- a/tests/lib/path_utils.py +++ b/tests/lib/path_utils.py @@ -6,6 +6,8 @@ """ import os +import sys +from pathlib import Path def expand_env_vars(obj): @@ -20,3 +22,29 @@ def expand_env_vars(obj): else: obj = os.path.expandvars(obj) return obj + + +def get_os_name(): + """Function for getting OS name""" + if sys.platform == "win32": + os_name = 'Windows' + else: + os_name = 'Linux' + return os_name + + +def get_lib_path(lib_name): + """Function for getting absolute path in OpenVINO directory to specific lib""" + os_name = get_os_name() + all_libs = { + 'inference_engine_transformations': { + 'Windows': Path('deployment_tools/inference_engine/bin/intel64/Release/inference_engine_transformations.dll'), + 'Linux': Path('deployment_tools/inference_engine/lib/intel64/libinference_engine_transformations.so')}, + 'MKLDNNPlugin': { + 'Windows': Path('deployment_tools/inference_engine/bin/intel64/Release/MKLDNNPlugin.dll'), + 'Linux': Path('deployment_tools/inference_engine/lib/intel64/libMKLDNNPlugin.so')}, + 'ngraph': { + 'Windows': Path('deployment_tools/ngraph/lib/ngraph.dll'), + 'Linux': Path('deployment_tools/ngraph/lib/libngraph.so')} + } + return all_libs[lib_name][os_name]