123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #!/usr/bin/env vpython3
- # Copyright 2020 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import copy
- import os
- import tempfile
- from typing import MutableMapping, Optional
- import unittest
- import binary_size_differ
- import binary_sizes
- from common import DIR_SOURCE_ROOT
- _EXAMPLE_BLOBS_BEFORE = """
- {
- "web_engine": [
- {
- "merkle": "77e876447dd2daaaab7048d646e87fe8b6d9fecef6cbfcc4af30b8fbfa50b881",
- "path": "locales/ta.pak",
- "bytes": 17916,
- "is_counted": true,
- "size": 16384
- },
- {
- "merkle": "5f1932b8c9fe954f3c3fdb34ab2089d2af34e5a0cef90cad41a1cd37d92234bf",
- "path": "lib/libEGL.so",
- "bytes": 226960,
- "is_counted": true,
- "size": 90112
- },
- {
- "merkle": "9822fc0dd95cdd1cc46b5c6632a928a6ad19b76ed0157397d82a2f908946fc34",
- "path": "meta.far",
- "bytes": 24576,
- "is_counted": false,
- "size": 16384
- },
- {
- "merkle": "090aed4593c4f7d04a3ad80e9971c0532dd5b1d2bdf4754202cde510a88fd220",
- "path": "locales/ru.pak",
- "bytes": 11903,
- "is_counted": true,
- "size": 16384
- }
- ]
- }
- """
- class BinarySizeDifferTest(unittest.TestCase):
- def ChangePackageSize(
- self,
- packages: MutableMapping[str, binary_sizes.PackageSizes],
- name: str,
- compressed_increase: int,
- uncompressed_increase: Optional[int] = None):
- if uncompressed_increase is None:
- uncompressed_increase = compressed_increase
- original_package = packages[name]
- new_package = binary_sizes.PackageSizes(
- compressed=original_package.compressed + compressed_increase,
- uncompressed=original_package.uncompressed + uncompressed_increase)
- packages[name] = new_package
- def testComputePackageDiffs(self):
- # TODO(1309977): Disabled on Windows because Windows doesn't allow opening a
- # NamedTemporaryFile by name.
- if os.name == 'nt':
- return
- with tempfile.NamedTemporaryFile(mode='w') as before_file:
- before_file.write(_EXAMPLE_BLOBS_BEFORE)
- before_file.flush()
- blobs = binary_sizes.ReadPackageBlobsJson(before_file.name)
- sizes = binary_sizes.GetPackageSizes(blobs)
- binary_sizes.WritePackageSizesJson(before_file.name, sizes)
- # No change.
- growth = binary_size_differ.ComputePackageDiffs(before_file.name,
- before_file.name)
- self.assertEqual(growth['status_code'], 0)
- self.assertEqual(growth['compressed']['web_engine'], 0)
- after_file = tempfile.NamedTemporaryFile(mode='w', delete=True)
- after_file.close()
- try:
- # Increase a blob, but below the limit.
- other_sizes = copy.deepcopy(sizes)
- self.ChangePackageSize(other_sizes, 'web_engine', 8 * 1024)
- binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
- growth = binary_size_differ.ComputePackageDiffs(before_file.name,
- after_file.name)
- self.assertEqual(growth['status_code'], 0)
- self.assertEqual(growth['compressed']['web_engine'], 8 * 1024)
- # Increase beyond the limit (adds another 8k)
- self.ChangePackageSize(other_sizes, 'web_engine', 8 * 1024 + 1)
- binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
- growth = binary_size_differ.ComputePackageDiffs(before_file.name,
- after_file.name)
- self.assertEqual(growth['status_code'], 1)
- self.assertEqual(growth['compressed']['web_engine'], 16 * 1024 + 1)
- # Increase beyond the limit, but compressed does not increase.
- binary_sizes.WritePackageSizesJson(before_file.name, other_sizes)
- self.ChangePackageSize(other_sizes,
- 'web_engine',
- 16 * 1024 + 1,
- uncompressed_increase=0)
- binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
- growth = binary_size_differ.ComputePackageDiffs(before_file.name,
- after_file.name)
- self.assertEqual(growth['uncompressed']['web_engine'], 0)
- self.assertEqual(growth['status_code'], 0)
- self.assertEqual(growth['compressed']['web_engine'], 16 * 1024 + 1)
- # Increase beyond the limit, but compressed goes down.
- binary_sizes.WritePackageSizesJson(before_file.name, other_sizes)
- self.ChangePackageSize(other_sizes,
- 'web_engine',
- 16 * 1024 + 1,
- uncompressed_increase=-4 * 1024)
- binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
- growth = binary_size_differ.ComputePackageDiffs(before_file.name,
- after_file.name)
- self.assertEqual(growth['status_code'], 0)
- self.assertEqual(growth['compressed']['web_engine'], 16 * 1024 + 1)
- # Increase beyond the second limit. Fails, regardless of uncompressed.
- binary_sizes.WritePackageSizesJson(before_file.name, other_sizes)
- self.ChangePackageSize(other_sizes,
- 'web_engine',
- 100 * 1024 + 1,
- uncompressed_increase=-4 * 1024)
- binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
- growth = binary_size_differ.ComputePackageDiffs(before_file.name,
- after_file.name)
- self.assertEqual(growth['status_code'], 1)
- self.assertEqual(growth['compressed']['web_engine'], 100 * 1024 + 1)
- finally:
- os.remove(after_file.name)
- if __name__ == '__main__':
- unittest.main()
|