Proto message for "dumpsys sensorservice --proto"

Add SensorServiceProto for protobuf dumpsys of sensorservice. Primarily
used by incident service to capture an incident report proto.
Also add a gensrc rule to generate cpp headers of frameworks proto to
be used by native services like sensorservice. Added "static" qualifier
to a few generated fields in the header to avoid linker conflict.

Command to invoke (any of the following after lunch and env setup):
$ adb shell dumpsys sensorservice --proto
$ adb shell incident 3053
$ incident_report 3053

Bug: 146086105
Test: Execute the above commands and compare the output against dumpsys
      sensorservice

Change-Id: I282ff37bd3e845464d0693d69fc0d82943cc9855
This commit is contained in:
Mike Ma 2020-01-28 22:04:20 -08:00
parent bf3e455597
commit a47ad7266c
8 changed files with 289 additions and 50 deletions

View File

@ -656,6 +656,33 @@ gensrcs {
output_extension: "srcjar",
}
gensrcs {
name: "framework-cppstream-protos",
depfile: true,
tools: [
"aprotoc",
"protoc-gen-cppstream",
],
cmd: "mkdir -p $(genDir) " +
"&& $(location aprotoc) " +
" --plugin=$(location protoc-gen-cppstream) " +
" --dependency_out=$(depfile) " +
" --cppstream_out=$(genDir) " +
" -Iexternal/protobuf/src " +
" -I . " +
" $(in)",
srcs: [
":ipconnectivity-proto-src",
"core/proto/**/*.proto",
"libs/incident/**/*.proto",
],
output_extension: "proto.h",
}
filegroup {
name: "framework-annotations",
srcs: [
@ -1013,43 +1040,6 @@ aidl_interface {
},
}
gensrcs {
name: "gen-platform-proto-constants",
depfile: true,
tools: [
"aprotoc",
"protoc-gen-cppstream",
],
srcs: [
"core/proto/android/os/backtrace.proto",
"core/proto/android/os/batterytype.proto",
"core/proto/android/os/cpufreq.proto",
"core/proto/android/os/cpuinfo.proto",
"core/proto/android/os/data.proto",
"core/proto/android/os/kernelwake.proto",
"core/proto/android/os/pagetypeinfo.proto",
"core/proto/android/os/procrank.proto",
"core/proto/android/os/ps.proto",
"core/proto/android/os/system_properties.proto",
"core/proto/android/util/event_log_tags.proto",
"core/proto/android/util/log.proto",
],
// Append protoc-gen-cppstream tool's PATH otherwise aprotoc can't find the plugin tool
cmd: "mkdir -p $(genDir) " +
"&& $(location aprotoc) " +
" --plugin=$(location protoc-gen-cppstream) " +
" --dependency_out=$(depfile) " +
" --cppstream_out=$(genDir) " +
" -Iexternal/protobuf/src " +
" -I . " +
" $(in)",
output_extension: "proto.h",
}
subdirs = [
"cmds/*",

View File

@ -44,7 +44,7 @@ cc_defaults {
"src/ih_util.cpp",
],
generated_headers: ["gen-platform-proto-constants"],
generated_headers: ["framework-cppstream-protos"],
shared_libs: [
"libbase",

View File

@ -43,7 +43,7 @@ cc_binary {
],
local_include_dirs: ["src"],
generated_headers: ["gen-platform-proto-constants"],
generated_headers: ["framework-cppstream-protos"],
proto: {
type: "lite",
@ -98,7 +98,7 @@ cc_test {
],
local_include_dirs: ["src"],
generated_headers: ["gen-platform-proto-constants"],
generated_headers: ["framework-cppstream-protos"],
srcs: [
"tests/**/*.cpp",

View File

@ -52,6 +52,7 @@ import "frameworks/base/core/proto/android/service/package.proto";
import "frameworks/base/core/proto/android/service/print.proto";
import "frameworks/base/core/proto/android/service/procstats.proto";
import "frameworks/base/core/proto/android/service/restricted_image.proto";
import "frameworks/base/core/proto/android/service/sensor_service.proto";
import "frameworks/base/core/proto/android/service/usb.proto";
import "frameworks/base/core/proto/android/util/event_log_tags.proto";
import "frameworks/base/core/proto/android/util/log.proto";
@ -492,6 +493,11 @@ message IncidentProto {
(section).args = "contexthub --proto"
];
optional android.service.SensorServiceProto sensor_service = 3053 [
(section).type = SECTION_DUMPSYS,
(section).args = "sensorservice --proto"
];
// Reserved for OEMs.
extensions 50000 to 100000;
}

View File

@ -27,7 +27,6 @@ import "frameworks/base/core/proto/android/content/component_name.proto";
import "frameworks/base/core/proto/android/content/configuration.proto";
import "frameworks/base/core/proto/android/content/intent.proto";
import "frameworks/base/core/proto/android/content/package_item_info.proto";
import "frameworks/base/core/proto/android/graphics/rect.proto";
import "frameworks/base/core/proto/android/internal/processstats.proto";
import "frameworks/base/core/proto/android/os/bundle.proto";
import "frameworks/base/core/proto/android/os/looper.proto";

View File

@ -17,8 +17,6 @@
syntax = "proto2";
package com.android.server.notification;
import "frameworks/base/core/proto/android/server/enums.proto";
option java_multiple_files = true;
// On disk data store for historical notifications

View File

@ -0,0 +1,246 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
syntax = "proto2";
package android.service;
import "frameworks/base/core/proto/android/privacy.proto";
option java_multiple_files = true;
/*
* Notes:
* 1. When using ProtoOutputStream to write this proto message, must call
* token = ProtoOutputStream#start(fieldId) before and ProtoOutputStream#end(token) after
* writing a nested message.
* 2. Never reuse a proto field number. When removing a field, mark it as reserved.
*/
// Proto dump of android::SensorService. dumpsys sensorservice --proto
message SensorServiceProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
enum OperatingModeEnum {
OP_MODE_UNKNOWN = 0;
OP_MODE_NORMAL = 1;
OP_MODE_RESTRICTED = 2;
OP_MODE_DATA_INJECTION = 3;
}
optional int64 current_time_ms = 1;
optional SensorDeviceProto sensor_device = 2;
optional SensorListProto sensors = 3;
optional SensorFusionProto fusion_state = 4;
optional SensorEventsProto sensor_events = 5;
repeated ActiveSensorProto active_sensors = 6;
optional int32 socket_buffer_size = 7;
optional int32 socket_buffer_size_in_events = 8;
optional bool wake_lock_acquired = 9;
optional OperatingModeEnum operating_mode = 10;
// Non-empty only if operating_mode is RESTRICTED or DATA_INJECTION.
optional string whitelisted_package = 11;
optional bool sensor_privacy = 12;
repeated SensorEventConnectionProto active_connections = 13;
repeated SensorDirectConnectionProto direct_connections = 14;
repeated SensorRegistrationInfoProto previous_registrations = 15;
}
// Proto dump of android::SensorDevice
message SensorDeviceProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional bool initialized = 1;
optional int32 total_sensors = 2;
optional int32 active_sensors = 3;
message SensorProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional int32 handle = 1;
optional int32 active_count = 2;
repeated float sampling_period_ms = 3;
optional float sampling_period_selected = 4;
repeated float batching_period_ms = 5;
optional float batching_period_selected = 6;
}
repeated SensorProto sensors = 4;
}
// Proto dump of android::SensorServiceUtil::SensorList
message SensorListProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
enum ReportingModeEnum {
RM_UNKNOWN = 0;
RM_CONTINUOUS = 1;
RM_ON_CHANGE = 2;
RM_ONE_SHOT = 3;
RM_SPECIAL_TRIGGER = 4;
}
message SensorProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional int32 handle = 1;
optional string name = 2;
optional string vendor = 3;
optional int32 version = 4;
optional string string_type = 5;
optional int32 type = 6;
optional string required_permission = 7;
optional int32 flags = 8;
optional ReportingModeEnum reporting_mode = 9;
optional int32 max_delay_us = 10;
optional int32 min_delay_us = 11;
optional int32 fifo_max_event_count = 12;
optional int32 fifo_reserved_event_count = 13;
optional bool is_wakeup = 14;
optional bool data_injection_supported = 15;
optional bool is_dynamic = 16;
optional bool has_additional_info = 17;
optional int32 highest_rate_level = 18;
optional bool ashmem = 19;
optional bool gralloc = 20;
optional float min_value = 21;
optional float max_value = 22;
optional float resolution = 23;
optional float power_usage = 24;
}
repeated SensorProto sensors = 1;
}
// Proto dump of android::SensorFusion
message SensorFusionProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
message FusionProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional bool enabled = 1;
optional int32 num_clients = 2;
optional float estimated_gyro_rate = 3;
optional float attitude_x = 4;
optional float attitude_y = 5;
optional float attitude_z = 6;
optional float attitude_w = 7;
optional float attitude_length = 8;
optional float bias_x = 9;
optional float bias_y = 10;
optional float bias_z = 11;
}
optional FusionProto fusion_9axis = 1;
optional FusionProto fusion_nomag = 2;
optional FusionProto fusion_nogyro = 3;
}
// Proto dump of android::SensorServiceUtil::RecentEventLogger
message SensorEventsProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
message Event {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional float timestamp_sec = 1;
optional int64 wall_timestamp_ms = 2;
optional bool masked = 3;
optional int64 int64_data = 4;
repeated float float_array = 5;
}
message RecentEventsLog {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional string name = 1;
optional int32 recent_events_count = 2;
repeated Event events = 3;
}
repeated RecentEventsLog recent_events_logs = 1;
}
message ActiveSensorProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional string name = 1;
optional int32 handle = 2;
optional int32 num_connections = 3;
}
// Proto dump of android::SensorService::SensorDirectConnection
message SensorDirectConnectionProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
message SensorProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional int32 sensor = 1;
optional int32 rate = 2;
}
optional string package_name = 1;
optional int32 hal_channel_handle = 2;
optional int32 num_sensor_activated = 3;
repeated SensorProto sensors = 4;
}
// Proto dump of android::SensorService::SensorEventConnection
message SensorEventConnectionProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
message FlushInfoProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional string sensor_name = 1;
optional int32 sensor_handle = 2;
optional bool first_flush_pending = 3;
optional int32 pending_flush_events_to_send = 4;
}
enum OperatingModeEnum {
OP_MODE_UNKNOWN = 0;
OP_MODE_NORMAL = 1;
OP_MODE_RESTRICTED = 2;
OP_MODE_DATA_INJECTION = 3;
}
optional OperatingModeEnum operating_mode = 1;
optional string package_name = 2;
optional int32 wake_lock_ref_count = 3;
optional int32 uid = 4;
optional int32 cache_size = 5;
optional int32 max_cache_size = 6;
repeated FlushInfoProto flush_infos = 7;
optional int32 events_received = 8;
optional int32 events_sent = 9;
optional int32 events_cache = 10;
optional int32 events_dropped = 11;
optional int32 total_acks_needed = 12;
optional int32 total_acks_received = 13;
}
// Proto dump of android::SensorService::SensorRegistrationInfo
message SensorRegistrationInfoProto {
option (android.msg_privacy).dest = DEST_AUTOMATIC;
optional int64 timestamp_sec = 1;
optional int32 sensor_handle = 2;
optional string package_name = 3;
optional int32 pid = 4;
optional int32 uid = 5;
optional int64 sampling_rate_us = 6;
optional int64 max_report_latency_us = 7;
optional bool activated = 8;
}

View File

@ -33,13 +33,13 @@ write_enum(stringstream& text, const EnumDescriptorProto& enu, const string& ind
if (GENERATE_MAPPING) {
string name = make_constant_name(enu.name());
string prefix = name + "_";
text << indent << "const int _ENUM_" << name << "_COUNT = " << N << ";" << endl;
text << indent << "const char* _ENUM_" << name << "_NAMES[" << N << "] = {" << endl;
text << indent << "static const int _ENUM_" << name << "_COUNT = " << N << ";" << endl;
text << indent << "static const char* _ENUM_" << name << "_NAMES[" << N << "] = {" << endl;
for (int i=0; i<N; i++) {
text << indent << INDENT << "\"" << stripPrefix(enu.value(i).name(), prefix) << "\"," << endl;
}
text << indent << "};" << endl;
text << indent << "const int _ENUM_" << name << "_VALUES[" << N << "] = {" << endl;
text << indent << "static const int _ENUM_" << name << "_VALUES[" << N << "] = {" << endl;
for (int i=0; i<N; i++) {
text << indent << INDENT << make_constant_name(enu.value(i).name()) << "," << endl;
}
@ -102,13 +102,13 @@ write_message(stringstream& text, const DescriptorProto& message, const string&
if (GENERATE_MAPPING) {
N = message.field_size();
text << indented << "const int _FIELD_COUNT = " << N << ";" << endl;
text << indented << "const char* _FIELD_NAMES[" << N << "] = {" << endl;
text << indented << "static const int _FIELD_COUNT = " << N << ";" << endl;
text << indented << "static const char* _FIELD_NAMES[" << N << "] = {" << endl;
for (int i=0; i<N; i++) {
text << indented << INDENT << "\"" << message.field(i).name() << "\"," << endl;
}
text << indented << "};" << endl;
text << indented << "const uint64_t _FIELD_IDS[" << N << "] = {" << endl;
text << indented << "static const uint64_t _FIELD_IDS[" << N << "] = {" << endl;
for (int i=0; i<N; i++) {
text << indented << INDENT << make_constant_name(message.field(i).name()) << "," << endl;
}
@ -152,7 +152,7 @@ write_header_file(CodeGeneratorResponse* response, const FileDescriptorProto& fi
write_message(text, file_descriptor.message_type(i), "");
}
for (vector<string>::iterator it = namespaces.begin(); it != namespaces.end(); it++) {
for (vector<string>::reverse_iterator it = namespaces.rbegin(); it != namespaces.rend(); it++) {
text << "} // " << *it << endl;
}