summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chenjie Yu <cjyu@google.com> 2018-08-29 11:49:11 -0700
committer Chenjie Yu <cjyu@google.com> 2018-09-10 18:26:33 -0700
commit159e4f8f461097a2dfffb545f46734dd7d9610f3 (patch)
treeb03a696f749bbbb3799c0ecbd630adebf711362b
parent1941814f8e9b44d91f996b137e8683fbf80bc70a (diff)
allow use of atom definition outside of atoms.proto in pulled atoms
There will be followup cls to add support of new types that can be nested and repeated. + skip StatsLog.write signature generation for pulled atoms. Bug: 113872139 Test: manual test Change-Id: I69d0ee0b2fe8e286e48eac20ec2c8b280c477bf0
-rw-r--r--cmds/statsd/Android.bp1
-rw-r--r--cmds/statsd/src/atoms.proto2
-rw-r--r--tools/stats_log_api_gen/Collation.cpp19
-rw-r--r--tools/stats_log_api_gen/Collation.h2
-rw-r--r--tools/stats_log_api_gen/main.cpp2
5 files changed, 19 insertions, 7 deletions
diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp
index 3fae586725ec..94203f4feccd 100644
--- a/cmds/statsd/Android.bp
+++ b/cmds/statsd/Android.bp
@@ -46,6 +46,7 @@ cc_library_host_shared {
// ==== java proto device library (for test only) ==============================
java_library {
name: "statsdprotolite",
+ no_framework_libs: true,
proto: {
type: "lite",
include_dirs: ["external/protobuf/src"],
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 8f3ad9df2370..d117f390705d 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -30,6 +30,7 @@ import "frameworks/base/core/proto/android/telecomm/enums.proto";
import "frameworks/base/core/proto/android/telephony/enums.proto";
import "frameworks/base/core/proto/android/view/enums.proto";
import "frameworks/base/proto/src/stats_enums.proto";
+import "frameworks/base/core/proto/android/service/procstats.proto";
/**
* The master atom class. This message defines all of the available
@@ -165,6 +166,7 @@ message Atom {
DirectoryUsage directory_usage = 10026;
AppSize app_size = 10027;
CategorySize category_size = 10028;
+ android.service.procstats.ProcessStatsSectionProto proc_stats = 10029;
}
// DO NOT USE field numbers above 100,000 in AOSP. Field numbers above
diff --git a/tools/stats_log_api_gen/Collation.cpp b/tools/stats_log_api_gen/Collation.cpp
index f294728860ae..4245700ed90d 100644
--- a/tools/stats_log_api_gen/Collation.cpp
+++ b/tools/stats_log_api_gen/Collation.cpp
@@ -195,9 +195,11 @@ int collate_atom(const Descriptor *atom, AtomDecl *atomDecl,
print_error(field, "Unkown type for field: %s\n", field->name().c_str());
errorCount++;
continue;
- } else if (javaType == JAVA_TYPE_OBJECT) {
+ } else if (javaType == JAVA_TYPE_OBJECT &&
+ atomDecl->code < PULL_ATOM_START_ID) {
// Allow attribution chain, but only at position 1.
- print_error(field, "Message type not allowed for field: %s\n",
+ print_error(field,
+ "Message type not allowed for field in pushed atoms: %s\n",
field->name().c_str());
errorCount++;
continue;
@@ -233,12 +235,19 @@ int collate_atom(const Descriptor *atom, AtomDecl *atomDecl,
java_type_t javaType = java_type(field);
AtomField atField(field->name(), javaType);
+ // Generate signature for pushed atoms
+ if (atomDecl->code < PULL_ATOM_START_ID) {
+ if (javaType == JAVA_TYPE_ENUM) {
+ // All enums are treated as ints when it comes to function signatures.
+ signature->push_back(JAVA_TYPE_INT);
+ collate_enums(*field->enum_type(), &atField);
+ } else {
+ signature->push_back(javaType);
+ }
+ }
if (javaType == JAVA_TYPE_ENUM) {
// All enums are treated as ints when it comes to function signatures.
- signature->push_back(JAVA_TYPE_INT);
collate_enums(*field->enum_type(), &atField);
- } else {
- signature->push_back(javaType);
}
atomDecl->fields.push_back(atField);
diff --git a/tools/stats_log_api_gen/Collation.h b/tools/stats_log_api_gen/Collation.h
index ccdd1458f656..31b8b07472cc 100644
--- a/tools/stats_log_api_gen/Collation.h
+++ b/tools/stats_log_api_gen/Collation.h
@@ -34,6 +34,8 @@ using std::vector;
using google::protobuf::Descriptor;
using google::protobuf::FieldDescriptor;
+const int PULL_ATOM_START_ID = 10000;
+
/**
* The types for atom parameters.
*/
diff --git a/tools/stats_log_api_gen/main.cpp b/tools/stats_log_api_gen/main.cpp
index 83a66312b425..991547916919 100644
--- a/tools/stats_log_api_gen/main.cpp
+++ b/tools/stats_log_api_gen/main.cpp
@@ -18,8 +18,6 @@ using namespace std;
namespace android {
namespace stats_log_api_gen {
-const int PULL_ATOM_START_ID = 1000;
-
int maxPushedAtomId = 2;
using android::os::statsd::Atom;