OSDN Git Service

Refactor system properties protos to just include the list treble team
authorYi Jin <jinyithu@google.com>
Wed, 6 Dec 2017 01:44:48 +0000 (17:44 -0800)
committerYi Jin <jinyithu@google.com>
Mon, 11 Dec 2017 23:05:25 +0000 (15:05 -0800)
defines http://go/treble-sysprop-compatibility.

Also refactored system properties proto to have nested proto
definitions. The reason to do it is to have flat proto definition makes
it super hard to manage its field numbers as well as hard to use.
Since we have a predefined list. Support parsing nested proto here.

Bug: 68774852
Test: unit tested and on device test
      $ out/host/linux-x86/bin/incident_report -w system_properties
Change-Id: Icfc7cdcae184fb204c81e6434d21399aa84a1285

cmds/incident_helper/src/ih_util.cpp
cmds/incident_helper/src/ih_util.h
cmds/incident_helper/src/parsers/SystemPropertiesParser.cpp
cmds/incident_helper/testdata/system_properties.txt
cmds/incident_helper/tests/SystemPropertiesParser_test.cpp
core/proto/android/os/system_properties.proto

index db4f586..4bf956a 100644 (file)
@@ -297,3 +297,82 @@ Table::insertField(ProtoOutputStream* proto, const std::string& name, const std:
     }
     return true;
 }
+
+// ================================================================================
+Message::Message(Table* table)
+        :mTable(table),
+         mPreviousField(""),
+         mTokens(),
+         mSubMessages()
+{
+}
+
+Message::~Message()
+{
+}
+
+void
+Message::addSubMessage(uint64_t fieldId, Message* fieldMsg)
+{
+    for (auto iter = mTable->mFields.begin(); iter != mTable->mFields.end(); iter++) {
+        if (iter->second == fieldId) {
+            mSubMessages[iter->first] = fieldMsg;
+            return;
+        }
+    }
+}
+
+bool
+Message::insertField(ProtoOutputStream* proto, const std::string& name, const std::string& value)
+{
+    // If the field name can be found, it means the name is a primitive field.
+    if (mTable->mFields.find(name) != mTable->mFields.end()) {
+        endSession(proto);
+        // The only edge case is for example ro.hardware itself is a message, so a field called "value"
+        // would be defined in proto Ro::Hardware and it must be the first field.
+        if (mSubMessages.find(name) != mSubMessages.end()) {
+            startSession(proto, name);
+            return mSubMessages[name]->insertField(proto, "value", value);
+        } else {
+            return mTable->insertField(proto, name, value);
+        }
+    }
+
+    // Try to find the message field which is the prefix of name, so the value would be inserted
+    // recursively into the submessage.
+    string mutableName = name;
+    for (auto iter = mSubMessages.begin(); iter != mSubMessages.end(); iter++) {
+        string fieldName = iter->first;
+        string prefix = fieldName + "_"; // underscore is the delimiter in the name
+        if (stripPrefix(&mutableName, prefix.c_str())) {
+            if (mPreviousField != fieldName) {
+                endSession(proto);
+                startSession(proto, fieldName);
+            }
+            return mSubMessages[fieldName]->insertField(proto, mutableName, value);
+        }
+    }
+    // Can't find the name in proto definition, handle it separately.
+    return false;
+}
+
+void
+Message::startSession(ProtoOutputStream* proto, const string& name)
+{
+    uint64_t fieldId = mTable->mFields[name];
+    long long token = proto->start(fieldId);
+    mPreviousField = name;
+    mTokens.push(token);
+}
+
+void
+Message::endSession(ProtoOutputStream* proto)
+{
+    if (mPreviousField == "") return;
+    if (mSubMessages.find(mPreviousField) != mSubMessages.end()) {
+        mSubMessages[mPreviousField]->endSession(proto);
+    }
+    proto->end(mTokens.top());
+    mTokens.pop();
+    mPreviousField = "";
+}
index 4a5fe1d..58ef290 100644 (file)
@@ -18,6 +18,7 @@
 #define INCIDENT_HELPER_UTIL_H
 
 #include <map>
+#include <stack>
 #include <string>
 #include <vector>
 
@@ -34,7 +35,7 @@ const std::string DEFAULT_NEWLINE = "\r\n";
 const std::string TAB_DELIMITER = "\t";
 const std::string COMMA_DELIMITER = ",";
 
-// returns true if c is a-zA-Z0-9 or underscore _
+// returns true if c is a-zA-Z0-9 or underscore
 bool isValidChar(char c);
 
 // trim the string with the given charset
@@ -102,11 +103,20 @@ private:
 };
 
 /**
- * The class contains a mapping between table headers to its field ids.
- * And allow users to insert the field values to proto based on its header name.
+ * The Table class is constructed from two arrays generated by the given message with
+ * option (stream_proto.stream_msg).enable_fields_mapping = true.
+ * The names are each field's names in the message and must corresponding to the header/name of
+ * the text to be parsed, and the ids are the streaming proto encoded field ids.
+ *
+ * This class then allows users to insert the table values to proto based on its header.
+ *
+ * Advance feature: if some fields in the message are enums, user must explicitly add the
+ * mapping from enum name string to its enum values.
  */
+class Message;
 class Table
 {
+friend class Message;
 public:
     Table(const char* names[], const uint64_t ids[], const int count);
     ~Table();
@@ -114,9 +124,12 @@ public:
     // Add enum names to values for parsing purpose.
     void addEnumTypeMap(const char* field, const char* enumNames[], const int enumValues[], const int enumSize);
 
-    // manually add enum names to values mapping, useful when an Enum type is used by a lot of fields, and there are no name conflicts
+    // Manually add enum names to values mapping, useful when an Enum type is used by
+    // a number of fields, there must not be any enum name conflicts.
     void addEnumNameToValue(const char* enumName, const int enumValue);
 
+    // Based on given name, find the right field id, parse the text value and insert to proto.
+    // Return false if the given name can't be found.
     bool insertField(ProtoOutputStream* proto, const std::string& name, const std::string& value);
 private:
     map<std::string, uint64_t> mFields;
@@ -124,4 +137,47 @@ private:
     map<std::string, int> mEnumValuesByName;
 };
 
+/**
+ * Reconstructs a typical proto message given its message Table, adds submessage fields explicitly.
+ * It allows user to insert nested proto values purely by the names. See insertField for detail.
+ */
+class Message
+{
+public:
+    Message(Table* table);
+    ~Message();
+
+    // Reconstructs the typical proto message by adding its message fields.
+    void addSubMessage(uint64_t fieldId, Message* fieldMsg);
+
+    // Inserts value if the given name has the corresponding field in its message and return true.
+    // It will recursively search the name in submessages and find the correct field to insert.
+    // For example, when the name is dalvik_vm_heapsize, and the message's corresponding proto is:
+    //     message Properties {
+    //         message DalvikVm {
+    //             int32 heapsize = 1;
+    //             bool  usejit = 2;
+    //         }
+    //         DalvikVm dalvik_vm = 1;
+    //         string hack_in = 2;
+    //     }
+    // The value will be inserted into field heapsize in dalvik_vm submessage.
+    //
+    // Also value belongs to same submessage MUST be inserted contiguously.
+    // For example, dalvik_vm_usejit must be inserted directly after dalvik_vm_heapsize, otherwise
+    // if hack_in attempts to be inserted before dalvik_vm_usejit, value of usejit isn't added as expected.
+    bool insertField(ProtoOutputStream* proto, const std::string& name, const std::string& value);
+
+    // Starts a new message field proto session.
+    void startSession(ProtoOutputStream* proto, const string& name);
+
+    // Ends the previous message field proto session.
+    void endSession(ProtoOutputStream* proto);
+private:
+    Table* mTable;
+    std::string mPreviousField;
+    stack<long long> mTokens;
+    map<std::string, Message*> mSubMessages;
+};
+
 #endif  // INCIDENT_HELPER_UTIL_H
index ee5feb0..a41ed6e 100644 (file)
@@ -45,11 +45,119 @@ SystemPropertiesParser::Parse(const int in, const int out) const
     string line;
     string name;  // the name of the property
     string value; // the string value of the property
-
     ProtoOutputStream proto;
-    Table table(SystemPropertiesProto::_FIELD_NAMES, SystemPropertiesProto::_FIELD_IDS, SystemPropertiesProto::_FIELD_COUNT);
-    table.addEnumNameToValue("running", SystemPropertiesProto::STATUS_RUNNING);
-    table.addEnumNameToValue("stopped", SystemPropertiesProto::STATUS_STOPPED);
+    vector<pair<string, string>> extras;
+
+    Table sysPropTable(SystemPropertiesProto::_FIELD_NAMES,
+                SystemPropertiesProto::_FIELD_IDS,
+                SystemPropertiesProto::_FIELD_COUNT);
+    Message sysProp(&sysPropTable);
+
+    Table aaudioT(SystemPropertiesProto::Aaudio::_FIELD_NAMES,
+            SystemPropertiesProto::Aaudio::_FIELD_IDS,
+            SystemPropertiesProto::Aaudio::_FIELD_COUNT);
+    Message aaudio(&aaudioT);
+    sysProp.addSubMessage(SystemPropertiesProto::AAUDIO, &aaudio);
+
+    Table cameraTable(SystemPropertiesProto::Camera::_FIELD_NAMES,
+            SystemPropertiesProto::Camera::_FIELD_IDS,
+            SystemPropertiesProto::Camera::_FIELD_COUNT);
+    Message camera(&cameraTable);
+    sysProp.addSubMessage(SystemPropertiesProto::CAMERA, &camera);
+
+    Table dalvikVmTable(SystemPropertiesProto::DalvikVm::_FIELD_NAMES,
+            SystemPropertiesProto::DalvikVm::_FIELD_IDS,
+            SystemPropertiesProto::DalvikVm::_FIELD_COUNT);
+    Message dalvikVm(&dalvikVmTable);
+    sysProp.addSubMessage(SystemPropertiesProto::DALVIK_VM, &dalvikVm);
+
+    Table initSvcTable(SystemPropertiesProto::InitSvc::_FIELD_NAMES,
+            SystemPropertiesProto::InitSvc::_FIELD_IDS,
+            SystemPropertiesProto::InitSvc::_FIELD_COUNT);
+    initSvcTable.addEnumNameToValue("running", SystemPropertiesProto::InitSvc::STATUS_RUNNING);
+    initSvcTable.addEnumNameToValue("stopped", SystemPropertiesProto::InitSvc::STATUS_STOPPED);
+    Message initSvc(&initSvcTable);
+    sysProp.addSubMessage(SystemPropertiesProto::INIT_SVC, &initSvc);
+
+    Table logTable(SystemPropertiesProto::Log::_FIELD_NAMES,
+            SystemPropertiesProto::Log::_FIELD_IDS,
+            SystemPropertiesProto::Log::_FIELD_COUNT);
+    Message logMsg(&logTable);
+    sysProp.addSubMessage(SystemPropertiesProto::LOG, &logMsg);
+
+    Table persistTable(SystemPropertiesProto::Persist::_FIELD_NAMES,
+            SystemPropertiesProto::Persist::_FIELD_IDS,
+            SystemPropertiesProto::Persist::_FIELD_COUNT);
+    Message persist(&persistTable);
+    sysProp.addSubMessage(SystemPropertiesProto::PERSIST, &persist);
+
+    Table pmDexoptTable(SystemPropertiesProto::PmDexopt::_FIELD_NAMES,
+            SystemPropertiesProto::PmDexopt::_FIELD_IDS,
+            SystemPropertiesProto::PmDexopt::_FIELD_COUNT);
+    Message pmDexopt(&pmDexoptTable);
+    sysProp.addSubMessage(SystemPropertiesProto::PM_DEXOPT, &pmDexopt);
+
+    Table roTable(SystemPropertiesProto::Ro::_FIELD_NAMES,
+            SystemPropertiesProto::Ro::_FIELD_IDS,
+            SystemPropertiesProto::Ro::_FIELD_COUNT);
+    Message ro(&roTable);
+
+    Table bootTable(SystemPropertiesProto::Ro::Boot::_FIELD_NAMES,
+            SystemPropertiesProto::Ro::Boot::_FIELD_IDS,
+            SystemPropertiesProto::Ro::Boot::_FIELD_COUNT);
+    Message boot(&bootTable);
+    ro.addSubMessage(SystemPropertiesProto::Ro::BOOT, &boot);
+
+    Table bootimageTable(SystemPropertiesProto::Ro::BootImage::_FIELD_NAMES,
+            SystemPropertiesProto::Ro::BootImage::_FIELD_IDS,
+            SystemPropertiesProto::Ro::BootImage::_FIELD_COUNT);
+    Message bootimage(&bootimageTable);
+    ro.addSubMessage(SystemPropertiesProto::Ro::BOOTIMAGE, &bootimage);
+
+    Table buildTable(SystemPropertiesProto::Ro::Build::_FIELD_NAMES,
+            SystemPropertiesProto::Ro::Build::_FIELD_IDS,
+            SystemPropertiesProto::Ro::Build::_FIELD_COUNT);
+    Message build(&buildTable);
+
+    Table versionTable(SystemPropertiesProto::Ro::Build::Version::_FIELD_NAMES,
+            SystemPropertiesProto::Ro::Build::Version::_FIELD_IDS,
+            SystemPropertiesProto::Ro::Build::Version::_FIELD_COUNT);
+    Message version(&versionTable);
+    build.addSubMessage(SystemPropertiesProto::Ro::Build::VERSION, &version);
+    ro.addSubMessage(SystemPropertiesProto::Ro::BUILD, &build);
+
+    Table configTable(SystemPropertiesProto::Ro::Config::_FIELD_NAMES,
+            SystemPropertiesProto::Ro::Config::_FIELD_IDS,
+            SystemPropertiesProto::Ro::Config::_FIELD_COUNT);
+    Message config(&configTable);
+    ro.addSubMessage(SystemPropertiesProto::Ro::CONFIG, &config);
+
+    Table hardwareTable(SystemPropertiesProto::Ro::Hardware::_FIELD_NAMES,
+                   SystemPropertiesProto::Ro::Hardware::_FIELD_IDS,
+                   SystemPropertiesProto::Ro::Hardware::_FIELD_COUNT);
+    Message hardware(&hardwareTable);
+    ro.addSubMessage(SystemPropertiesProto::Ro::HARDWARE, &hardware);
+
+    Table productTable(SystemPropertiesProto::Ro::Product::_FIELD_NAMES,
+                   SystemPropertiesProto::Ro::Product::_FIELD_IDS,
+                   SystemPropertiesProto::Ro::Product::_FIELD_COUNT);
+    Message product(&productTable);
+    ro.addSubMessage(SystemPropertiesProto::Ro::PRODUCT, &product);
+
+    sysProp.addSubMessage(SystemPropertiesProto::RO, &ro);
+
+    Table sysTable(SystemPropertiesProto::Sys::_FIELD_NAMES,
+                   SystemPropertiesProto::Sys::_FIELD_IDS,
+                   SystemPropertiesProto::Sys::_FIELD_COUNT);
+    Message sys(&sysTable);
+
+    Table usbTable(SystemPropertiesProto::Sys::Usb::_FIELD_NAMES,
+                   SystemPropertiesProto::Sys::Usb::_FIELD_IDS,
+                   SystemPropertiesProto::Sys::Usb::_FIELD_COUNT);
+    Message usb(&usbTable);
+    sys.addSubMessage(SystemPropertiesProto::Sys::USB, &usb);
+
+    sysProp.addSubMessage(SystemPropertiesProto::SYS, &sys);
 
     // parse line by line
     while (reader.readLine(&line)) {
@@ -67,13 +175,19 @@ SystemPropertiesParser::Parse(const int in, const int out) const
 
         // if the property name couldn't be found in proto definition or the value has mistype,
         // add to extra properties with its name and value
-        if (!table.insertField(&proto, convertToFieldName(name), value)) {
-            long long token = proto.start(SystemPropertiesProto::EXTRA_PROPERTIES);
-            proto.write(SystemPropertiesProto::Property::NAME, name);
-            proto.write(SystemPropertiesProto::Property::VALUE, value);
-            proto.end(token);
+        if (!sysProp.insertField(&proto, convertToFieldName(name), value)) {
+            extras.push_back(make_pair(name, value));
         }
     }
+    // end session for the last write.
+    sysProp.endSession(&proto);
+
+    for (auto it = extras.begin(); it != extras.end(); it++) {
+        long long token = proto.start(SystemPropertiesProto::EXTRA_PROPERTIES);
+        proto.write(SystemPropertiesProto::Property::NAME, it->first);
+        proto.write(SystemPropertiesProto::Property::VALUE, it->second);
+        proto.end(token);
+    }
 
     if (!reader.ok(&line)) {
         fprintf(stderr, "Bad read from fd %d: %s\n", in, line.c_str());
index 57c07ee..51a2dfd 100644 (file)
@@ -1,14 +1,13 @@
 [aaudio.hw_burst_min_usec]: [2000]
 [aaudio.mmap_exclusive_policy]: [2]
 [dalvik.vm.appimageformat]: [lz4]
-[gsm.operator.isroaming]: [false]
-[init.svc.vendor.imsqmidaemon]: [running]
-[init.svc.vendor.init-radio-sh]: [stopped]
-[net.dns1]: [2001:4860:4860::8844]
-[net.tcp.buffersize.wifi]: [524288,2097152,4194304,262144,524288,1048576]
-[nfc.initialized]: [True]
-[persist_radio_VT_ENABLE]: [1]
+[drm_64bit_enabled]: [false]
+[init.svc.adbd]: [running]
+[init.svc.lmkd]: [stopped]
+[media_mediadrmservice_enable]: [True]
 [ro.boot.boottime]: [1BLL:85,1BLE:898,2BLL:0,2BLE:862,SW:6739,KL:340]
 [ro.bootimage.build.date.utc]: [1509394807]
 [ro.bootimage.build.fingerprint]: [google/marlin/marlin:P/MASTER/jinyithu10301320:eng/dev-keys]
-[ro.wifi.channels]: []
\ No newline at end of file
+[ro.hardware]: [marlin]
+[ro.hardware.power]: [marlin-profile]
+[ro.wifi.channels]: []
index 23e292a..98838e9 100644 (file)
@@ -61,29 +61,38 @@ TEST_F(SystemPropertiesParserTest, HasSwapInfo) {
     SystemPropertiesParser parser;
     SystemPropertiesProto expected;
 
-    expected.set_aaudio_hw_burst_min_usec(2000);
-    expected.set_aaudio_mmap_exclusive_policy(2);
-    expected.set_dalvik_vm_appimageformat("lz4");
-    expected.set_gsm_operator_isroaming(false);
-    expected.set_init_svc_vendor_imsqmidaemon(SystemPropertiesProto_Status_STATUS_RUNNING);
-    expected.set_init_svc_vendor_init_radio_sh(SystemPropertiesProto_Status_STATUS_STOPPED);
-    expected.set_net_dns1("2001:4860:4860::8844");
-    expected.add_net_tcp_buffersize_wifi(524288);
-    expected.add_net_tcp_buffersize_wifi(2097152);
-    expected.add_net_tcp_buffersize_wifi(4194304);
-    expected.add_net_tcp_buffersize_wifi(262144);
-    expected.add_net_tcp_buffersize_wifi(524288);
-    expected.add_net_tcp_buffersize_wifi(1048576);
-    expected.set_nfc_initialized(true);
-    expected.set_persist_radio_vt_enable(1);
-    expected.add_ro_boot_boottime("1BLL:85");
-    expected.add_ro_boot_boottime("1BLE:898");
-    expected.add_ro_boot_boottime("2BLL:0");
-    expected.add_ro_boot_boottime("2BLE:862");
-    expected.add_ro_boot_boottime("SW:6739");
-    expected.add_ro_boot_boottime("KL:340");
-    expected.set_ro_bootimage_build_date_utc(1509394807LL);
-    expected.set_ro_bootimage_build_fingerprint("google/marlin/marlin:P/MASTER/jinyithu10301320:eng/dev-keys");
+    SystemPropertiesProto::Aaudio* aaudio = expected.mutable_aaudio();
+    aaudio->set_hw_burst_min_usec(2000);
+    aaudio->set_mmap_exclusive_policy(2);
+
+    SystemPropertiesProto::DalvikVm* dalvikVm = expected.mutable_dalvik_vm();
+    dalvikVm->set_appimageformat("lz4");
+
+    expected.set_drm_64bit_enabled(false);
+
+    SystemPropertiesProto::InitSvc* initSvc = expected.mutable_init_svc();
+    initSvc->set_adbd(SystemPropertiesProto_InitSvc_Status_STATUS_RUNNING);
+    initSvc->set_lmkd(SystemPropertiesProto_InitSvc_Status_STATUS_STOPPED);
+
+    expected.set_media_mediadrmservice_enable(true);
+
+    SystemPropertiesProto::Ro* ro = expected.mutable_ro();
+
+    SystemPropertiesProto::Ro::Boot* boot = ro->mutable_boot();
+    boot->add_boottime("1BLL:85");
+    boot->add_boottime("1BLE:898");
+    boot->add_boottime("2BLL:0");
+    boot->add_boottime("2BLE:862");
+    boot->add_boottime("SW:6739");
+    boot->add_boottime("KL:340");
+
+    SystemPropertiesProto::Ro::BootImage* bootimage = ro->mutable_bootimage();
+    bootimage->set_build_date_utc(1509394807LL);
+    bootimage->set_build_fingerprint("google/marlin/marlin:P/MASTER/jinyithu10301320:eng/dev-keys");
+
+    SystemPropertiesProto::Ro::Hardware* hardware = ro->mutable_hardware();
+    hardware->set_value("marlin");
+    hardware->set_power("marlin-profile");
 
     int fd = open(testFile.c_str(), O_RDONLY);
     ASSERT_TRUE(fd != -1);
index 921bb5a..7ffdc96 100644 (file)
 syntax = "proto2";
 
 option java_multiple_files = true;
-option java_outer_classname = "SystemPropertiesProtoMetadata";
 
+import "frameworks/base/libs/incident/proto/android/privacy.proto";
 import "frameworks/base/tools/streaming_proto/stream.proto";
 
 package android.os;
 
-// System Properties from getprop
+// Android Platform Exported System Properties
+// TODO: This is not the completed list, new properties need to be whitelisted.
 message SystemPropertiesProto {
     option (stream_proto.stream_msg).enable_fields_mapping = true;
 
-    // Properties that are not specified below are appended here.
+    // Properties that are not specified below would be appended here.
+    // These values stay on device only.
     message Property {
+        option (android.msg_privacy).dest = DEST_LOCAL;
+
         optional string name = 1;
         optional string value = 2;
     }
     repeated Property extra_properties = 1;
 
-    optional int32 aaudio_hw_burst_min_usec = 2;
-    optional int32 aaudio_mmap_exclusive_policy = 3;
-    optional int32 aaudio_mmap_policy = 4;
-
-    optional int32 af_fast_track_multiplier = 5;
-
-    optional int32 audio_adm_buffering_ms = 6;
-    optional int32 audio_hal_period_size = 7;
-
-    optional string dalvik_vm_appimageformat = 8;
-    optional string dalvik_vm_dex2oat_Xms = 9;
-    optional string dalvik_vm_dex2oat_Xmx = 10;
-    optional bool   dalvik_vm_dexopt_secondary = 11;
-    optional string dalvik_vm_heapgrowthlimit = 12;
-    optional string dalvik_vm_heapmaxfree = 13;
-    optional string dalvik_vm_heapminfree = 14;
-    optional string dalvik_vm_heapsize = 15;
-    optional string dalvik_vm_heapstartsize = 16;
-    optional float  dalvik_vm_heaptargetutilization = 17;
-    optional string dalvik_vm_image_dex2oat_Xms = 18;
-    optional string dalvik_vm_image_dex2oat_Xmx = 19;
-    optional string dalvik_vm_image_dex2oat_filter = 20;
-    optional string dalvik_vm_isa_arm_features = 21;
-    optional string dalvik_vm_isa_arm_variant = 22;
-    optional string dalvik_vm_isa_arm64_features = 23;
-    optional string dalvik_vm_isa_arm64_variant = 24;
-    optional int32  dalvik_vm_lockprof_threshold = 25;
-    optional string dalvik_vm_stack_trace_dir = 26;
-    optional bool   dalvik_vm_usejit = 27;
-    optional bool   dalvik_vm_usejitprofiles = 28;
-
-    optional int32 debug_atrace_tags_enableflags = 29;
-    optional int32 debug_force_rtl = 30;
-    optional string debug_htc_hrdump = 31;
-
-    optional int32 dev_bootcomplete = 32;
-
-    optional bool drm_service_enabled = 33;
-
-    optional int32 fmas_hdph_sgain = 34;
-
-    optional int32 gsm_current_phone_type = 35;
-    optional string gsm_network_type = 36;
-    optional string gsm_operator_alpha = 37;
-    optional string gsm_operator_iso_country = 38;
-    optional bool gsm_operator_isroaming = 39;
-    optional string gsm_operator_numeric = 40;
-    optional string gsm_sim_operator_alpha = 41;
-    optional string gsm_sim_operator_iso_country = 42;
-    optional int32 gsm_sim_operator_numeric = 43;
-    optional string gsm_sim_state = 44;
-    optional string gsm_version_baseband = 45;
-    optional string gsm_version_ril_impl = 46;
-
-    optional sint32 htc_camera_sensor_inf = 47;
-
-    optional bool hwservicemanager_ready = 48;
-
-    // Enum values for a lot of system properties
-    enum Status {
-        STATUS_UNKNOWN = 0;
-        STATUS_RUNNING = 1;
-        STATUS_STOPPED = 2;
+    optional int32  aac_drc_boost = 2;
+    optional int32  aac_drc_cut = 3;
+    optional int32  aac_drc_enc_target_level = 4;
+    optional int32  aac_drc_heavy = 5;
+    optional int32  aac_drc_reference_level = 6;
+
+    message Aaudio {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional int32  hw_burst_min_usec = 1;
+        optional int32  minimum_sleep_usec = 2;
+        optional int32  mixer_bursts = 3;
+        optional int32  mmap_exclusive_policy = 4;
+        optional int32  mmap_policy = 5;
+        optional int32  wakeup_delay_usec = 6;
+
+        // Next Tag: 7
+    }
+    optional Aaudio aaudio = 7;
+
+    optional int32  af_fast_track_multiplier = 8;
+
+    message Camera {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional bool   disable_zsl_mode = 1;
+        optional int32  fifo_disable = 2;
+
+        // Next Tag: 3
+    }
+    optional Camera camera = 9;
+
+    message DalvikVm {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional string appimageformat = 1;
+        optional string backgroundgctype = 2;
+        optional bool   checkjni = 3;
+        optional string dex2oat_filter = 4;
+        optional string dex2oat_flags = 5;
+        optional int32  dex2oat_threads = 6;
+        optional string dex2oat_Xms = 7;
+        optional string dex2oat_Xmx = 8;
+        optional bool   dexopt_secondary = 9;
+        optional string execution_mode = 10;
+        optional string extra_opts = 11;
+        optional string gctype = 12;
+        optional string heapgrowthlimit = 13;
+        optional string heapmaxfree = 14;
+        optional string heapminfree = 15;
+        optional string heapsize = 16;
+        optional string heapstartsize = 17;
+        optional double heaptargetutilization = 18;
+        optional int32  hot_startup_method_samples = 19;
+        optional string image_dex2oat_filter = 20;
+        optional string image_dex2oat_flags = 21;
+        optional int32  image_dex2oat_threads = 22;
+        optional string image_dex2oat_Xms = 23;
+        optional string image_dex2oat_Xmx = 24;
+        optional string isa_arm_features = 25;
+        optional string isa_arm_variant = 26;
+        optional string isa_arm64_features = 27;
+        optional string isa_arm64_variant = 28;
+        optional string isa_mips_features = 29;
+        optional string isa_mips_variant = 30;
+        optional string isa_mips64_features = 31;
+        optional string isa_mips64_variant = 32;
+        optional string isa_unknown_features = 33;
+        optional string isa_unknown_variant = 34;
+        optional string isa_x86_64_features = 35;
+        optional string isa_x86_64_variant = 36;
+        optional string isa_x86_features = 37;
+        optional string isa_x86_variant = 38;
+        optional string jitinitialsize = 39;
+        optional string jitmaxsize = 40;
+        optional int32  jitprithreadweight = 41;
+        optional int32  jitthreshold = 42;
+        optional int32  jittransitionweight = 43;
+        optional string jniopts = 44;
+        optional int32  lockprof_threshold = 45;
+        optional bool   method_trace = 46;
+        optional string method_trace_file = 47;
+        optional int32  method_trace_file_siz = 48;
+        optional bool   method_trace_stream = 49;
+        optional bool   profilesystemserver = 50;
+        optional string stack_trace_dir = 51;
+        optional bool   usejit = 52;
+        optional bool   usejitprofiles = 53;
+        optional int32  zygote_max_boot_retry = 54;
+
+        // Next Tag: 55
+    }
+    optional DalvikVm dalvik_vm = 10;
+
+    optional bool   drm_64bit_enabled = 11;
+    optional bool   drm_service_enabled = 12;
+    optional bool   dumpstate_dry_run = 13;
+    optional string gsm_sim_operator_numeric = 14;
+    optional bool   hal_instrumentation_enable = 15;
+
+    message InitSvc {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        enum Status {
+            STATUS_UNKNOWN = 0;
+            STATUS_RUNNING = 1;
+            STATUS_STOPPED = 2;
+        }
+        optional Status adbd = 1;
+        optional Status audioserver = 2;
+        optional Status bootanim = 3;
+        optional Status bufferhubd = 4;
+        optional Status cameraserver = 5;
+        optional Status clear_bcb = 6;
+        optional Status drm = 7;
+        optional Status gatekeeperd = 8;
+        optional Status healthd = 9;
+        optional Status hidl_memory = 10;
+        optional Status hostapd = 11;
+        optional Status hwservicemanager = 12;
+        optional Status installd = 13;
+        optional Status keystore = 14;
+        optional Status lmkd = 15;
+        optional Status logd = 16;
+        optional Status logd_reinit = 17;
+        optional Status media = 18;
+        optional Status mediadrm = 19;
+        optional Status mediaextractor = 20;
+        optional Status mediametrics = 21;
+        optional Status netd = 22;
+        optional Status performanced = 23;
+        optional Status ril_daemon = 24;
+        optional Status servicemanager = 25;
+        optional Status storaged = 26;
+        optional Status surfaceflinger = 27;
+        optional Status thermalservice = 28;
+        optional Status tombstoned = 29;
+        optional Status ueventd = 30;
+        optional Status update_engine = 31;
+        optional Status update_verifier_nonencrypted = 32;
+        optional Status virtual_touchpad = 33;
+        optional Status vndservicemanager = 34;
+        optional Status vold = 35;
+        optional Status vr_hwc = 36;
+        optional Status webview_zygote32 = 37;
+        optional Status wificond = 38;
+        optional Status wpa_supplicant = 39;
+        optional Status zygote = 40;
+        optional Status zygote_secondary = 41;
+
+        // Next Tag: 42
+    }
+    optional InitSvc init_svc = 16;
+
+    optional bool   keyguard_no_require_sim = 17;
+    optional string libc_debug_malloc_options = 18;
+    optional string libc_debug_malloc_program = 19;
+
+    message Log {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional string tag_WifiHAL = 1;
+        optional string tag_stats_log = 2;
+
+        // Next Tag: 3
     }
-    optional Status init_svc_adbd = 49;
-    optional Status init_svc_audioserver = 50;
-    optional Status init_svc_bootanim = 51;
-    optional Status init_svc_bufferhubd = 52;
-    optional Status init_svc_cameraserver = 53;
-    optional Status init_svc_clear_bcb = 54;
-    optional Status init_svc_drm = 55;
-    optional Status init_svc_gatekeeperd = 56;
-    optional Status init_svc_healthd = 57;
-    optional Status init_svc_hidl_memory = 58;
-    optional Status init_svc_hostapd = 59;
-    optional Status init_svc_hwservicemanager = 60;
-    optional Status init_svc_installd = 61;
-    optional Status init_svc_keystore = 62;
-    optional Status init_svc_lmkd = 63;
-    optional Status init_svc_logd = 64;
-    optional Status init_svc_logd_reinit = 65;
-    optional Status init_svc_media = 66;
-    optional Status init_svc_mediadrm = 67;
-    optional Status init_svc_mediaextractor = 68;
-    optional Status init_svc_mediametrics = 69;
-    optional Status init_svc_netd = 70;
-    optional Status init_svc_performanced = 71;
-    optional Status init_svc_ril_daemon = 72;
-    optional Status init_svc_servicemanager = 73;
-    optional Status init_svc_storaged = 74;
-    optional Status init_svc_surfaceflinger = 75;
-    optional Status init_svc_thermalservice = 76;
-    optional Status init_svc_tombstoned = 77;
-    optional Status init_svc_ueventd = 78;
-    optional Status init_svc_update_engine = 79;
-    optional Status init_svc_update_verifier_nonencrypted = 80;
-    optional Status init_svc_vendor_adsprpcd = 81;
-    optional Status init_svc_vendor_atfwd = 82;
-    optional Status init_svc_vendor_audio_hal_2_0 = 83;
-    optional Status init_svc_vendor_bluetooth_1_0 = 84;
-    optional Status init_svc_vendor_boot_hal_1_0 = 85;
-    optional Status init_svc_vendor_camera_provider_2_4 = 86;
-    optional Status init_svc_vendor_cas_hal_1_0 = 87;
-    optional Status init_svc_vendor_cnd = 88;
-    optional Status init_svc_vendor_cnss_daemon = 89;
-    optional Status init_svc_vendor_cnss_diag = 90;
-    optional Status init_svc_vendor_configstore_hal = 91;
-    optional Status init_svc_vendor_contexthub_hal_1_0 = 92;
-    optional Status init_svc_vendor_devstart_sh = 93;
-    optional Status init_svc_vendor_drm_hal_1_0 = 94;
-    optional Status init_svc_vendor_drm_widevine_hal_1_0 = 95;
-    optional Status init_svc_vendor_dumpstate_1_0 = 96;
-    optional Status init_svc_vendor_flash_nanohub_fw = 97;
-    optional Status init_svc_vendor_foreground_sh = 98;
-    optional Status init_svc_vendor_fps_hal = 99;
-    optional Status init_svc_vendor_gatekeeper_1_0 = 100;
-    optional Status init_svc_vendor_gnss_service = 101;
-    optional Status init_svc_vendor_gralloc_2_0 = 102;
-    optional Status init_svc_vendor_hci_filter_root = 103;
-    optional Status init_svc_vendor_hwcomposer_2_1 = 104;
-    optional Status init_svc_vendor_imsdatadaemon = 105;
-    optional Status init_svc_vendor_imsqmidaemon = 106;
-    optional Status init_svc_vendor_init_radio_sh = 107;
-    optional Status init_svc_vendor_irsc_util = 108;
-    optional Status init_svc_vendor_keymaster_3_0 = 109;
-    optional Status init_svc_vendor_light_hal_2_0 = 110;
-    optional Status init_svc_vendor_loc_launcher = 111;
-    optional Status init_svc_vendor_media_omx = 112;
-    optional Status init_svc_vendor_memtrack_hal_1_0 = 113;
-    optional Status init_svc_vendor_mid_sh = 114;
-    optional Status init_svc_vendor_msm_irqbalance = 115;
-    optional Status init_svc_vendor_nanohub_slpi = 116;
-    optional Status init_svc_vendor_netmgrd = 117;
-    optional Status init_svc_vendor_nfc_hal_service = 118;
-    optional Status init_svc_vendor_per_mgr = 119;
-    optional Status init_svc_vendor_per_proxy = 120;
-    optional Status init_svc_vendor_perfd = 121;
-    optional Status init_svc_vendor_port_bridge = 122;
-    optional Status init_svc_vendor_power_hal_1_1 = 123;
-    optional Status init_svc_vendor_power_sh = 124;
-    optional Status init_svc_vendor_qseecomd = 125;
-    optional Status init_svc_vendor_ramdump_auto = 126;
-    optional Status init_svc_vendor_rmt_storage = 127;
-    optional Status init_svc_vendor_sensors_hal_1_0 = 128;
-    optional Status init_svc_vendor_ss_ramdump = 129;
-    optional Status init_svc_vendor_ssr_setup = 130;
-    optional Status init_svc_vendor_thermal_engine = 131;
-    optional Status init_svc_vendor_time_daemon = 132;
-    optional Status init_svc_vendor_usb_hal_1_1 = 133;
-    optional Status init_svc_vendor_vibrator_1_0 = 134;
-    optional Status init_svc_vendor_vr_1_0 = 135;
-    optional Status init_svc_vendor_wifi_hal_legacy = 136;
-    optional Status init_svc_virtual_touchpad = 137;
-    optional Status init_svc_vndservicemanager = 138;
-    optional Status init_svc_vold = 139;
-    optional Status init_svc_vr_hwc = 140;
-    optional Status init_svc_webview_zygote32 = 141;
-    optional Status init_svc_wificond = 142;
-    optional Status init_svc_wpa_supplicant = 143;
-    optional Status init_svc_zygote = 144;
-    optional Status init_svc_zygote_secondary = 145;
-
-    optional bool keyguard_no_require_sim = 146;
-
-    optional string log_tag_WifiHAL = 147;
-
-    optional bool logd_logpersistd_enable = 148;
-
-    optional bool media_mediadrmservice_enable = 149;
-    optional bool media_recorder_show_manufacturer_and_model = 150;
-
-    optional string net_bt_name = 151;
-    optional string net_dns1 = 152;
-    optional string net_dns2 = 153;
-    optional string net_dns3 = 154;
-    optional string net_dns4 = 155;
-    optional bool net_lte_ims_data_enabled = 156;
-    optional int32 net_qtaguid_enabled = 157;
-    optional int32 net_tcp_2g_init_rwnd = 158;
-    repeated int32 net_tcp_buffersize_default = 159;
-    repeated int32 net_tcp_buffersize_edge = 160;
-    repeated int32 net_tcp_buffersize_evdo = 161;
-    repeated int32 net_tcp_buffersize_gprs = 162;
-    repeated int32 net_tcp_buffersize_hsdpa = 163;
-    repeated int32 net_tcp_buffersize_hspa = 164;
-    repeated int32 net_tcp_buffersize_hspap = 165;
-    repeated int32 net_tcp_buffersize_hsupa = 166;
-    repeated int32 net_tcp_buffersize_lte = 167;
-    repeated int32 net_tcp_buffersize_umts = 168;
-    repeated int32 net_tcp_buffersize_wifi = 169;
-    optional int32 net_tcp_default_init_rwnd = 170;
-
-    optional bool nfc_initialized = 171;
-
-    optional bool persist_audio_fluence_speaker = 172;
-    optional bool persist_audio_fluence_voicecall = 173;
-    optional bool persist_audio_fluence_voicecomm = 174;
-    optional bool persist_audio_fluence_voicerec = 175;
-
-    optional int32 persist_camera_debug_logfile = 176;
-    optional int32 persist_camera_eis_enable = 177;
-    optional int32 persist_camera_gyro_android = 178;
-    optional int32 persist_camera_is_type = 179;
-    optional int32 persist_camera_tnr_preview = 180;
-    optional int32 persist_camera_tnr_video = 181;
-    optional int32 persist_camera_tof_direct = 182;
-
-    optional int32 persist_cne_feature = 183;
-
-    optional bool persist_data_iwlan_enable = 184;
-    optional string persist_data_mode = 185;
-
-    optional int32 persist_radio_RATE_ADAPT_ENABLE = 186;
-    optional int32 persist_radio_ROTATION_ENABLE = 187;
-    optional int32 persist_radio_VT_ENABLE = 188;
-    optional int32 persist_radio_VT_HYBRID_ENABLE = 189;
-    optional int32 persist_radio_adb_log_on = 190;
-    optional int32 persist_radio_airplane_mode_on = 191;
-    optional int32 persist_radio_apm_sim_not_pwdn = 192;
-    optional int32 persist_radio_custom_ecc = 193;
-    optional bool persist_radio_data_con_rprt = 194;
-    optional int32 persist_radio_data_ltd_sys_ind = 195;
-    optional string persist_radio_enable_tel_mon = 196;
-    optional bool persist_radio_eons_enabled = 197;
-    optional bool persist_radio_is_wps_enabled = 198;
-    optional int32 persist_radio_pwropt_modepref_0 = 199;
-    optional int32 persist_radio_ril_payload_on = 200;
-    optional int32 persist_radio_sglte_target = 201;
-    optional int32 persist_radio_sib16_support = 202;
-    optional int32 persist_radio_smlog_switch = 203;
-    optional int32 persist_radio_snapshot_enabled = 204;
-    optional int32 persist_radio_snapshot_timer = 205;
-    optional int32 persist_radio_sw_mbn_loaded = 206;
-    optional int32 persist_radio_sw_mbn_update = 207;
-    optional string persist_radio_ver_info = 208;
-    optional int32 persist_radio_videopause_mode = 209;
-
-    optional int32 persist_rcs_supported = 210;
-
-    optional string persist_sys_boot_reason = 211;
-    optional int32 persist_sys_cnd_iwlan = 212;
-    optional string persist_sys_dalvik_vm_lib_2 = 213;
-    optional string persist_sys_gps_lpp = 214;
-    optional string persist_sys_locale = 215;
-    optional int32 persist_sys_ssr_enable_ramdumps = 216;
-    optional string persist_sys_ssr_restart_level = 217;
-    optional string persist_sys_timezone = 218;
-    optional string persist_sys_usb_config = 219;
-    optional int32 persist_sys_webview_vmsize = 220;
-
-    optional string pm_dexopt_ab_ota = 221;
-    optional string pm_dexopt_bg_dexopt = 222;
-    optional string pm_dexopt_boot = 223;
-    optional string pm_dexopt_first_boot = 224;
-    optional string pm_dexopt_inactive = 225;
-    optional string pm_dexopt_install = 226;
-    optional string pm_dexopt_shared = 227;
-
-    optional string qcom_bluetooth_soc = 228;
-
-    optional int32 qdcm_diagonal_matrix_mode = 229;
-    optional int32 qdcm_only_pcc_for_trans = 230;
-
-    repeated string ril_ecclist = 231;
-    optional int32 ril_power_backoff_suppressed = 232;
-    optional int32 ril_qcril_pre_init_lock_held = 233;
-    optional string ril_voice_network_type = 234;
-    optional string rild_libpath = 235;
-
-    optional int32 ro_adb_secure = 236;
-    optional int32 ro_allow_mock_location = 237;
-    repeated string ro_atrace_core_services = 238;
-    optional string ro_baseband = 239;
-    optional int32 ro_bionic_ld_warning = 240;
-    optional bool ro_bluetooth_dun = 241;
-    optional string ro_bluetooth_hfp_ver = 242;
-    optional bool ro_bluetooth_sap = 243;
-    optional string ro_board_platform = 244;
-
-    optional string ro_boot_baseband = 245;
-    optional string ro_boot_bootdevice = 246;
-    optional string ro_boot_bootloader = 247;
-    optional string ro_boot_bootreason = 248;
-    repeated string ro_boot_boottime = 249;
-    optional int32  ro_boot_cid = 250;
-    optional string ro_boot_console = 251;
-    optional string ro_boot_ddrinfo = 252;
-    optional string ro_boot_ddrsize = 253;
-    optional int32  ro_boot_flash_locked = 254;
-    optional int32  ro_boot_fp_src = 255;
-    optional string ro_boot_hardware = 256;
-    optional string ro_boot_hardware_color = 257;
-    optional string ro_boot_hardware_ddr = 258;
-    optional string ro_boot_hardware_revision = 259;
-    optional string ro_boot_hardware_sku = 260;
-    optional string ro_boot_hardware_ufs = 261;
-    optional string ro_boot_htc_hrdump = 262;
-    optional int32  ro_boot_keymaster = 263;
-    optional string ro_boot_mid = 264;
-    optional int32  ro_boot_msm_hw_ver_id = 265;
-    optional int32  ro_boot_oem_unlock_support = 266;
-    optional int32  ro_boot_qf_st = 267;
-    optional int32  ro_boot_ramdump_enable = 268;
-    optional string ro_boot_serialno = 269;
-    optional string ro_boot_slot_suffix = 270;
-    optional int32  ro_boot_temp_protect_ignore = 271;
-    optional string ro_boot_vendor_overlay_theme = 272;
-    optional string ro_boot_verifiedbootstate = 273;
-    optional string ro_boot_veritymode = 274;
-    optional string ro_boot_wificountrycode = 275;
-
-    optional string ro_bootimage_build_date = 276;
-    optional int64  ro_bootimage_build_date_utc = 277;
-    optional string ro_bootimage_build_fingerprint = 278;
-
-    optional string ro_bootloader = 279;
-    optional string ro_bootmode = 280;
-
-    optional int64 ro_boottime_adbd = 281;
-    optional int64 ro_boottime_audioserver = 282;
-    optional int64 ro_boottime_bootanim = 283;
-    optional int64 ro_boottime_bufferhubd = 284;
-    optional int64 ro_boottime_cameraserver = 285;
-    optional int64 ro_boottime_clear_bcb = 286;
-    optional int64 ro_boottime_drm = 287;
-    optional int64 ro_boottime_gatekeeperd = 288;
-    optional int64 ro_boottime_healthd = 289;
-    optional int64 ro_boottime_hidl_memory = 290;
-    optional int64 ro_boottime_hwservicemanager = 291;
-    optional int64 ro_boottime_init = 292;
-    optional int64 ro_boottime_init_cold_boot_wait = 293;
-    optional int32 ro_boottime_init_mount_all_early = 294;
-    optional int32 ro_boottime_init_mount_all_late = 295;
-    optional int32 ro_boottime_init_selinux = 296;
-    optional int64 ro_boottime_installd = 297;
-    optional int64 ro_boottime_keystore = 298;
-    optional int64 ro_boottime_lmkd = 299;
-    optional int64 ro_boottime_logd = 300;
-    optional int64 ro_boottime_logd_reinit = 301;
-    optional int64 ro_boottime_media = 302;
-    optional int64 ro_boottime_mediadrm = 303;
-    optional int64 ro_boottime_mediaextractor = 304;
-    optional int64 ro_boottime_mediametrics = 305;
-    optional int64 ro_boottime_netd = 306;
-    optional int64 ro_boottime_performanced = 307;
-    optional int64 ro_boottime_ril_daemon = 308;
-    optional int64 ro_boottime_servicemanager = 309;
-    optional int64 ro_boottime_storaged = 310;
-    optional int64 ro_boottime_surfaceflinger = 311;
-    optional int64 ro_boottime_thermalservice = 312;
-    optional int64 ro_boottime_tombstoned = 313;
-    optional int64 ro_boottime_ueventd = 314;
-    optional int64 ro_boottime_update_engine = 315;
-    optional int64 ro_boottime_update_verifier_nonencrypted = 316;
-    optional int64 ro_boottime_vendor_adsprpcd = 317;
-    optional int64 ro_boottime_vendor_atfwd = 318;
-    optional int64 ro_boottime_vendor_audio_hal_2_0 = 319;
-    optional int64 ro_boottime_vendor_bluetooth_1_0 = 320;
-    optional int64 ro_boottime_vendor_boot_hal_1_0 = 321;
-    optional int64 ro_boottime_vendor_camera_provider_2_4 = 322;
-    optional int64 ro_boottime_vendor_cas_hal_1_0 = 323;
-    optional int64 ro_boottime_vendor_cnd = 324;
-    optional int64 ro_boottime_vendor_cnss_daemon = 325;
-    optional int64 ro_boottime_vendor_cnss_diag = 326;
-    optional int64 ro_boottime_vendor_configstore_hal = 327;
-    optional int64 ro_boottime_vendor_contexthub_hal_1_0 = 328;
-    optional int64 ro_boottime_vendor_devstart_sh = 329;
-    optional int64 ro_boottime_vendor_drm_hal_1_0 = 330;
-    optional int64 ro_boottime_vendor_drm_widevine_hal_1_0 = 331;
-    optional int64 ro_boottime_vendor_dumpstate_1_0 = 332;
-    optional int64 ro_boottime_vendor_flash_nanohub_fw = 333;
-    optional int64 ro_boottime_vendor_foreground_sh = 334;
-    optional int64 ro_boottime_vendor_fps_hal = 335;
-    optional int64 ro_boottime_vendor_gatekeeper_1_0 = 336;
-    optional int64 ro_boottime_vendor_gnss_service = 337;
-    optional int64 ro_boottime_vendor_gralloc_2_0 = 338;
-    optional int64 ro_boottime_vendor_hci_filter_root = 339;
-    optional int64 ro_boottime_vendor_hwcomposer_2_1 = 340;
-    optional int64 ro_boottime_vendor_imsdatadaemon = 341;
-    optional int64 ro_boottime_vendor_imsqmidaemon = 342;
-    optional int64 ro_boottime_vendor_init_radio_sh = 343;
-    optional int64 ro_boottime_vendor_irsc_util = 344;
-    optional int64 ro_boottime_vendor_keymaster_3_0 = 345;
-    optional int64 ro_boottime_vendor_light_hal_2_0 = 346;
-    optional int64 ro_boottime_vendor_loc_launcher = 347;
-    optional int64 ro_boottime_vendor_media_omx = 348;
-    optional int64 ro_boottime_vendor_memtrack_hal_1_0 = 349;
-    optional int64 ro_boottime_vendor_mid_sh = 350;
-    optional int64 ro_boottime_vendor_msm_irqbalance = 351;
-    optional int64 ro_boottime_vendor_nanohub_slpi = 352;
-    optional int64 ro_boottime_vendor_netmgrd = 353;
-    optional int64 ro_boottime_vendor_nfc_hal_service = 354;
-    optional int64 ro_boottime_vendor_per_mgr = 355;
-    optional int64 ro_boottime_vendor_per_proxy = 356;
-    optional int64 ro_boottime_vendor_perfd = 357;
-    optional int64 ro_boottime_vendor_port_bridge = 358;
-    optional int64 ro_boottime_vendor_power_hal_1_1 = 359;
-    optional int64 ro_boottime_vendor_power_sh = 360;
-    optional int64 ro_boottime_vendor_qseecomd = 361;
-    optional int64 ro_boottime_vendor_ramdump_auto = 362;
-    optional int64 ro_boottime_vendor_rmt_storage = 363;
-    optional int64 ro_boottime_vendor_sensors_hal_1_0 = 364;
-    optional int64 ro_boottime_vendor_ss_ramdump = 365;
-    optional int64 ro_boottime_vendor_ssr_setup = 366;
-    optional int64 ro_boottime_vendor_thermal_engine = 367;
-    optional int64 ro_boottime_vendor_time_daemon = 368;
-    optional int64 ro_boottime_vendor_usb_hal_1_1 = 369;
-    optional int64 ro_boottime_vendor_vibrator_1_0 = 370;
-    optional int64 ro_boottime_vendor_vr_1_0 = 371;
-    optional int64 ro_boottime_vendor_wifi_hal_legacy = 372;
-    optional int64 ro_boottime_virtual_touchpad = 373;
-    optional int64 ro_boottime_vndservicemanager = 374;
-    optional int64 ro_boottime_vold = 375;
-    optional int64 ro_boottime_vr_hwc = 376;
-    optional int64 ro_boottime_webview_zygote32 = 377;
-    optional int64 ro_boottime_wificond = 378;
-    optional int64 ro_boottime_wpa_supplicant = 379;
-    optional int64 ro_boottime_zygote = 380;
-    optional int64 ro_boottime_zygote_secondary = 381;
-
-    optional string ro_bt_bdaddr_path = 382;
-
-    optional bool   ro_build_ab_update = 383;
-    optional string ro_build_characteristics = 384;
-    optional string ro_build_date = 385;
-    optional int64  ro_build_date_utc = 386;
-    optional string ro_build_description = 387;
-    optional string ro_build_display_id = 388;
-    optional string ro_build_expect_baseband = 389;
-    optional string ro_build_expect_bootloader = 390;
-    optional string ro_build_fingerprint = 391;
-    optional string ro_build_flavor = 392;
-    optional string ro_build_host = 393;
-    optional string ro_build_id = 394;
-    optional string ro_build_product = 395;
-    optional bool   ro_build_system_root_image = 396;
-    optional string ro_build_tags = 397;
-    optional string ro_build_type = 398;
-    optional string ro_build_user = 399;
-    optional string ro_build_version_all_codenames = 400;
-    optional string ro_build_version_base_os = 401;
-    optional string ro_build_version_codename = 402;
-    optional string ro_build_version_incremental = 403;
-    optional int32  ro_build_version_preview_sdk = 404;
-    optional string ro_build_version_release = 405;
-    optional int32  ro_build_version_sdk = 406;
-    optional string ro_build_version_security_patch = 407;
-
-    optional int32  ro_camera_notify_nfc = 408;
-    optional string ro_carrier = 409;
-    optional bool ro_com_android_dataroaming = 410;
-    optional bool ro_com_android_prov_mobiledata = 411;
-    optional string ro_com_google_clientidbase = 412;
-    optional int32 ro_com_google_ime_theme_id = 413;
-
-    optional string ro_config_alarm_alert = 414;
-    optional string ro_config_notification_sound = 415;
-    optional string ro_config_ringtone = 416;
-    optional int32 ro_config_vc_call_vol_steps = 417;
-    optional string ro_control_privapp_permissions = 418;
-    optional int32 ro_cp_system_other_odex = 419;
-
-    optional string ro_crypto_scrypt_params = 420;
-    optional string ro_crypto_state = 421;
-    optional string ro_crypto_type = 422;
-    optional string ro_crypto_volume_filenames_mode = 423;
-    optional int32 ro_dalvik_vm_native_bridge = 424;
-    optional int32 ro_debuggable = 425;
-    optional bool ro_device_owner = 426;
-    optional string ro_error_receiver_system_apps = 427;
-
-    optional int32 ro_facelock_black_timeout = 428;
-    optional int32 ro_facelock_det_timeout = 429;
-    optional int32 ro_facelock_est_max_time = 430;
-    optional int32 ro_facelock_rec_timeout = 431;
-
-    optional string ro_frp_pst = 432;
-
-    optional string ro_hardware = 433;
-    optional string ro_hardware_power = 434;
-
-    optional int32 ro_hwui_drop_shadow_cache_size = 435;
-    optional int32 ro_hwui_gradient_cache_size = 436;
-    optional int32 ro_hwui_layer_cache_size = 437;
-    optional int32 ro_hwui_path_cache_size = 438;
-    optional int32 ro_hwui_r_buffer_cache_size = 439;
-    optional int32 ro_hwui_text_large_cache_height = 440;
-    optional int32 ro_hwui_text_large_cache_width = 441;
-    optional int32 ro_hwui_text_small_cache_height = 442;
-    optional int32 ro_hwui_text_small_cache_width = 443;
-    optional float ro_hwui_texture_cache_flushrate = 444;
-    optional int32 ro_hwui_texture_cache_size = 445;
-
-    optional bool ro_init_subcontexts_enabled = 446;
-    optional int32 ro_kernel_android_checkjni = 447;
-    optional string ro_logd_size = 448;
-    optional int32 ro_min_freq_0 = 449;
-    optional int32 ro_oem_unlock_supported = 450;
-    optional bool ro_opa_eligible_device = 451;
-    optional int32 ro_opengles_version = 452;
-    optional bool ro_persistent_properties_ready = 453;
-
-    optional string ro_product_board = 454;
-    optional string ro_product_brand = 455;
-    optional string ro_product_cpu_abi = 456;
-    repeated string ro_product_cpu_abilist = 457;
-    repeated string ro_product_cpu_abilist32 = 458;
-    optional string ro_product_cpu_abilist64 = 459;
-    optional string ro_product_device = 460;
-    optional int32  ro_product_first_api_level = 461;
-    optional string ro_product_locale = 462;
-    optional string ro_product_manufacturer = 463;
-    optional string ro_product_model = 464;
-    optional string ro_product_name = 465;
-    optional string ro_product_vendor_brand = 466;
-    optional string ro_product_vendor_device = 467;
-    optional string ro_product_vendor_manufacturer = 468;
-    optional string ro_product_vendor_model = 469;
-    optional string ro_product_vendor_name = 470;
-
-    optional int32 ro_property_service_version = 471;
-    optional string ro_qc_sdk_audio_fluencetype = 472;
-    optional int32 ro_qcom_adreno_qgl_ShaderStorageImageExtendedFormats = 473;
-    optional bool ro_qualcomm_bluetooth_ftp = 474;
-    optional bool ro_qualcomm_bluetooth_hfp = 475;
-    optional bool ro_qualcomm_bluetooth_hsp = 476;
-    optional bool ro_qualcomm_bluetooth_map = 477;
-    optional bool ro_qualcomm_bluetooth_nap = 478;
-    optional bool ro_qualcomm_bluetooth_opp = 479;
-    optional bool ro_qualcomm_bluetooth_pbap = 480;
-
-    optional string ro_radio_log_loc = 481;
-    optional string ro_radio_log_prefix = 482;
-    optional int32 ro_revision = 483;
-    optional bool ro_ril_svdo = 484;
-    optional bool ro_ril_svlte1x = 485;
-    optional int64 ro_runtime_firstboot = 486;
-    optional int32 ro_secure = 487;
-    optional string ro_serialno = 488;
-    optional int32 ro_setupwizard_enterprise_mode = 489;
-    optional bool ro_setupwizard_rotation_locked = 490;
-    optional int32 ro_sf_lcd_density = 491;
-    optional bool ro_storage_manager_enabled = 492;
-    optional bool ro_telephony_call_ring_multiple = 493;
-    optional int32 ro_telephony_default_cdma_sub = 494;
-    optional int32 ro_telephony_default_network = 495;
-    optional bool ro_treble_enabled = 496;
-    optional string ro_url_legal = 497;
-    optional string ro_url_legal_android_privacy = 498;
-    optional string ro_vendor_build_date = 499;
-    optional int64 ro_vendor_build_date_utc = 500;
-    optional string ro_vendor_build_fingerprint = 501;
-    optional string ro_vendor_extension_library = 502;
-    optional bool ro_wallpapers_loc_request_suw = 503;
-    optional string ro_wifi_channels = 504;
-    optional string ro_zygote = 505;
-
-    optional int32 sdm_debug_disable_rotator_split = 506;
-
-    optional string selinux_restorecon_recursive = 507;
-
-    optional string sendbug_preferred_domain = 508;
-
-    optional string sensors_contexthub_lid_state = 509;
-
-    optional int32 service_bootanim_exit = 510;
-    optional int32 service_sf_present_timestamp = 511;
-
-    optional string setupwizard_theme = 512;
-
-    optional string sys_boot_reason = 513;
-    optional int32 sys_boot_completed = 514;
-    optional int32 sys_ims_QMI_DAEMON_STATUS = 515;
-    optional bool sys_keymaster_loaded = 516;
-    optional bool sys_listeners_registered = 517;
-    optional int32 sys_logbootcomplete = 518;
-    optional int32 sys_oem_unlock_allowed = 519;
-    optional int32 sys_post_boot_parsed = 520;
-    optional int32 sys_qcom_devup = 521;
-    optional int32 sys_retaildemo_enabled = 522;
-    optional string sys_slpi_firmware_version = 523;
-    optional int32 sys_sysctl_extra_free_kbytes = 524;
-    optional int32 sys_sysctl_tcp_def_init_rwnd = 525;
-    optional bool sys_time_set = 526;
-    optional string sys_usb_config = 527;
-    optional int32 sys_usb_configfs = 528;
-    optional string sys_usb_controller = 529;
-    optional int32 sys_usb_ffs_max_read = 530;
-    optional int32 sys_usb_ffs_max_write = 531;
-    optional int32 sys_usb_ffs_mtp_ready = 532;
-    optional int32 sys_usb_ffs_ready = 533;
-    optional int32 sys_usb_mtp_device_type = 534;
-    optional int32 sys_usb_rps_mask = 535;
-    optional string sys_usb_state = 536;
-    optional bool sys_user_0_ce_available = 537;
-    optional int32 sys_wifitracing_started = 538;
-
-    optional int32 telephony_lteOnCdmaDevice = 539;
-
-    optional int32 tombstoned_max_tombstone_count = 540;
-
-    optional int32 vidc_debug_perf_mode = 541;
-
-    optional int32 vold_has_adoptable = 542;
-    optional int32 vold_has_quota = 543;
-    optional int32 vold_post_fs_data_done = 544;
-
-    optional int32 wc_transport_clean_up = 545;
-    optional int32 wc_transport_hci_filter_status = 546;
-    optional string wc_transport_patch_dnld_inprog = 547;
-    optional int32 wc_transport_ref_count = 548;
-    optional int32 wc_transport_soc_initialized = 549;
-    optional bool wc_transport_start_root = 550;
-    optional int32 wc_transport_vnd_power = 551;
-
-    optional string wifi_interface = 552;
-    optional string wlan_driver_status = 553;
-
-    // Next Tag: 554
+    optional Log log = 20;
+
+    optional bool   media_mediadrmservice_enable = 21;
+    optional bool   media_recorder_show_manufacturer_and_model = 22;
+
+    message Persist {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional string config_calibration_fac = 1;
+        optional int32  dbg_volte_avail_ovr = 2;
+        optional int32  dbg_vt_avail_ovr = 3;
+        optional int32  dbg_wfc_avail_ovr = 4;
+        optional int32  radio_airplane_mode_on = 5;
+        optional string radio_multisim_config = 6;
+        optional int32  rcs_supported = 7;
+        optional bool   sys_crash_rcu = 8;
+        optional string sys_dalvik_vm_lib_2 = 9;
+        optional float  sys_sf_color_saturation = 10;
+        optional string sys_timezone = 11;
+
+        // Next Tag: 12
+    }
+    optional Persist persist = 23;
+
+    message PmDexopt {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional string ab_ota = 1;
+        optional string bg_dexopt = 2;
+        optional string boot = 3;
+        optional string first_boot = 4;
+        optional string install = 5;
+
+        // Next Tag: 6
+    }
+    optional PmDexopt pm_dexopt = 24;
+
+    message Ro {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional int32  adb_secure = 1;
+        optional string arch = 2;
+        optional bool   audio_ignore_effects = 3;
+        optional bool   audio_monitorRotation = 4;
+        optional string baseband = 5;
+        optional string board_platform = 6;
+
+        message Boot {
+            option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+            optional string avb_version = 1;
+            optional string baseband = 2;
+            optional string bootdevice = 3;
+            optional string bootloader = 4;
+            repeated string boottime = 5;
+            optional string console = 6;
+            optional int32  fake_battery = 7;
+            optional string hardware = 8;
+            optional string hardware_color = 9;
+            optional string hardware_revision = 10;
+            optional string hardware_sku = 11;
+            optional string keymaster = 12;
+            optional string mode = 13;
+            optional string revision = 14;
+            optional string slot_suffix = 15;
+            optional string vbmeta_avb_version = 16;
+            optional string vendor_overlay_theme = 17;
+            optional string verifiedbootstate = 18;
+            optional string veritymode = 19;
+            optional string wificountrycode = 20;
+
+            // Next Tag: 21
+        }
+        optional Boot boot = 7;
+
+        message BootImage {
+            option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+            optional string build_date = 1;
+            optional int32  build_date_utc = 2;
+            optional string build_fingerprint = 3;
+
+            // Next Tag: 4
+        }
+        optional BootImage bootimage = 8;
+
+        optional string bootloader = 9;
+        optional string bootmode = 10;
+
+        message Build {
+            option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+            optional string date = 1;
+            optional int32  date_utc = 2;
+            optional string description = 3;
+            optional string display_id = 4;
+            optional string host = 5;
+            optional string id = 6;
+            optional string product = 7;
+            optional bool   system_root_image = 8;
+            optional string tags = 9;
+            optional string type = 10;
+            optional string user = 11;
+
+            message Version {
+                option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+                optional string version_base_os = 1;
+                optional string version_codename = 2;
+                optional string version_incremental = 3;
+                optional int32  version_preview_sdk = 4;
+                optional string version_release = 5;
+                optional int32  version_sdk = 6;
+                optional string version_security_patch = 7;
+
+                // Next Tag: 8
+            }
+            optional Version version = 12;
+
+            // Next Tag: 13
+        }
+        optional Build build = 11;
+
+        optional int32  camera_notify_nfc = 12;
+        optional string carrier = 13;
+        optional bool   com_android_dataroaming = 14;
+        optional bool   com_android_prov_mobiledata = 15;
+        optional string com_google_clientidbase = 16;
+
+        message Config {
+            option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+            optional string alarm_alert = 1;
+            optional int32  media_vol_steps = 2;
+            optional string notification_sound = 3;
+            optional string ringtone = 4;
+            optional int32  vc_call_vol_steps = 5;
+
+            // Next Tag: 6
+        }
+        optional Config config = 17;
+
+        optional string control_privapp_permissions = 18;
+        optional int32  cp_system_other_odex = 19;
+        optional string crypto_scrypt_params = 20;
+        optional string crypto_state = 21;
+        optional string crypto_type = 22;
+        optional string dalvik_vm_native_bridge = 23;
+        optional int32  debuggable = 24;
+        optional string frp_pst = 25;
+        optional string gfx_driver_0 = 26;
+
+        message Hardware {
+            option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+            optional string value = 1; // value of ro.hardware itself
+
+            optional string activity_recognition = 2;
+            optional string audio = 3;
+            optional string audio_policy = 4;
+            optional string audio_a2dp = 5;
+            optional string audio_primary = 6;
+            optional string audio_usb = 7;
+            optional string bootctrl = 8;
+            optional string camera = 9;
+            optional string consumerir = 10;
+            optional string context_hub = 11;
+            optional string egl = 12;
+            optional string fingerprint = 13;
+            optional string flp = 14;
+            optional string gatekeeper = 15;
+            optional string gps = 16;
+            optional string gralloc = 17;
+            optional string hdmi_cec = 18;
+            optional string hwcomposer = 19;
+            optional string input = 20;
+            optional string keystore = 21;
+            optional string lights = 22;
+            optional string local_time = 23;
+            optional string memtrack = 24;
+            optional string nfc = 25;
+            optional string nfc_nci = 26;
+            optional string nfc_tag = 27;
+            optional string nvram = 28;
+            optional string power = 29;
+            optional string radio = 30;
+            optional string sensors = 31;
+            optional string sound_trigger = 32;
+            optional string thermal = 33;
+            optional string tv_input = 34;
+            optional string type = 35;
+            optional string vehicle = 36;
+            optional string vibrator = 37;
+            optional string virtual_device = 38;
+            optional string vulkan = 39;
+
+            // Next Tag: 40
+        }
+        optional Hardware hardware = 27;
+
+        optional int32  kernel_qemu = 28;
+        optional int32  kernel_qemu_gles = 29;
+        optional int32  oem_unlock_supported = 30;
+        optional int32  opengles_version = 31;
+
+        message Product {
+            option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+            optional string board = 1;
+            optional string brand = 2;
+            optional string cpu_abi = 3;
+            optional string cpu_abilist = 4;
+            optional string cpu_abilist32 = 5;
+            optional string cpu_abilist64 = 6;
+            optional string device = 7;
+            optional int32  first_api_level = 8;
+            optional string manufacturer = 9;
+            optional string model = 10;
+            optional string name = 11;
+            optional string vendor_brand = 12;
+            optional string vendor_device = 13;
+            optional string vendor_manufacturer = 14;
+            optional string vendor_model = 15;
+            optional string vendor_name = 16;
+
+            // Next Tag: 17
+        }
+        optional Product product = 32;
+
+        optional int32  property_service_version = 33;
+        optional string retaildemo_video_path = 34;
+        optional string revision = 35;
+        optional int32  sf_lcd_density = 36;
+        optional bool   storage_manager_enabled = 37;
+        optional bool   telephony_call_ring_multiple = 38;
+        optional int32  telephony_default_cdma_sub = 39;
+        optional int32  telephony_default_network = 40;
+        optional string url_legal = 41;
+        optional string url_legal_android_privacy = 42;
+        optional string vendor_build_date = 43;
+        optional int32  vendor_build_date_utc = 44;
+        optional string vendor_build_fingerprint = 45;
+        optional string vndk_version = 46;
+        optional int32  vts_coverage = 47;
+        optional string zygote = 48;
+
+        // Next Tag: 49
+    }
+    optional Ro ro = 25;
+
+    optional string sendbug_preferred_domain = 26;
+    optional int32  service_bootanim_exit = 27;
+
+    message Sys {
+        option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+        optional int32  boot_completed = 1;
+        optional int32  boot_from_charger_mode = 2;
+        optional int32  retaildemo_enabled = 3;
+        optional string shutdown_requested = 4;
+
+        message Usb {
+            option (stream_proto.stream_msg).enable_fields_mapping = true;
+
+            optional string config = 1;
+            optional int32  configfs = 2;
+            optional string controller = 3;
+            optional int32  ffs_max_read = 4;
+            optional int32  ffs_max_write = 5;
+            optional int32  ffs_mtp_ready = 6;
+            optional int32  ffs_ready = 7;
+            optional int32  mtp_device_type = 8;
+            optional string state = 9;
+
+            // Next Tag: 10
+        }
+        optional Usb usb = 5;
+
+        // Next Tag: 6
+    }
+    optional Sys sys = 28;
+
+    optional int32  telephony_lteOnCdmaDevice = 29;
+    optional int32  tombstoned_max_tombstone_count = 30;
+    optional string vold_decrypt = 31;
+    optional int32  vold_post_fs_data_done = 32;
+    optional int32  vts_native_server_on = 33;
+    optional string wifi_direct_interface = 34;
+    optional string wifi_interface = 35;
+
+    // Next Tag: 36
 }