Commit Graph

44 Commits

Author SHA1 Message Date
Mark Tabry
529d73bd4f Add AIDL interface and puller implementation for automotive devices.
Changes:
  - Adds hidden ICarStatsService AIDL API.
  - Adds CarStatsPuller for pulling atoms from ICarStatsService.
  - Pulls VmsClientStats via CarStatsPuller.

Bug: 141697665
Test: Manual testing on hawk using statsd_testdrive
Change-Id: I44e104d430f64b1bd3dce96e9749df79ab3d2fbf
Merged-In: I44e104d430f64b1bd3dce96e9749df79ab3d2fbf
(cherry picked from commit 9dc13578f7)
2019-12-02 13:08:13 -08:00
TreeHugger Robot
d0ffaeb4b5 Merge "Handle condition changes when metric is not active." into qt-dev 2019-06-01 05:31:14 +00:00
Muhammad Qureshi
18e469298e Handle condition changes when metric is not active.
Treat metric activation like conditions as much as possible. Keep track
of condition changes even when metric is not active. Right now, we
ignore all condition changes if metric is not active.

This is a band-aid fix. Ideally, we should re-think how metric activation is
implemented and consider implementing it as a condition with a timebomb.

Bug: 130838341
Test: statsd_test
Test: cts-tradefed run cts-dev -m CtsStatsdHostTestCases -t
android.cts.statsd.metric

Change-Id: I96bb7a7c6ee88359f310065e166f858be945eaff
2019-05-31 15:38:36 -07:00
Max Dashouk
11e0d40bbe Fixes the bug that can occur when StatsCompanionService calls
StatsService to update UID data and overflows kernel transfer buffer.

In this case, the IPC call silently fails. The issue was discovered in Android Automotive Embedded use case that employs multiuser setup. This causes more uid data being sent via one-way StatsCompanionService::informAllUidData call than usual and can trigger the issue. As the result, uid map on statsd side is empty and many metrics are not captured.

Bug: b/132444397
Fixes: b/132444397
Test: Did a clean build of master branch and flashed the device. adb
shell cmd stats print-uid-map returned without any result. Repeated the
steps after implementing the fix, print-uid-map returns the results now.

Change-Id: I1451c13b36696449c145c51618c68d10e29a596a
2019-05-23 20:53:58 +00:00
Yao Chen
e6cfb1417d Add a condition timer to track the duration of condition being true.
+ Plug it in ValueMetric as the frist step as we often need to normalize the values
  by the duration of condition being true.

  E.g., Coulomb counter drop / screen_on_and_on_battery_time

  Having a simple timer inside the metric will eliminate the need of creating
  another duration metric and joining them on server side.

Test: statsd_test
Fix: 130048020

Change-Id: Ie377dc6de917176ab07843e0dfd8506ed1d5db75
2019-04-09 19:21:12 +00:00
Yao Chen
0f861867c6 Make StatsLog drop less.
+ Create a thread-safe LogEventQueue to buffer log events.

+ The socket listner thread will read from socket and write to the buffer as quickly as possible
  to minimize the data loss in socket.

+ All pushed data is fetched from the the buffer and processed in a dedicated thread. After an
  event is fetched from the queue, we no longer block the socket listener thread.

+ Report event queue stats via statsdstats, including the min and max queue event history span in
  the queue (to understand how slow statsd can be and how fast the events can be)

Bug: 119031518
Test: unit tests added in statsd_test

Change-Id: I6b65ed9a678935b2e24302ba4b36e69c157adde4
2019-03-28 14:44:37 -07:00
Joe Onorato
99598ee6ee incidentd can now handle multiple callers asking it for incident reports
Test: bit incident_test:* GtsIncidentManagerTestCases:*
Bug: 123543706
Change-Id: I9f671dd5d8b2ad139f952a23e575c2be16120459
2019-03-26 11:20:48 -07:00
Yiwei Zhang
d476542338 Game Driver Metrics: add tests for GpuStatsPuller
Bug: 123529932
Test: atest GpuStatsPuller_test
Change-Id: I325f90d203539b51ee0a9deb2b048b8671e5e89a
2019-03-12 15:29:49 -07:00
TreeHugger Robot
55805af719 Merge "Add receiver info to IncidentdDetails in statsd_config" 2019-03-05 09:15:31 +00:00
Yao Chen
a8e78b9b88 Add receiver info to IncidentdDetails in statsd_config
This can be used for sending a broadcast to an app which incidentd
would share the incident report with.

Test: added unit test in statsd_test

Change-Id: Ieaf5b3b4d67168e2a99ff54e6392c77d8372ed4e
2019-03-04 23:47:27 -08:00
Yiwei Zhang
7e6330353e Game Driver Metrics: add GpuStatsPuller to get gpu global stats
Bug: 123529932
Test: adb shell cmd stats pull-source 10054
Change-Id: Ib43a93661d24ce0d4b1e1ae6b6d0b50dbdfd3c15
2019-03-01 22:43:32 -08:00
Harry Zhang
fe16c8f2f9 Added a filegroup for statsd config proto definition.
This is used for a testing framework that involves serializing text
proto statsd configs at build time. The filegroup allows aprotoc to
access the definitions elsewhere in the source tree.

Submitting this in internal first as the AOSP version of statsd old and
causes merge conflicts when submitted there directly.

Bug: 120569785
Test: Build is not affected.
Change-Id: I0e37a9b9a1f22a5dcebbf07ccc5cad98cf76024c
2019-02-26 10:50:56 -08:00
Chenjie Yu
97dbb206de TrainInfo persist onto disk
+ TrainInfo puller

Bug: 122807604
Test: will add gts
Change-Id: Iac9576ba0edc235dc117950f92bc7d7a8ad75ca8
2019-02-13 17:42:35 -08:00
Chenjie Yu
6b1667c8b1 add api to log BinaryPushStateChanged atom
This api is to log BinaryPushStateChanged.
Experiment id is added as a binary blob that is not expected to be
accessed on device side.
This cl is mainly for API.
Will add follow up cls for persisting train info on disk and make puller
for it.
Will address sepolicy in follow up cls.

Bug: 119633962
Bug: 119685453
Test: will add gts
Change-Id: I68b4246cf7e8079155e16121ca37a312b35a5328
2019-02-13 10:47:27 -08:00
Tej Singh
a0c89dd5b6 Statsd Puller Callback Registration
Creates a hidden api to register puller callbacks for vendor atoms.

Test: manual local test
Test: statsd unit tests
Bug: 119898637
Change-Id: Id28817b8fc718e128adc4e1c6b2e997db84517f9
2019-02-11 14:24:03 -08:00
Chenjie Yu
c7939cba3d Persist active metrics to disk and read back
For metric activation that spans across boots, we need to persist active
metrics onto disk upon shutdown and load them on boot.

Bug: 123904359
Test: unit test
Change-Id: I5a4142a42595c8c132175fb574c3aa2ad30dcac0
2019-02-06 09:54:38 -08:00
Tej Singh
e765dc6e5f Merge "Statsd uses ThermalService to pull temperatures" 2019-01-24 06:10:13 +00:00
Tej Singh
9876a3bc5b Statsd uses ThermalService to pull temperatures
Make statsd use thermal service to pull temperature events. This way we
do not have to directly use thermal hal and manage multiple versions.

Test: adb shell cmd stats pull-source 10021 on blueline-userdebug
Received 8 CPU temps, 2 GPU, 1 skin, 1 battery, 1 usbc, and 1 NPU
Numbers looked reasonable: CPUs were at ~35C, GPU at 34-35, battery at
28, skin at 30, NPU was higher at 43.
Bug: 119228310

Change-Id: Id84b7855bfb91d0439d856a30ad4e40a087f2d4f
2019-01-11 15:25:42 -08:00
Yao Chen
5c5513f2c7 Merge "Add a timeout option in shell subscriber." 2019-01-04 17:51:45 +00:00
Yao Chen
35cb8d6537 Add a timeout option in shell subscriber.
Test: cts added
Change-Id: I0fe854fcfd5535ed03e502a4cad3f57079b45381
2019-01-03 17:00:39 -08:00
Tej Singh
06ba0a7db0 Merge "Migrate statsd to thermal hal v2" 2019-01-03 22:55:41 +00:00
Chenjie Yu
0bd73dbaac Puller refactor
1) Refactor pullers and add tests.

2) Add timeout to a puller.
mPullTimeoutNs is intrinsic to puller. A pull taking longer than this is
deemed failed and the data discarded.
A metric or StatsPullerManager requesting a pull should monitor the pull
and have deadlineNs. A successful pull may come later than desired due
to statsd processing delays.

3) Add unit tests to puller now that the base puller is more
complicated.

Bug: 118756964
Test: unit test
Change-Id: I0e5d47e2527391f7beef4b2d06bfd5c2f82f1179
2018-12-21 09:46:09 -08:00
Tej Singh
b6070b9c1c Migrate statsd to thermal hal v2
Part 1 of 2 in migrating statsd to thermal hal v2. Updates the
temperature puller to use thermal hal v2.

Bug: 119228310
Test: adb shell cmd stats pull-source 10021 on blueline. Received 8 cpu
temps, 2 gpu, 1 skin, 1 battery, 1 usb, and 1 npu. Did not receive any
bcl or power amplifier

Change-Id: I8804e282ea928c1815c2a29e72728edf9a053988
2018-12-19 19:05:51 -08:00
TreeHugger Robot
94b33fb532 Merge "Statsd pulls on-device power measurements" 2018-11-13 22:29:27 +00:00
Bookatz
92da2835b1 Statsd pulls on-device power measurements
Pulls power rail measurements into statslog.

Bug: 119034725
Test: cts-tradefed run cts-dev -m CtsStatsdHostTestCases -t android.cts.statsd.atom.HostAtomTests
(after enabling OPTINAL_TESTS_ENABLED)

Change-Id: If083ae50160d508a9d180f748f9515557d35d8a1
2018-11-13 10:42:17 -08:00
Colin Cross
43ac27281b Revert "Convert statsd_test and statsd_benchmark to proto lite" am: 47046b80d2 am: 65200cf70e
am: bd7c4efbb6

Change-Id: Id4bab0ce60f08ce358db99c67c58cbef0fe6e589
2018-11-06 11:34:29 -08:00
Colin Cross
5d258093a8 Convert statsd_test and statsd_benchmark to proto lite am: e7908d7b62 am: 5742f9ffa7
am: 85201e02df

Change-Id: Id99366ec5900c71ba712dbee99fbefb5b785b827
2018-11-04 18:33:00 -08:00
Colin Cross
47046b80d2 Revert "Convert statsd_test and statsd_benchmark to proto lite"
This reverts commit e7908d7b62.

Change-Id: I585991ab1d5b35930bee6e32b82714aa11fbcb41
2018-11-04 17:24:26 -08:00
Colin Cross
e7908d7b62 Convert statsd_test and statsd_benchmark to proto lite
libplatformprotos for the device is compiled using proto lite, and
statsd_test and statsd_benchmark have protos that reference the
libplatformprotos.  With protobuf 3.5.2 compiling a full proto
against a lite proto doesn't work.  Convert them to lite.  Requires
adding the protobuf internal protos to the sources,
libprotobuf-cpp-lite does not contain the compiled version of
field_options.proto.

Bug: 117607748
Test: m checkbuild
Change-Id: I6a618c4118972c0e5ffb07a361ac6612b9069c5d
2018-11-02 11:35:48 -07:00
Howard Ro
1260bb4739 Manifest for default implementation of stats hal
Bug: 118509430
Test: builds successfully. logging tests will be conducted once client
implementation is in.

Change-Id: If0085273b43316bce4c266829012a618193d6bd8
2018-10-31 15:08:51 -07:00
Colin Cross
05c9e5c24a Convert statsd and incidentd to Android.bp
See build/soong/README.md for more information.

Test: m checkbuild
Merged-In: I8c80878cec46c9299234c6f4c1e0e19efc0a221e
Change-Id: I8c80878cec46c9299234c6f4c1e0e19efc0a221e
2018-10-31 08:01:59 -07:00
Colin Cross
bc2dc31c4d Convert statsd and incidentd to Android.bp
See build/soong/README.md for more information.

Fixes: 110563449
Test: m checkbuild
Change-Id: I8c80878cec46c9299234c6f4c1e0e19efc0a221e
2018-10-30 13:30:23 -07:00
gopinath
17593b0395 Add statsdprotolite in Android.bp
Bug: b/118482428

Test: make statsdprotolite
Change-Id: I5c27f3017be043b6809699158a94b32155163535
Merged-In: I857957e816506162496192fe0ad1da4dbdfd4efd
2018-10-26 23:16:39 +00:00
Chenjie Yu
159e4f8f46 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
2018-09-10 18:26:33 -07:00
gopinath
a9864fdcd3 Add statsdprotolite in Android.bp
Bug: b/113069884

Test: Successfully able to build.
Change-Id: I857957e816506162496192fe0ad1da4dbdfd4efd
2018-08-23 12:36:19 -07:00
Howard Ro
de7130bbbb Update GenericAtom definition to decouple from metrics_constants proto
Bug: 110537998
Test: statsd, statsd_test
Change-Id: Ib82b90731f7c49a9e27ceff5d5fdb8e2cd6fb4e6
2018-07-27 11:01:55 -07:00
Howard Ro
cb767f659c Definition of GenericAtom
Test: no test is necessary as it only adds a field to atoms.proto
Change-Id: If4e7c9497d1a4a8ba0fda3e8fb1ef67c525d6e64
Bug: 110537998
2018-07-13 14:41:26 -07:00
Yao Chen
9c1debe330 Add annotation to atoms that represent a state change in atoms.proto
+ A state change atom can have one exclusive state field, and any
  number of primary key fields.

  When there is primary key in the atom, it means the state belongs to the primary key.
  For example,
  message UidProcessStateChanged {
    optional int32 uid = 1 [(stateFieldOption).option = PRIMARY];
    optional android.app.ProcessStateEnum state = 2 [(stateFieldOption).option = EXCLUSIVE];
  }

  When there is no primary key fields in the atom, the state is global.
  For example,
  message ScreenStateChanged {
     optional android.view.DisplayStateEnum state = 1 [(stateFieldOption).option = EXCLUSIVE];
  }

+ The annotation is consumed by stats_log_api_gen to generate a static map from the state
  atoms to its primary fields, and exclusive fields

+ stats_log.proto is splitted into 2 proto files, because statsd needs proto lite, and c++
  lite proto library cannot properly ignore the field options which requires full proto.

 This CL doesn't change any logic in the statsd yet. A separate CL will use the field option
 information to correctly track the state.

Test: added unit tests in stats_log_api_gen_test. and statsd_test pases.
Change-Id: I9e8a979fe81ba60efd4d854bb7087ce4b2b147ec
2018-02-21 16:46:56 -08:00
Joe Onorato
62c220b20b Fix how we build the statsd protos.
This lets us include frameworks protos, and use the constants
and messages from them.

Change-Id: I609d6e524f780e6a5beea543a68561bede47813e
Test: make
2017-12-13 18:26:45 -08:00
Stefan Lafon
ae2df01aae Rename "stats_events" as "atom".
Also make atom WakelockStateChanged use the "Type" enum instead of int32.

Test: Unittests are passing. Statsd is working.

Change-Id: I0909e2d97297f78996a81366d66aae62d5bf5ce1
2017-11-14 11:56:05 -08:00
Yao Chen
70b9863761 Fix build error.
Test: builds successfully.

Change-Id: I9ffefa28f37830319864e7b98d32340f59df0a62
2017-10-17 12:52:37 -07:00
Yao Chen
d54f9dd625 Revert "Revert "Start auto-generating the stats log API.""
Test: builds successfully

This reverts commit 9319453998.

Change-Id: I22bca4a32adf86040b9d72ad5b45999aba28f586
2017-10-17 10:42:44 -07:00
Joe Onorato
9319453998 Revert "Start auto-generating the stats log API."
This reverts commit b81d1a7b9a.

Change-Id: I189684d8913ffffca42d9514ac88ea5cc4a44f05
2017-10-16 22:41:28 +00:00
Joe Onorato
b81d1a7b9a Start auto-generating the stats log API.
Both native and java bindings.

TODOs:
- Finish WorkSources.
- Clean up the package names for the protos.
- Put the protos in a more suitable location.

Test: stats-log-api-gen-test
Change-Id: Idf4022225e2be05106dbcf7de8e97a3337fc63e2
2017-10-15 20:25:19 -07:00