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."""
self.script.append("show_progress %f %d" % (frac, int(dur)))
def SetProgress(self, frac):
"""Not implemented in amend."""
pass
def PatchCheck(self, filename, *sha1):
"""Check that the given file (or MTD reference) has one of the
given *sha1 hashes."""

View File

@ -100,9 +100,16 @@ class EdifyGenerator(object):
def ShowProgress(self, frac, dur):
"""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)))
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):
"""Check that the given file (or MTD reference) has one of the
given *sha1 hashes."""

View File

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