am 4b7dd3e3: Merge change 26017 into eclair

Merge commit '4b7dd3e36c949729464029480ca41753c122d7f0' into eclair-plus-aosp

* commit '4b7dd3e36c949729464029480ca41753c122d7f0':
  improve the OTA progress bar
This commit is contained in:
Doug Zongker 2009-09-22 18:18:12 -07:00 committed by Android Git Automerger
commit 27495d857c
3 changed files with 44 additions and 31 deletions

View File

@ -87,6 +87,10 @@ class AmendGenerator(object):
'dur' seconds.""" 'dur' seconds."""
self.script.append("show_progress %f %d" % (frac, int(dur))) self.script.append("show_progress %f %d" % (frac, int(dur)))
def SetProgress(self, frac):
"""Not implemented in amend."""
pass
def PatchCheck(self, filename, *sha1): def PatchCheck(self, filename, *sha1):
"""Check that the given file (or MTD reference) has one of the """Check that the given file (or MTD reference) has one of the
given *sha1 hashes.""" given *sha1 hashes."""

View File

@ -100,9 +100,16 @@ class EdifyGenerator(object):
def ShowProgress(self, frac, dur): def ShowProgress(self, frac, dur):
"""Update the progress bar, advancing it over 'frac' over the next """Update the progress bar, advancing it over 'frac' over the next
'dur' seconds.""" 'dur' seconds. 'dur' may be zero to advance it via SetProgress
commands instead of by time."""
self.script.append("show_progress(%f, %d);" % (frac, int(dur))) self.script.append("show_progress(%f, %d);" % (frac, int(dur)))
def SetProgress(self, frac):
"""Set the position of the progress bar within the chunk defined
by the most recent ShowProgress call. 'frac' should be in
[0,1]."""
self.script.append("set_progress(%f);" % (frac,))
def PatchCheck(self, filename, *sha1): def PatchCheck(self, filename, *sha1):
"""Check that the given file (or MTD reference) has one of the """Check that the given file (or MTD reference) has one of the
given *sha1 hashes.""" given *sha1 hashes."""

View File

@ -577,28 +577,27 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
os.path.join(OPTIONS.target_tmp, "RECOVERY"))) os.path.join(OPTIONS.target_tmp, "RECOVERY")))
updating_recovery = (source_recovery.data != target_recovery.data) updating_recovery = (source_recovery.data != target_recovery.data)
# We reserve the last 0.3 of the progress bar for the # Here's how we divide up the progress bar:
# device-specific IncrementalOTA_InstallEnd() call at the end, which # 0.1 for verifying the start state (PatchCheck calls)
# will typically install a radio image. # 0.8 for applying patches (ApplyPatch calls)
progress_bar_total = 0.7 # 0.1 for unpacking verbatim files, symlinking, and doing the
if updating_boot: # device-specific commands.
progress_bar_total -= 0.1
AppendAssertions(script, target_zip) AppendAssertions(script, target_zip)
device_specific.IncrementalOTA_Assertions() device_specific.IncrementalOTA_Assertions()
script.Print("Verifying current system...") script.Print("Verifying current system...")
pb_verify = progress_bar_total * 0.3 * \ script.ShowProgress(0.1, 0)
(total_patched_size / total_verify_size = float(sum([i[2].size for i in patch_list]) + 1)
float(total_patched_size+total_verbatim_size+1)) if updating_boot:
total_verify_size += source_boot.size
for i, (fn, tf, sf, size) in enumerate(patch_list): so_far = 0
if i % 5 == 0:
next_sizes = sum([i[3] for i in patch_list[i:i+5]])
script.ShowProgress(next_sizes * pb_verify / (total_patched_size+1), 1)
for fn, tf, sf, size in patch_list:
script.PatchCheck("/"+fn, tf.sha1, sf.sha1) script.PatchCheck("/"+fn, tf.sha1, sf.sha1)
so_far += sf.size
script.SetProgress(so_far / total_verify_size)
if updating_boot: if updating_boot:
d = Difference(target_boot, source_boot, "imgdiff") d = Difference(target_boot, source_boot, "imgdiff")
@ -610,6 +609,8 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
script.PatchCheck("MTD:boot:%d:%s:%d:%s" % script.PatchCheck("MTD:boot:%d:%s:%d:%s" %
(source_boot.size, source_boot.sha1, (source_boot.size, source_boot.sha1,
target_boot.size, target_boot.sha1)) target_boot.size, target_boot.sha1))
so_far += source_boot.size
script.SetProgress(so_far / total_verify_size)
if patch_list or updating_recovery or updating_boot: if patch_list or updating_recovery or updating_boot:
script.CacheFreeSpaceCheck(largest_source_size) script.CacheFreeSpaceCheck(largest_source_size)
@ -630,6 +631,19 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
if i not in target_data] + if i not in target_data] +
["/system/recovery.img"]) ["/system/recovery.img"])
script.ShowProgress(0.8, 0)
total_patch_size = float(sum([i[1].size for i in patch_list]) + 1)
if updating_boot:
total_patch_size += target_boot.size
so_far = 0
script.Print("Patching system files...")
for fn, tf, sf, size in patch_list:
script.ApplyPatch("/"+fn, "-", tf.size, tf.sha1,
sf.sha1, "/tmp/patchtmp/"+fn+".p")
so_far += tf.size
script.SetProgress(so_far / total_patch_size)
if updating_boot: if updating_boot:
# Produce the boot image by applying a patch to the current # Produce the boot image by applying a patch to the current
# contents of the boot partition, and write it back to the # contents of the boot partition, and write it back to the
@ -641,6 +655,8 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
"-", "-",
target_boot.size, target_boot.sha1, target_boot.size, target_boot.sha1,
source_boot.sha1, "/tmp/patchtmp/boot.img.p") source_boot.sha1, "/tmp/patchtmp/boot.img.p")
so_far += target_boot.size
script.SetProgress(so_far / total_patch_size)
print "boot image changed; including." print "boot image changed; including."
else: else:
print "boot image unchanged; skipping." print "boot image unchanged; skipping."
@ -663,16 +679,7 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
else: else:
print "recovery image unchanged; skipping." print "recovery image unchanged; skipping."
script.Print("Patching system files...") script.ShowProgress(0.1, 10)
pb_apply = progress_bar_total * 0.7 * \
(total_patched_size /
float(total_patched_size+total_verbatim_size+1))
for i, (fn, tf, sf, size) in enumerate(patch_list):
if i % 5 == 0:
next_sizes = sum([i[3] for i in patch_list[i:i+5]])
script.ShowProgress(next_sizes * pb_apply / (total_patched_size+1), 1)
script.ApplyPatch("/"+fn, "-", tf.size, tf.sha1,
sf.sha1, "/tmp/patchtmp/"+fn+".p")
target_symlinks = CopySystemFiles(target_zip, None) target_symlinks = CopySystemFiles(target_zip, None)
@ -700,10 +707,6 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
script.DeleteFiles(to_delete) script.DeleteFiles(to_delete)
if verbatim_targets: if verbatim_targets:
pb_verbatim = progress_bar_total * \
(total_verbatim_size /
float(total_patched_size+total_verbatim_size+1))
script.ShowProgress(pb_verbatim, 5)
script.Print("Unpacking new files...") script.Print("Unpacking new files...")
script.UnpackPackageDir("system", "/system") script.UnpackPackageDir("system", "/system")
@ -726,8 +729,7 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip):
# permissions. # permissions.
script.AppendScript(temp_script) script.AppendScript(temp_script)
# Write the radio image, if necessary. # Do device-specific installation (eg, write radio image).
script.ShowProgress(0.3, 10)
device_specific.IncrementalOTA_InstallEnd() device_specific.IncrementalOTA_InstallEnd()
if OPTIONS.extra_script is not None: if OPTIONS.extra_script is not None: