Commit graph

4784 commits

Author SHA1 Message Date
Tao Bao
dd7a4b5264 Merge "roots: Fix an issue with volume_for_path()." 2017-10-02 20:48:50 +00:00
Treehugger Robot
88aa128e22 Merge "Use -Werror in bootable/recovery" 2017-10-02 20:25:32 +00:00
Chih-Hung Hsieh
5aa77ca73d Use -Werror in bootable/recovery
* Move -Werror from cppflags to cflags.

Bug: 66996870
Test: build with WITH_TIDY=1
Change-Id: I59147fe24d8b48a0403c67ba07d4d384b8e9c5a3
2017-10-02 11:45:48 -07:00
Tao Bao
3e18f2bf40 roots: Fix an issue with volume_for_path().
The earlier commit in 2dfc1a3898
unintentionally changed the behavior. It gives a different result when
looking up non-existent mount points (e.g. /cache on marlin).

The logic behind volume_for_path("/xyz") is unclear:
- It's fine to return non-null value if it's called by
  ensure_path_mounted() before accessing that file "/xyz". (Just based
  on the function name, we're not actually having this case.)
- It should return nullptr if the caller is interested in the existence
  of that particular mount point "/xyz".

This CL renames the function to volume_for_mount_point(), which does an
exact match by querying the given mount point from libfs_mgr. The former
volume_for_path() has been moved down to function scope for serving
ensure_path_mounted() only.

Test: Build and boot into recovery on bullhead and marlin respectively.
      'View recovery logs'.
Test: 'Mount /system'
Test: 'Apply update from ADB'
Change-Id: I1a16390f57540cae08a2b8f3d439d17886975217
2017-10-02 11:18:13 -07:00
Tao Bao
e8ee697364 Merge "roots: Remove #include "common.h"." 2017-10-02 17:44:27 +00:00
Tao Bao
475794a9af Merge "otafault: Move to soong." 2017-09-29 21:07:21 +00:00
Tao Bao
4289deaf82 Merge "otafault: Move headers under otafault/." 2017-09-29 19:30:16 +00:00
Tao Bao
a26e32d2a3 otafault: Move to soong.
Test: mmma bootable/recovery
Change-Id: I5f2520ea457ba66743aa3aa1d5b3b488a93084a3
2017-09-29 11:05:24 -07:00
Tao Bao
ad774b2970 roots: Remove #include "common.h".
And add the missing include of <string.h> (e.g. for strcmp(3)).

Minor update to the arg of fs_mgr_get_entry_for_mount_point(), which now
accepts std::string.

Test: mmma bootable/recovery
Change-Id: I9cb8c31fe71b5a053f4d84bf1aba00e96c02ed03
2017-09-29 11:03:08 -07:00
Tianjie Xu
e687c5a1e1 Merge "Move the png open and destroy functions into a class" 2017-09-29 17:34:20 +00:00
Tao Bao
d33b2f86b7 otafault: Move headers under otafault/.
Test: mmma bootable/recovery
Change-Id: I3ceb72f703c7c2857d656c137d71baa1fccd8238
2017-09-29 10:29:53 -07:00
Tao Bao
50f5a54a1e Merge "otafault: Remove the use of LOCAL_WHOLE_STATIC_LIBRARIES." 2017-09-29 17:08:01 +00:00
Tao Bao
d9373cf621 Merge "otafault: Clean up header inclusion." 2017-09-29 16:10:41 +00:00
Treehugger Robot
846f307c6f Merge "Integer overflow observed while formatting volume" 2017-09-29 05:09:23 +00:00
Tao Bao
646b05a66c otafault: Remove the use of LOCAL_WHOLE_STATIC_LIBRARIES.
Commit d80a99883d has explanation of
potential issues.

Test: mmma bootable/recovery
Change-Id: I25ca9920952b7bbdd8a661d9dc90962431410bc4
2017-09-28 18:25:10 -07:00
Tao Bao
ac27a7a987 otafault: Clean up header inclusion.
Remove unneeded #includes. Also remove unneeded dependency on libz and
libselinux.

Test: mmma bootable/recovery
Change-Id: Ic8f7f46f4b89762dee384921504489de75320ac0
2017-09-28 18:25:04 -07:00
Tianjie Xu
acba38c288 Move the png open and destroy functions into a class
The open_png() function used to open the png file but didn't close it;
and this caused the leak of fd. However, we cannot close the file inside
open_png() because the png file needs to remain open until the outer
function finishes parsing the file and destroys the png struct.

This CL addresses this issue by implementing a PngReader class to handle
the creation/destruction of the png struct.

Bug: 67010912
Test: Run graphic tests; also run locale tests and check fd.
Change-Id: I9a803b3cd8c16f16a9ffe8f0acc7fe0f42e95eb0
2017-09-28 15:29:37 -07:00
Tao Bao
3a1587f655 Merge "roots: volume_for_path() parses and tries prefixes." 2017-09-28 21:12:53 +00:00
Tao Bao
2dfc1a3898 roots: volume_for_path() parses and tries prefixes.
Commit cc323958f99e40fea06c511656c69c0b2e2d47f7 in system/core has
changed fs_mgr_get_entry_for_mount_point() to do an exact match only,
which breaks the behavior in volume_for_path().

This CL changes the volume_for_path() implementation to parse and pass
prefixes locally. For a given path like "/cache/recovery/last_log", it
will in turn attempt the prefixes of "/cache/recovery/last_log",
"/cache/recovery", "/cache", "/" and return the first hit.

Bug: 63912287
Test: Build and boot into recovery image on bullhead. 'View recovery
      logs' works.
Change-Id: Ic8635b0939649dd5cc9ca501ebc3a2d1fbf5849d
2017-09-27 13:22:17 -07:00
Tianjie Xu
4c7608f3ca Merge "Add a new option in recovery menu to test the background texts" 2017-09-27 17:39:05 +00:00
Tianjie Xu
29d5575fa8 Add a new option in recovery menu to test the background texts
Add a new option "Run locale test" to check the background text
images (i.e. texts for "erasing", "error", "no_command" and "installing"
with different locales.)

Use volume up/down button to cycle through all the locales embedded in
the png file, and power button to go back to recovery main menu.

Test: Run locale test with bullhead.
Change-Id: Ib16e119f372110cdb5e611ef497b0f9b9b418f51
2017-09-27 00:27:38 -07:00
Tao Bao
151f0820ac Merge "clang-format: Remove the override of PenaltyExcessCharacter." 2017-09-27 00:57:55 +00:00
Tianjie Xu
7f54fe8841 Merge "Output split information for imgdiff when handling large apks" 2017-09-26 23:57:40 +00:00
Tao Bao
a1f6980af7 clang-format: Remove the override of PenaltyExcessCharacter.
So it falls back (from 32) to the default value in Google style:
PenaltyExcessCharacter: 1000000

This way it no longer allows lines exceeding the 100-char limit.

const char* x[] = { "long enough so that the line has 101 chars", nullptr };

  would become

const char* x[] = { "long enough so that the line has 101 chars",
                    nullptr };

Test: clang-format the line above.
Change-Id: If578dbdae55d6d81f5e47889890e2afa12b4199a
2017-09-26 15:07:45 -07:00
Tianjie Xu
c0123e0c3a Merge "update the recovery background image with new translation" 2017-09-21 22:05:29 +00:00
Tianjie Xu
82582b4562 Output split information for imgdiff when handling large apks
Add a mandatory option in imgdiff to write the split info (i.e.
patch_size, tgt_size, src_ranges) to file when handling large apks.
Therefore, the caller of imgdiff can create split transfers based on
the info.

Bug: 63542719
Test: unit tests pass
Change-Id: I853d55d1f999fd576474faa81077f7307f4d856d
2017-09-21 11:42:16 -07:00
Tianjie Xu
4a47a3e41f update the recovery background image with new translation
Test: recovery manual test && run graphic test under recovery
Change-Id: I2bc514a07a12276f42adb1eec5e208190b4602f2
2017-09-19 23:36:28 -07:00
Treehugger Robot
a815d3fb59 Merge "recovery: reduce overall boot time" 2017-09-18 23:37:59 +00:00
Mark Salyzyn
61744b95d0 recovery: reduce overall boot time
Move recovery-refresh and recovery-persist to onshot exec_background.
synchronous exec commands impact boot time.

Test: none
Bug: 65736247
Change-Id: Ic065c27b21f9bacbadee1e8c07bb15e2c41e0082
2017-09-18 13:55:32 -07:00
Tianjie Xu
ca5a071307 Merge "Fix the dangling pointer when setting up arguments of imgdiff" 2017-09-17 21:39:09 +00:00
Tianjie Xu
8ba7c45e0b Fix the dangling pointer when setting up arguments of imgdiff
Test: unit tests pass
Change-Id: If884e805ccd4df73671ab3436eb90860786ff6c9
2017-09-13 14:05:42 -07:00
Tao Bao
6e7df82c7b Merge "Remove EXPAND/STRINGIFY macros." 2017-09-13 20:53:53 +00:00
Tao Bao
bd0ddcd5e8 Remove EXPAND/STRINGIFY macros.
This reverts commit 8be0f39fec to reland
the change that removes EXPAND/STRINGIFY macros.

It's error-prone by putting anything into a string (e.g.
EXPAND(RECOVERY_API_VERSION) would become "RECOVER_API_VERSION" if we
forgot to pass -DRECOVERY_API_VERSION=3).

The initial attempt put RECOVERY_API_VERSION into common.h, which might
be included by device-specific codes but without defining that when
compiling the module. This CL avoids the issue by using a constant
in the header, with a static_assert in recovery.cpp that guards the
consistency.

Test: recovery_component_test
Test: Sideload OTAs on bullhead and sailfish respectively.
Change-Id: I12af3f73392a85554ba703f04970ec9d984ccbaa
2017-09-13 10:51:09 -07:00
Tianjie Xu
64307daf5b Merge "Close cmd_pipe properly after updater test finishes" 2017-09-12 19:14:38 +00:00
Abhishek Arpure
4fec8e9e9a Integer overflow observed while formatting volume
While calculating volume size, get_block_device_size() returns
u64 value but the returned value is assigned in ssize_t variable.
This may cause integer overflow if the volume size is beyond
ssize_t limit.

Use int64_t instead of ssize_t in get_file_size() and explicitly check
for overflow to fix the issue.

Bug: 65001754
Test: mmma bootable/recovery
Change-Id: I91eb30bff0bf7dcc48678efc2f414d2b79af6d0d
2017-09-11 17:13:15 -07:00
Tao Bao
fc570c317b Merge "ui: Move locale and friends into ScreenRecoveryUI class." 2017-09-11 21:43:03 +00:00
Tianjie Xu
79327ac21d Close cmd_pipe properly after updater test finishes
Otherwise the test may fail after a large number of iterations due to
file open failure.

Bug: 65430057
Test: run recovery_component_test on sailfish for 2000 iterations.
Change-Id: I0d456284d6064467038911d63eade95740cbec2c
2017-09-11 14:38:49 -07:00
Tao Bao
efb49add97 ui: Move locale and friends into ScreenRecoveryUI class.
Localized texts only make sense on devices with screens.

Test: Run fake OTA on angler; check the on-screen texts.
Change-Id: I3a644294c8b1f2056cfb78b2d61a598b8ddf2acf
2017-09-11 12:19:32 -07:00
Tao Bao
568644197f Merge "ui: Remove text_top_." 2017-09-11 19:06:12 +00:00
Tao Bao
79a23b30d2 Merge "ui: Refactor the declaration orders." 2017-09-11 18:06:24 +00:00
Tao Bao
7577965ba1 ui: Refactor the declaration orders.
By grouping similar kinds together, in an order of types, constants,
ctor/dtor, all other methods and data members.

Also rename ScreenRecoveryUI::density_ to ScreenRecoveryUI::kDensity to
align with others.

Test: mmma bootable/recovery
Change-Id: I1ba2d15c05ba7be8c39762f3d9dadf1fb2130de4
2017-09-10 11:36:54 -07:00
Tao Bao
cb5524c23a ui: Remove text_top_.
After the cleanup to WearRecoveryUI, text_top_ now always equals to
((text_row_ + 1) % text_rows_).

Test: Check the recovery UI and 'View recovery logs'.
Change-Id: I69a7f377bbd990db2194f9d3efae257c323c06a8
2017-09-08 23:31:31 -07:00
Tao Bao
fa4f014063 Merge "wear_ui: Remove Print()/ShowFile()/PutChar()." 2017-09-08 21:44:40 +00:00
Tao Bao
f51bb0f2d6 Merge "ui: Manage menu_ with std::vector." 2017-09-08 21:43:41 +00:00
Tianjie Xu
9f48641784 Merge "Improve imgdiff for large zip files" 2017-09-08 20:38:52 +00:00
Tao Bao
f05e2bcff2 wear_ui: Remove Print()/ShowFile()/PutChar().
They're mostly identical to the ones in ScreenRecoveryUI, except for the
(legacy) use of 'text_top_'. Because wear_ui.cpp misses the change in
[1] that uses an alternate screen for viewing recovery logs.

Also clean up the included headers.

[1] commit c049163234 ('Add an alternate
screen for viewing recovery logs.').

Test: Build a wearable target recovery; `View recovery logs`.
Change-Id: Ic9208c42a11c037469f5b073ef7d9b721c14d1f3
2017-09-08 12:22:43 -07:00
Tao Bao
e15d7a5104 ui: Manage menu_ with std::vector.
Prior to this CL, menu_ is allocated with a fixed length of text_rows_.
However, because we support scrollable menu in wear_ui, there might be
more menu entries than text_rows_, which would lead to out-of-bounds
array access. This CL addresses the issue by switching to std::vector.

Bug: 65416558
Test: Run 'View recovery logs' on angler.
Test: Set large margin height that leaves text_rows less than 21. Then
      run 'View recovery logs' with 21 menu entries.
Change-Id: I5d4e3a0a097039e1104eda7d494c6269053dc894
2017-09-08 10:50:07 -07:00
Tianjie Xu
2903cddb58 Improve imgdiff for large zip files
Due to the cache size limit for OTA generation, we used to split large
zip files linearly into pieces and do bsdiff on them. As a result, i) we
lose the advantage of imgdiff; ii) if there's an accidental order change
of some huge files inside the zip, we'll create an insanely large patch.

This patch splits the src&tgt more smartly based on the zip entry_name.
If the entry_name is empty or no matching source is found for a target
chunk, we'll skip adding its source and later do a bsdiff against the
whole split source image (this rarely happens in our use cases except
for the metadata inside a ziparchive).

After the split, the target pieces are continuous and block aligned,
while the sources pieces are mutually exclusive. (Some of the source
blocks may not be used if there's no matching entry_name in the target.)
Then we will generate patches accordingly between each split image
pairs.

Afterwards, if we apply imgpatch to each pair of split source/target
images and add up the patched result, we can get back the original
target image.

For example:
Input: [src_image, tgt_image]
Split: [src-0,tgt-0; src-1,tgt-1, src-2,tgt-2]
Diff:  [  patch-0;     patch-1;    patch-2]

Patch: [(src-0,patch-0)=tgt-0; (src-1,patch-1)=tgt-1;
(src-2,patch-2)=tgt-2;]
Append: [tgt-0 + tgt-1 + tgt-2 = tgt_image]

Peformance:
For the small package in b/34220646, we decrease the patch size of
chrome.apk dramatically from 30M to 400K due to the order change of
two big .so files.

On two versions of angler, I also observe decent patch size decrease.
For chrome.apk, we reduced the size from 5.9M to 3.2M; and for
vevlet.apk from 8.0M to 6.5M.

Bug: 34220646
Test: recovery component test && apply imgdiff & imgpatch on two
chrome.apk
Change-Id: I145d802984fa805efbbac9d01a2e64d82ef9728b
2017-09-05 15:09:58 -07:00
Tao Bao
8c753f6253 Merge "wear_ui: Remove PrintOnScreenOnly() and PrintV()." 2017-09-01 22:26:31 +00:00
Tao Bao
ee8a96a581 wear_ui: Remove PrintOnScreenOnly() and PrintV().
They're just copy/pastes from the base class (ScreenRecoveryUI).

Test: mmma bootable/recovery
Change-Id: I341416107a14d89d3366bba757da0b1abb988b15
2017-09-01 11:51:11 -07:00