| /* |
| * Copyright (C) 2017 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"; |
| |
| import "frameworks/base/cmds/statsd/src/atoms.proto"; |
| import "frameworks/base/cmds/statsd/src/atom_field_options.proto"; |
| |
| package android.stats_log_api_gen; |
| |
| message IntAtom { |
| optional int32 field1 = 1; |
| } |
| |
| message AnotherIntAtom { |
| optional int32 field1 = 1; |
| } |
| |
| message OutOfOrderAtom { |
| optional int32 field2 = 2; |
| optional int32 field1 = 1; |
| } |
| |
| enum AnEnum { |
| VALUE0 = 0; |
| VALUE1 = 1; |
| } |
| |
| message AllTypesAtom { |
| repeated android.os.statsd.AttributionNode attribution_chain = 1; |
| optional float float_field = 2; |
| optional int64 int64_field = 3; |
| optional uint64 uint64_field = 4; |
| optional int32 int32_field = 5; |
| optional fixed64 fixed64_field = 6; |
| optional fixed32 fixed32_field = 7; |
| optional bool bool_field = 8; |
| optional string string_field = 9; |
| optional uint32 uint32_field = 10; |
| optional AnEnum enum_field = 11; |
| optional sfixed32 sfixed32_field = 12; |
| optional sfixed64 sfixed64_field = 13; |
| optional sint32 sint32_field = 14; |
| optional sint64 sint64_field = 15; |
| } |
| |
| message Event { |
| oneof event { |
| OutOfOrderAtom out_of_order_atom = 2; |
| IntAtom int_atom = 1; |
| AnotherIntAtom another_int_atom = 3; |
| AllTypesAtom all_types_atom = 4; |
| } |
| } |
| |
| message BadTypesAtom { |
| optional IntAtom bad_int_atom = 1; |
| optional bytes bad_bytes = 2; |
| repeated int32 repeated_field = 3; |
| optional double double_field = 4; |
| } |
| |
| message BadTypesEvent { |
| oneof event { |
| BadTypesAtom bad_types_atom = 1; |
| } |
| } |
| |
| message BadSkippedFieldSingleAtom { |
| optional int32 field2 = 2; |
| } |
| |
| message BadSkippedFieldSingle { |
| oneof event { |
| BadSkippedFieldSingleAtom bad = 1; |
| } |
| } |
| |
| message BadSkippedFieldMultipleAtom { |
| optional int32 field1 = 1; |
| optional int32 field3 = 3; |
| optional int32 field5 = 5; |
| } |
| |
| message BadSkippedFieldMultiple { |
| oneof event { |
| BadSkippedFieldMultipleAtom bad = 1; |
| } |
| } |
| |
| message BadAttributionNodePositionAtom { |
| optional int32 field1 = 1; |
| repeated android.os.statsd.AttributionNode attribution = 2; |
| } |
| |
| message BadAttributionNodePosition { |
| oneof event { BadAttributionNodePositionAtom bad = 1; } |
| } |
| |
| message GoodEventWithBinaryFieldAtom { |
| oneof event { GoodBinaryFieldAtom field1 = 1; } |
| } |
| |
| message ComplexField { |
| optional string str = 1; |
| } |
| |
| message GoodBinaryFieldAtom { |
| optional int32 field1 = 1; |
| optional ComplexField bf = 2 [(android.os.statsd.log_mode) = MODE_BYTES]; |
| } |
| |
| message BadEventWithBinaryFieldAtom { |
| oneof event { BadBinaryFieldAtom field1 = 1; } |
| } |
| |
| message BadBinaryFieldAtom { |
| optional int32 field1 = 1; |
| optional ComplexField bf = 2; |
| } |
| |
| message BadStateAtoms { |
| oneof event { |
| BadStateAtom1 bad1 = 1; |
| BadStateAtom2 bad2 = 2; |
| BadStateAtom3 bad3 = 3; |
| } |
| } |
| |
| message GoodStateAtoms { |
| oneof event { |
| GoodStateAtom1 good1 = 1; |
| GoodStateAtom2 good2 = 2; |
| } |
| } |
| |
| // The atom has only primary field but no exclusive state field. |
| message BadStateAtom1 { |
| optional int32 uid = 1 [(android.os.statsd.state_field_option).primary_field = true]; |
| } |
| |
| // Only primative types can be annotated. |
| message BadStateAtom2 { |
| repeated android.os.statsd.AttributionNode attribution = 1 |
| [(android.os.statsd.state_field_option).primary_field = true]; |
| optional int32 state = 2 [(android.os.statsd.state_field_option).exclusive_state = true]; |
| } |
| |
| // Having 2 exclusive state field in the atom means the atom is badly designed. |
| // E.g., putting bluetooth state and wifi state in the same atom. |
| message BadStateAtom3 { |
| optional int32 uid = 1 [(android.os.statsd.state_field_option).primary_field = true]; |
| optional int32 state = 2 [(android.os.statsd.state_field_option).exclusive_state = true]; |
| optional int32 state2 = 3 [(android.os.statsd.state_field_option).exclusive_state = true]; |
| } |
| |
| message GoodStateAtom1 { |
| optional int32 uid = 1 [(android.os.statsd.state_field_option).primary_field = true]; |
| optional int32 state = 2 [(android.os.statsd.state_field_option).exclusive_state = true]; |
| } |
| |
| // Atoms can have exclusive state field, but no primary field. That means |
| // the state is globally exclusive (e.g., DisplayState). |
| message GoodStateAtom2 { |
| optional int32 uid = 1; |
| optional int32 state = 2 [(android.os.statsd.state_field_option).exclusive_state = true]; |
| } |
| |
| // We can have more than one primary fields. That means their combination is a |
| // primary key. |
| message GoodStateAtom3 { |
| optional int32 uid = 1 [(android.os.statsd.state_field_option).primary_field = true]; |
| optional int32 tid = 2 [(android.os.statsd.state_field_option).primary_field = true]; |
| optional int32 state = 3 [(android.os.statsd.state_field_option).exclusive_state = true]; |
| } |
| |
| message WhitelistedAtom { |
| optional int32 field = 1; |
| } |
| |
| message NonWhitelistedAtom { |
| optional int32 field = 1; |
| } |
| |
| message ListedAtoms { |
| oneof event { |
| // Atoms can be whitelisted i.e. they can be triggered by any source |
| WhitelistedAtom whitelisted_atom = 1 [(android.os.statsd.allow_from_any_uid) = true]; |
| // Atoms are not whitelisted by default, so they can only be triggered |
| // by whitelisted sources |
| NonWhitelistedAtom non_whitelisted_atom = 2; |
| } |
| } |
| |
| message ModuleOneAtom { |
| optional int32 field = 1 [(android.os.statsd.is_uid) = true]; |
| } |
| |
| message ModuleTwoAtom { |
| optional int32 field = 1; |
| } |
| |
| message ModuleOneAndTwoAtom { |
| optional int32 field = 1 [(android.os.statsd.state_field_option).exclusive_state = true]; |
| } |
| |
| message NoModuleAtom { |
| optional string field = 1; |
| } |
| |
| message ModuleAtoms { |
| oneof event { |
| ModuleOneAtom module_one_atom = 1 [(android.os.statsd.module) = "module1"]; |
| ModuleTwoAtom module_two_atom = 2 [(android.os.statsd.module) = "module2"]; |
| ModuleOneAndTwoAtom module_one_and_two_atom = 3 [ |
| (android.os.statsd.module) = "module1", (android.os.statsd.module) = "module2" |
| ]; |
| NoModuleAtom no_module_atom = 4; |
| } |
| } |