Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7d1b29bd authored by Kelvin Zhang's avatar Kelvin Zhang
Browse files

Run validation on user specified vabc_compression_param

During OTA generation, we check the vabc compression param specified by
target files, and override compression param to gz if the specified
compression method is unsupported. Run the same validation on
compression param passed by --vabc_compression_param as well.

Test: th
Change-Id: If855a2ee8c3c280c74efd5a67df229ab6c5709c5
parent a43c06e5
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -827,6 +827,15 @@ def ExtractOrCopyTargetFiles(target_file):
    return ExtractTargetFiles(target_file)


def ValidateCompressinParam(target_info):
  vabc_compression_param = OPTIONS.vabc_compression_param
  if vabc_compression_param:
    minimum_api_level_required = VABC_COMPRESSION_PARAM_SUPPORT[vabc_compression_param]
    if target_info.vendor_api_level < minimum_api_level_required:
      raise ValueError("Specified VABC compression param {} is only supported for API level >= {}, device is on API level {}".format(
          vabc_compression_param, minimum_api_level_required, target_info.vendor_api_level))


def GenerateAbOtaPackage(target_file, output_file, source_file=None):
  """Generates an Android OTA package that has A/B update payload."""
  # If input target_files are directories, create a copy so that we can modify
@@ -834,6 +843,8 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
  target_info = common.BuildInfo(OPTIONS.info_dict, OPTIONS.oem_dicts)
  if OPTIONS.disable_vabc and target_info.is_release_key:
    raise ValueError("Disabling VABC on release-key builds is not supported.")
  ValidateCompressinParam(target_info)
  vabc_compression_param = target_info.vabc_compression_param

  target_file = ExtractOrCopyTargetFiles(target_file)
  if source_file is not None:
@@ -862,10 +873,11 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
    if not source_info.is_vabc or not target_info.is_vabc:
      logger.info("Either source or target does not support VABC, disabling.")
      OPTIONS.disable_vabc = True
    if source_info.vabc_compression_param != target_info.vabc_compression_param:
    if OPTIONS.vabc_compression_param is None and \
            source_info.vabc_compression_param != target_info.vabc_compression_param:
      logger.info("Source build and target build use different compression methods {} vs {}, default to source builds parameter {}".format(
          source_info.vabc_compression_param, target_info.vabc_compression_param, source_info.vabc_compression_param))
      OPTIONS.vabc_compression_param = source_info.vabc_compression_param
      vabc_compression_param = source_info.vabc_compression_param

    # Virtual AB Compression was introduced in Androd S.
    # Later, we backported VABC to Android R. But verity support was not
@@ -879,9 +891,9 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
    assert "ab_partitions" in OPTIONS.info_dict, \
        "META/ab_partitions.txt is required for ab_update."
    source_info = None
    if target_info.vabc_compression_param:
    if OPTIONS.vabc_compression_param is None and vabc_compression_param:
      minimum_api_level_required = VABC_COMPRESSION_PARAM_SUPPORT[
          target_info.vabc_compression_param]
          vabc_compression_param]
      if target_info.vendor_api_level < minimum_api_level_required:
        logger.warning(
            "This full OTA is configured to use VABC compression algorithm"
@@ -891,10 +903,10 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
            " served to a device running old build, OTA might fail due to "
            "unsupported compression parameter. For safety, gz is used because "
            "it's supported since day 1.".format(
                target_info.vabc_compression_param,
                vabc_compression_param,
                minimum_api_level_required,
                target_info.vendor_api_level))
        OPTIONS.vabc_compression_param = "gz"
        vabc_compression_param = "gz"

  if OPTIONS.partial == []:
    logger.info(
@@ -950,6 +962,9 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
      logger.error("VABC XOR not supported on this vendor, disabling")
      OPTIONS.enable_vabc_xor = False

  if OPTIONS.vabc_compression_param:
    vabc_compression_param = OPTIONS.vabc_compression_param

  additional_args = []

  # Prepare custom images.
@@ -964,9 +979,9 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
  elif OPTIONS.partial:
    target_file = GetTargetFilesZipForPartialUpdates(target_file,
                                                     OPTIONS.partial)
  if OPTIONS.vabc_compression_param:
  if vabc_compression_param != target_info.vabc_compression_param:
    target_file = GetTargetFilesZipForCustomVABCCompression(
        target_file, OPTIONS.vabc_compression_param)
        target_file, vabc_compression_param)
  if OPTIONS.skip_postinstall:
    target_file = GetTargetFilesZipWithoutPostinstallConfig(target_file)
  # Target_file may have been modified, reparse ab_partitions