Commit Graph

244 Commits

Author SHA1 Message Date
Oriol Prieto Gasco
0b9d289e2a Add is_exported field to aconfig.proto
When a flag is exported, it can be read by code built in other containers. By
default flags are not exported. Set this to true if your flag is gating
a public API which may be called from other containers (typically, a
flag used in @FlaggedAPI annotations).

Test: atest aconfig.test
Bug: 311152500
Change-Id: I53e3ed18b96c1518f04172d5933ef96b41ccda7e
2023-11-20 21:30:18 +00:00
Wonsik Kim
d4d952f9d2 aconfig: move cache_ as a memeber
provider_ object relies on cache_ vector to be alive, but the order
of destruction between these objects at exit are not guaranteed.
This can lead to crash at the exit especially on ASAN build.
By putting cache_ as a member it is guaranteed that cache_ is not
destructed until provider_ is destructed.

Test: m ; m AconfigDemoActivity
Test: atest aconfig.test
Test: observe no crash on _hwasan build
Change-Id: If9e23e99c501bf8f06fcab003622948b9e730352
2023-11-20 09:50:52 -08:00
Mårten Kongstad
bc76a3d9a0 aconfig: rename test flag disabled_rw_2 -> disabled_rw_in_other_namespace
The flag `disabled_rw_2` is used to verify that aconfig can
auto-generate code for flags in different namespaces. Rename the flag to
`disabled_rw_in_other_namespace` to highlight that it belongs to a
different namespace than the other flags.

This CL is a semantic change only.

Bug: None
Test: atest aconfig.test
Change-Id: Ib82fdce0ca3f7cd56b9b3f80e44fe424a03a2ae4
2023-11-17 09:37:06 +01:00
Ted Bauer
c3073786b3 Revert^2 "Cache Java codegen'd flags in static member variables."
This reverts commit efda207c09.

Reason for revert: this unrevert contains the fix for b/311187402

Test: cargo test
Change-Id: I210aebd30edd864a7c141ede336c12aebf4f1fcd
2023-11-16 12:26:41 -05:00
Ted Bauer
efda207c09 Revert "Cache Java codegen'd flags in static member variables."
This reverts commit afe55106e5.

Reason for revert: causes a bug b/311187402

Change-Id: Ic3f56fbb66a6412cd702cebd9e4247032f950324
2023-11-15 16:52:02 +00:00
Ted Bauer
afe55106e5 Cache Java codegen'd flags in static member variables.
By caching flag values directly in member variables instead of caching
a HashMap and accessing that, flag reads avoid `hashCode()`, map
lookup, and Boolean.parse runtime costs. Flag reads are turning out
to have performance problems in hot paths, so this should help to
alleviate that.

Bug: 309625014
Test: m
Change-Id: I923bf6af2ae3fcbbf2fee7126b492a47cd6049ad
2023-11-14 12:02:01 -05:00
Zi Wang
0ab8a96dcf Update test: true to mode: "test"
Test: CI

Bug: 309990433
Change-Id: I31644510002560fd81c41fbe37f0872fc1135390
2023-11-09 16:33:39 -08:00
Dennis Shen
05585a9fa3 Merge changes from topic "rust_caching" into main
* changes:
  aconfig: Cache flag values for rust codegen
  aconfig: Cache flag values for c/c++ codegen
2023-11-09 20:03:42 +00:00
Dennis Shen
737b8e30a1 aconfig: Cache flag values for rust codegen
Bug: b/307336730
Test: atest aconfig.test
Change-Id: I01741a4205cbe4e9b007f43b043505bcbcf05cd8
2023-11-09 15:15:54 +00:00
Dennis Shen
96506f4349 aconfig: Cache flag values for c/c++ codegen
Bug: b/307336730
Test: atest aconfig.test
Change-Id: Id604cf154d09a48f657277af6d799f0e17bc4e93
2023-11-08 19:19:35 +00:00
Zhi Dou
72c2a93006 Revert^2 "aconfig: cache flag value in generated java code"
This reverts commit 257f64347d.

Reason for revert: fix in Roboletric will subimt together with this change

Change-Id: I03c9ed627e6a4153db9c9074daf821ea6d19bc33
2023-11-01 16:42:31 +00:00
Dave Mankoff
0e0c3dec70 Let aconfig protos be read by FlagFlipper
Bug: 307526764
Test: manually built
Change-Id: I689a15cc8c97a814df6f8e45bcf7f732d1693835
Merged-In: I689a15cc8c97a814df6f8e45bcf7f732d1693835
2023-10-27 18:43:50 +00:00
Zhi Dou
b66973688e overrideflags: change local override list name
Change local override list name to "ACONFIG_VALUES_LIST_LOCAL".

Bug: 298692416
Test: source build/envsetup.sh && overrideflags, and then check the
output

Change-Id: I6c2b8dcf6291a1fd7012e714fa91ca6bf0b47cf2
2023-10-23 18:19:29 +00:00
Zhi Dou
77c9f0c9cb add script to help override flag value locally
Add a script to help to create flag value building rules.

The script will only extract necessary information from the value file
but it will not validate the file. The validation will defer to building
system.

For input

```
flag_value {
    package: "com.android.aconfig.test"
    name: "disabled_ro"
    state: DISABLED
    permission: READ_ONLY
}
flag_value {
    package: "com.android.demoapp.test"
    name: "enabled_ro"
    state: DISABLED
    permission: READ_WRITE
}
flag_value {
    package: "com.android.aconfig.test"
    name: "enabled_rw"
    state: ENABLED
    permission: READ_WRITE
}
```

The output Android.bp file will be like
```
VALUE_LIST_LIST = [
    aconfig-local-com.android.demoapp.test,
    aconfig-local-com.android.aconfig.test
]

aconfig_values {
    name: "aconfig-local-com.android.demoapp.test",
    package: "com.android.demoapp.test",
    srcs: [
        "override_values.textproto",
    ]
}

aconfig_values {
    name: "aconfig-local-com.android.aconfig.test",
    package: "com.android.aconfig.test",
    srcs: [
        "override_values.textproto",
    ]
}
```

Bug: 298692416
Test: source build/envsetup.sh && overrideflags, and then check the
output

Change-Id: Ife4063e079811e0b29046be7a6bc127cad668ed0
2023-10-20 21:04:00 +00:00
Dennis Shen
4f358fd443 Merge "aconfig: support api behind a macro flag in c/cpp" into main 2023-10-17 17:09:09 +00:00
Dennis Shen
7c124e035f aconfig: support api behind a macro flag in c/cpp
Bug: b/299673148
Test: atest aconfig.test
Change-Id: I54011de7b8eb52c97a84a93aa1cb955a9eb02706
2023-10-17 13:58:22 +00:00
Yu Liu
3cfde0e5dd Change the sdk_version to core_current.
Bazel currently can't build core_platform yet and needs this lib to
build some java_aconfig_library.

Bug: 305255550
Test: CI
Change-Id: Ic94efe7888e35099618e2fdbbbb481168ed2bcf2
2023-10-13 18:16:52 +00:00
Dennis Shen
268e445503 Merge "aconfig: add missing string header to template" into main 2023-10-11 14:01:46 +00:00
Dennis Shen
da07fea741 aconfig: add missing string header to template
Bug: 304338314
Test: atest aconfig.test
Change-Id: I97e62ebd9df18d260fd272a8f63a004ba627de9b
2023-10-11 14:00:48 +00:00
Treehugger Robot
dcbe60977c Merge "printflags: improve protobuf decode error message" into main 2023-10-11 13:05:02 +00:00
Zhi Dou
22a90f4f10 aconfig: add @UnsupportedAppUsage to methods in generated flags
The java generated flags are marked as @hide which breaks CTS. To
unblock CTS test add @UnsupportedAppUsage to expose the methods.

Test: atest aconfig.test.flags
Bug: 301272559
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:64ad75f50ae96f9a8b57a9e8f88ae9a53d3c1044)
Merged-In: I897573c054e70fc6e093869ba6d416c38f81e28f
Change-Id: I897573c054e70fc6e093869ba6d416c38f81e28f
2023-10-10 13:55:06 +00:00
Mårten Kongstad
6e61f84fd6 printflags: improve protobuf decode error message
Include the file path and first bytes of file in the error message in
case aconfig fails to parse one of the protobuf files.

Example output:

  $ adb shell printflags
  Error: failed to parse /vendor/etc/aconfig_flags.pb ([0a], 1 byte(s))

  Caused by:
      Unexpected EOF

Bug: 304278614
Test: atest printflags.test
Change-Id: I18ff88bd25d72dd477c4b11a32505e75884906ee
2023-10-10 10:12:29 +02:00
Zhi Dou
b095acbc57 aconfig: change Map.of to Map.ofEntries in FakeFeatureFlagsImp
Map.of can only take 10 entries. Map.ofEntries uses variable arguments.

Bug: 303045451
Test: atest AconfigJavaHostTest
Change-Id: I26a3fa0b8a731f9203934d4a800a5c695cfc730f
2023-10-02 23:57:10 +00:00
Mårten Kongstad
3bb7988492 printflags: include device_config values
Amend the default flag values read from
/<partition>/etc/aconfig_flags.pb with the currently used values as
stored in device_config.

Bug: 301547297
Test: atest printflags.test
Test: adb shell printflags
Change-Id: Ic11702a0ae093d2e9dc3ff543b5ca0684b67e0dc
2023-09-27 10:42:04 +02:00
Mårten Kongstad
28a79fe319 Merge "printflags: introduce device tool to print feature flags" into main 2023-09-25 06:51:18 +00:00
Mårten Kongstad
7fa3cb176c aconfig: separate package name and flag name using dot
Change the package name and flag name separator in the text dump output
from a slash to a dot. This makes the output consistent with how the
flags are encoded in the API tracking files.

Bug: 283910447
Test: atest aconfig.test
Change-Id: Ie3e109073e7f04cf01568e16c29bf2872d07ebad
2023-09-22 13:52:40 +02:00
Mårten Kongstad
433fab94c8 printflags: introduce device tool to print feature flags
Metadata about all feature flags used on device are located in
/<partition>/etc/aconfig_flags.pb. Add a new tool, printflags, to read
and pretty-print these files.

printflags is only intended for debugging purposes.

Bug: 301547297
Test: adb shell printflags
Change-Id: I0a3277fecfc8a60eea0aa6bf362a25a311360b71
2023-09-22 13:47:49 +02:00
Zhi Dou
c20d115562 Merge "aconfig: throw exception if reading from DeviceConfig fails" into main 2023-09-14 19:28:16 +00:00
Dennis Shen
a1de8fd435 aconfig: Fix missing header in the generated c/cpp code
Test: atest aconfig.test
Change-Id: I0c23299ad366cb5c61b84b738dd9e6bf3428435c
2023-09-14 17:40:13 +00:00
Zhi Dou
73a34ce10a aconfig: throw exception if reading from DeviceConfig fails
Reading value from DeviceConfig may fail if the provider is not ready.
Since DeciceConfig, and Settings class are static wrapper on top of
the provider, it won't cause the instance  initialization issue.
Thus when the issue happens it means the provider is not initialized.

Test: atest aconfig.test.java and manually make a change in the
framework and check the exception message
Bug: 299471646

Change-Id: Ic08d7a9cd32a8810a7274b6d93c249abccb50b9e
2023-09-14 13:00:45 +00:00
Mårten Kongstad
fb10840da5 aconfig: explicitly @hide FLAG_ constants
Because of a bug in metalava [1], the flag constants are incorrectly
considered not-hidden when metalava generates the API signature files.
This means the FLAG_ constant name will be used, instead of the FLAG_
constant value, which is what we want.

While waiting for b/300211291 to be fixed, explicitly mark the FLAG_
constants as hidden (and keep marking the classes as such).

This CL can be reverted when b/300211291 is fixed.

1. Item.isHiddenOrRemoved does not check if its parent item is hidden,
   tracked in b/300211291

Bug: 297881670
Test: atest aconfig.test aconfig.test.java
Change-Id: I05de8344ccb424bee51c39f9609489ad312397ce
2023-09-13 10:15:01 +02:00
Mårten Kongstad
72c3b38a1d Merge "Revert "Revert "aconfig: @hide generated Java code""" into main 2023-09-11 14:08:55 +00:00
Mårten Kongstad
65efa27f71 Revert "Revert "aconfig: @hide generated Java code""
This reverts commit c0e8ffea41.

Reason for revert: The detected build breakage was unrelated to the aconfig change. Details in b/297881670#comment11.

Change-Id: Ia32bc2e796ed3de7fa049c2c2db340f4325a2853
2023-09-11 12:17:25 +00:00
Mårten Kongstad
c0e8ffea41 Revert "aconfig: @hide generated Java code"
This reverts commit 379e09d157.

Reason for revert: Seems to have broken the build. Reverting while investigating.

Change-Id: I37c9a065853ef07b1f1c18355205a2f49dd816c4
2023-09-11 11:00:42 +00:00
Mårten Kongstad
b5133f6ad4 aconfig: remove unnecessary clones
Improve performance slightly: remove unnecessary clone operations, or
use references where a new object is not needed.

Bug: 283910447
Test: atest aconfig.test
Change-Id: I75205ffa1723dd2654039baac882c225d2653c86
2023-09-11 11:10:21 +02:00
Mårten Kongstad
379e09d157 aconfig: @hide generated Java code
Flagged APIs are annotated using `@FlaggedApi(Flags.FLAG_NAME)`, where
Flags.FLAG_NAME was auto-generated by aconfig.

When metalava generates an API signature file, it can either

  a) insert the value of the constant ("com.foo.bar.flag_name"), or
  b) insert the name of the constant (FLAG.NAME)

In the case of @FlaggedApi, we want a). This requires that

  x) metlava has access to the definition of the constant while generating the API signature file, and
  y) the constant is not part of the API surface of the API signature file

x) is handled by the build system, y) is handled by the aconfig code
generation.

This CL @hide:s all generated Java code, to make sure it is accessible
within the platform, but never part of any API surface.

Bug: 297881670
Test: atest aconfig.test aconfig.test.java
Change-Id: I328ed1a652a4e5e293f2f4b11f916d29fc2fbcbd
2023-09-11 10:31:46 +02:00
Zhi Dou
deafa792eb aconfig: flag java lib enable optimization
This change adds annotation in the generated code. If the flag is read
only, annotations @com.android.aconfig.annotations.AssumeTrueForR8 or
@com.android.aconfig.annotations.AssumeFalseForR8 will be added in to
the corresponding methods in the interface FeatureFlags, and class
Flags.

Test: atest aconfig aconfig.test.java
Bug: 295328116
Change-Id: Ic1b62a86f0945a5e72ae2c4987cce77fe3f172e9
2023-09-06 12:55:09 +00:00
Treehugger Robot
6c4627369e Merge changes from topic "aconfig-misc-fixes-2023-09-04" into main
* changes:
  aconfig: add invariant checks for `is_fixed_read_only`
  aconfig: re-enable development with cargo
2023-09-05 17:21:22 +00:00
Mårten Kongstad
21717e744e aconfig: add invariant checks for is_fixed_read_only
Update parsed_flag::verify_fields to verify that the invariant "if a
parsed flag is_fixed_read_only, its permission must be READ_ONLY".

Note: commands.rs will ensure that no value files are used to create an
invalid parsed flag when flag declarations and values are parsed, but
the invariant check should still be added for completeness sake, and to
make sure no invalid hand-crafted test data exists.

Also fix invalid test data found by adding this invariant.

Bug: 298935897
Test: atest aconfig.test
Change-Id: I8cea5c4d28c458525b7034d78ecb34dd09272771
2023-09-04 20:25:59 +02:00
Mårten Kongstad
5cfad6abd2 aconfig: re-enable development with cargo
The integration tests introduced in 906405f5c9 depend on libraries
auto-generated by running aconfig. This works fine for the Android build
system, but breaks `cargo t`.

Disable the tests when using `cargo t` for local development. Cargo can
be used for rapid local development, including running unit tests;
integration tests should be run using atest.

Bug: 298904077
Test: cargo t
Test: atest aconfig.test_mode.test.rust aconfig.prod_mode.test.rust
Change-Id: Ifcd374fa6efdc121cbfd4c4ac4fb43cf9cacc192
2023-09-04 13:22:28 +02:00
Joe Onorato
cede86dd28 make fake_device_config buildable on host
Test: treehugger
Bug: 277916185
Change-Id: I002669bbb605b7968b81c66d1cbf0ff3caa0c699
Merged-In: I002669bbb605b7968b81c66d1cbf0ff3caa0c699
2023-08-30 11:39:29 -07:00
Jerry Jia
e40f2800af Merge "Add libaconfig_python_proto target for Mobly host-based tests" into main 2023-08-29 22:33:32 +00:00
Zhi Dou
06a448fac7 aconfig: generate full fakefeatureflagsimpl in prod mode
This change will generate full fakefeatureflagsimpl in prod mode.
FakeFeatureFlagsImp will be the same in test mode and the prod mode.
FeatureFlagsImpl will be all unimplemented in test mode. setFlag,
resetAll are added into the interface FeatureFlags.

The reason to make this change is for project using injection pattern,
the project doesn't have to use test mode to test the flag guarded code.
The project can directly use the FakeFeatureFlagsImpl for testing.

Bug: 294838180
Test: atest AconfigJavaHostTest --host AND atest aconfig.test.java
Change-Id: Ib6d40fd3a9ef872e01594fd4f8d6c4cb10bb173a
2023-08-28 16:54:15 +00:00
Xianyuan Jia
3a070a634e Add libaconfig_python_proto target for Mobly host-based tests
Bug: 297431521
Test: unit tests (mobly_device_flags_test)
Change-Id: Ic377cb7c6f651033145a14c83c987e6d779cca6b
2023-08-24 16:49:38 -07:00
Zhi Dou
71f1b35fb4 aconfig: add fixed read only flag
Add a new field in the declaration to indicate whether
the permission can be overridden.

When the field “is_fixed_read_only” is set to true,
the flag permission will be set as fixed “READ_ONLY”,
and the permission should not be changed by Gantry.

Bug: 292521627
Test: atest aconfig.test
Change-Id: Ic9bcd7823bccb8b947cf05568c7ced3763490a23
2023-08-24 17:35:18 +00:00
Yihan Dong
8c0cb8f5e3 Merge "Create the TEST_MAPPING file" into main 2023-08-22 08:39:36 +00:00
Yihan Dong
c2b7632423 Create the TEST_MAPPING file
Add FlagMacrosTests in presubmit to ensure that test filtering rule
always work as expected.

Bug: 292707070
Test: atest --test-mapping
Change-Id: I7a08b7e41e95063fb3c188da784f56e0973d4fae
2023-08-21 17:23:14 +08:00
Joe Onorato
03d53f7d2d Add a fake library that contains the minimum DeviceConfig that aconfig code needs to compile.
The aconfig-generated code in the framework is added with srcjars. To
get those srcjars, we still need a java_aconfig_library.  This class is
there to allow that to compile, even though those compiled .jar files
are not actually used.

Bug: 293195086
Test: m
Change-Id: I34c21925fbc5912a34fea3e7796d5e0c77c9a4af
2023-08-20 07:40:44 -07:00
Vinh Tran
73b4f2d4e2 Merge changes from topic "rust_aconfig-test-mode" into main
* changes:
  Add rust_test with rust_aconfig_library in test mode
  Fix rust aconfig test
2023-08-17 14:48:37 +00:00
Dennis Shen
b352b9d33f Update codegen to use single channel in sys prop
Update sys prop name from persist.device_config.<namespace>.<flag> to persist.aconfig_flags.aconfig_flags.<namespace>.<flag>

Bug: b/295379636
Change-Id: I78f00daa574dc016902dce4b9b4ec961f973693c
2023-08-17 13:48:42 +00:00