Clean up atoms.proto
changes are: 1) for pushed atoms, use attribution node in place of uid when appropriate 2) name changes to be more consistent Bug: 73823969 Test: manual test Change-Id: Iacf7186dbd7a2282f7fe481f43dbbf92e1165b47
This commit is contained in:
@@ -127,25 +127,25 @@ AtomMatcher CreateSyncEndAtomMatcher() {
|
||||
}
|
||||
|
||||
AtomMatcher CreateActivityForegroundStateChangedAtomMatcher(
|
||||
const string& name, ActivityForegroundStateChanged::Activity activity) {
|
||||
const string& name, ActivityForegroundStateChanged::State state) {
|
||||
AtomMatcher atom_matcher;
|
||||
atom_matcher.set_id(StringToId(name));
|
||||
auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
|
||||
simple_atom_matcher->set_atom_id(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED);
|
||||
auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
|
||||
field_value_matcher->set_field(4); // Activity field.
|
||||
field_value_matcher->set_eq_int(activity);
|
||||
field_value_matcher->set_eq_int(state);
|
||||
return atom_matcher;
|
||||
}
|
||||
|
||||
AtomMatcher CreateMoveToBackgroundAtomMatcher() {
|
||||
return CreateActivityForegroundStateChangedAtomMatcher(
|
||||
"MoveToBackground", ActivityForegroundStateChanged::MOVE_TO_BACKGROUND);
|
||||
"MoveToBackground", ActivityForegroundStateChanged::BACKGROUND);
|
||||
}
|
||||
|
||||
AtomMatcher CreateMoveToForegroundAtomMatcher() {
|
||||
return CreateActivityForegroundStateChangedAtomMatcher(
|
||||
"MoveToForeground", ActivityForegroundStateChanged::MOVE_TO_FOREGROUND);
|
||||
"MoveToForeground", ActivityForegroundStateChanged::FOREGROUND);
|
||||
}
|
||||
|
||||
Predicate CreateScheduledJobPredicate() {
|
||||
@@ -315,25 +315,25 @@ std::unique_ptr<LogEvent> CreateReleaseWakelockEvent(
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateActivityForegroundStateChangedEvent(
|
||||
const int uid, const ActivityForegroundStateChanged::Activity activity, uint64_t timestampNs) {
|
||||
const int uid, const ActivityForegroundStateChanged::State state, uint64_t timestampNs) {
|
||||
auto event = std::make_unique<LogEvent>(
|
||||
android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs);
|
||||
event->write(uid);
|
||||
event->write("pkg_name");
|
||||
event->write("class_name");
|
||||
event->write(activity);
|
||||
event->write(state);
|
||||
event->init();
|
||||
return event;
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) {
|
||||
return CreateActivityForegroundStateChangedEvent(
|
||||
uid, ActivityForegroundStateChanged::MOVE_TO_BACKGROUND, timestampNs);
|
||||
uid, ActivityForegroundStateChanged::BACKGROUND, timestampNs);
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) {
|
||||
return CreateActivityForegroundStateChangedEvent(
|
||||
uid, ActivityForegroundStateChanged::MOVE_TO_FOREGROUND, timestampNs);
|
||||
uid, ActivityForegroundStateChanged::FOREGROUND, timestampNs);
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateSyncStateChangedEvent(
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
syntax = "proto2";
|
||||
|
||||
// TODO: Not the right package and class name
|
||||
package android.os.statsd;
|
||||
option java_package = "com.android.os";
|
||||
option java_outer_classname = "AtomsProto";
|
||||
@@ -49,7 +48,7 @@ message Atom {
|
||||
oneof pushed {
|
||||
// For StatsLog reasons, 1 is illegal and will not work. Must start at 2.
|
||||
BleScanStateChanged ble_scan_state_changed = 2;
|
||||
// TODO: 3 is blank, but need not be
|
||||
// 3 is available for use
|
||||
BleScanResultReceived ble_scan_result_received = 4;
|
||||
SensorStateChanged sensor_state_changed = 5;
|
||||
GpsScanStateChanged gps_scan_state_changed = 6;
|
||||
@@ -60,12 +59,12 @@ message Atom {
|
||||
LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 11;
|
||||
MobileRadioPowerStateChanged mobile_radio_power_state_changed = 12;
|
||||
WifiRadioPowerStateChanged wifi_radio_power_state_changed = 13;
|
||||
// TODO: 14-19 are blank, but need not be
|
||||
// 14 - 19 are available
|
||||
BatterySaverModeStateChanged battery_saver_mode_state_changed = 20;
|
||||
DeviceIdleModeStateChanged device_idle_mode_state_changed = 21;
|
||||
DeviceIdlingModeStateChanged device_idling_mode_state_changed = 22;
|
||||
AudioStateChanged audio_state_changed = 23;
|
||||
MediaCodecActivityChanged media_codec_activity_changed = 24;
|
||||
MediaCodecStateChanged media_codec_state_changed = 24;
|
||||
CameraStateChanged camera_state_changed = 25;
|
||||
FlashlightStateChanged flashlight_state_changed = 26;
|
||||
UidProcessStateChanged uid_process_state_changed = 27;
|
||||
@@ -74,8 +73,7 @@ message Atom {
|
||||
BatteryLevelChanged battery_level_changed = 30;
|
||||
ChargingStateChanged charging_state_changed = 31;
|
||||
PluggedStateChanged plugged_state_changed = 32;
|
||||
// TODO: 33 is blank, but is available for use.
|
||||
DeviceOnStatusChanged device_on_status_changed = 34;
|
||||
// 33 - 34 are available
|
||||
WakeupAlarmOccurred wakeup_alarm_occurred = 35;
|
||||
KernelWakeupReported kernel_wakeup_reported = 36;
|
||||
WifiLockStateChanged wifi_lock_state_changed = 37;
|
||||
@@ -86,12 +84,12 @@ message Atom {
|
||||
ActivityForegroundStateChanged activity_foreground_state_changed = 42;
|
||||
IsolatedUidChanged isolated_uid_changed = 43;
|
||||
PacketWakeupOccurred packet_wakeup_occurred = 44;
|
||||
DropboxErrorChanged dropbox_error_changed = 45;
|
||||
// 45 is available
|
||||
AnomalyDetected anomaly_detected = 46;
|
||||
AppBreadcrumbReported app_breadcrumb_reported = 47;
|
||||
AppStartChanged app_start_changed = 48;
|
||||
AppStartCancelChanged app_start_cancel_changed = 49;
|
||||
AppStartFullyDrawnChanged app_start_fully_drawn_changed = 50;
|
||||
AppStartOccurred app_start_occurred = 48;
|
||||
AppStartCanceled app_start_canceled = 49;
|
||||
AppStartFullyDrawn app_start_fully_drawn = 50;
|
||||
LmkKillOccurred lmk_kill_occurred = 51;
|
||||
PictureInPictureStateChanged picture_in_picture_state_changed = 52;
|
||||
WifiMulticastLockStateChanged wifi_multicast_lock_state_changed = 53;
|
||||
@@ -106,7 +104,7 @@ message Atom {
|
||||
KeyguardStateChanged keyguard_state_changed = 62;
|
||||
KeyguardBouncerStateChanged keyguard_bouncer_state_changed = 63;
|
||||
KeyguardBouncerPasswordEntered keyguard_bouncer_password_entered = 64;
|
||||
AppDied app_died=65;
|
||||
AppDied app_died = 65;
|
||||
ResourceConfigurationChanged resource_configuration_changed = 66;
|
||||
BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67;
|
||||
BluetoothConnectionStateChanged bluetooth_connection_state_changed = 68;
|
||||
@@ -119,6 +117,12 @@ message Atom {
|
||||
MobileConnectionStateChanged mobile_connection_state_changed = 75;
|
||||
MobileRadioTechnologyChanged mobile_radio_technology_changed = 76;
|
||||
UsbDeviceAttached usb_device_attached = 77;
|
||||
AppCrashOccurred app_crash_occurred = 78;
|
||||
ANROccurred anr_occurred = 79;
|
||||
WTFOccurred wtf_occurred = 80;
|
||||
LowMemReported low_mem_reported = 81;
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Pulled events will start at field 10000.
|
||||
@@ -134,7 +138,7 @@ message Atom {
|
||||
CpuTimePerFreq cpu_time_per_freq = 10008;
|
||||
CpuTimePerUid cpu_time_per_uid = 10009;
|
||||
CpuTimePerUidFreq cpu_time_per_uid_freq = 10010;
|
||||
WifiActivityEnergyInfo wifi_activity_energy_info = 10011;
|
||||
WifiActivityInfo wifi_activity_info = 10011;
|
||||
ModemActivityInfo modem_activity_info = 10012;
|
||||
BluetoothActivityInfo bluetooth_activity_info = 10007;
|
||||
ProcessMemoryState process_memory_state = 10013;
|
||||
@@ -224,21 +228,19 @@ message UidProcessStateChanged {
|
||||
* frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
|
||||
*/
|
||||
message ProcessLifeCycleStateChanged {
|
||||
// TODO: should be a string tagged w/ uid annotation
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
// The process name (usually same as the app name).
|
||||
optional string name = 2;
|
||||
optional string process_name = 2;
|
||||
|
||||
// What lifecycle state the process changed to.
|
||||
// This enum is specific to atoms.proto.
|
||||
enum Event {
|
||||
PROCESS_FINISHED = 0;
|
||||
PROCESS_STARTED = 1;
|
||||
PROCESS_CRASHED = 2;
|
||||
PROCESS_ANRED = 3;
|
||||
enum State {
|
||||
FINISHED = 0;
|
||||
STARTED = 1;
|
||||
CRASHED = 2;
|
||||
}
|
||||
optional Event event = 3;
|
||||
optional State state = 3;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -247,7 +249,6 @@ message ProcessLifeCycleStateChanged {
|
||||
* Logged from:
|
||||
* packages/apps/Bluetooth/src/com/android/bluetooth/gatt/AppScanStats.java
|
||||
*/
|
||||
// TODO: Consider changing to tracking per-scanner-id (log from AppScanStats).
|
||||
message BleScanStateChanged {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
@@ -278,7 +279,7 @@ message BleScanResultReceived {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
// Number of ble scan results returned.
|
||||
optional int32 num_of_results = 2;
|
||||
optional int32 num_results = 2;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -290,7 +291,6 @@ message BleScanResultReceived {
|
||||
message SensorStateChanged {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
// TODO: Is there a way to get the actual name of the sensor?
|
||||
// The id (int) of the sensor.
|
||||
optional int32 sensor_id = 2;
|
||||
|
||||
@@ -329,7 +329,7 @@ message SyncStateChanged {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
// Name of the sync (as named in the app). Can be chosen at run-time.
|
||||
optional string name = 2;
|
||||
optional string sync_name = 2;
|
||||
|
||||
enum State {
|
||||
OFF = 0;
|
||||
@@ -348,7 +348,7 @@ message ScheduledJobStateChanged {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
// Name of the job (as named in the app)
|
||||
optional string name = 2;
|
||||
optional string job_name = 2;
|
||||
|
||||
enum State {
|
||||
FINISHED = 0;
|
||||
@@ -387,7 +387,7 @@ message AudioStateChanged {
|
||||
* Logged from:
|
||||
* frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java
|
||||
*/
|
||||
message MediaCodecActivityChanged {
|
||||
message MediaCodecStateChanged {
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
enum State {
|
||||
@@ -561,22 +561,6 @@ message PluggedStateChanged {
|
||||
optional android.os.BatteryPluggedStateEnum state = 1;
|
||||
}
|
||||
|
||||
// TODO: Define this more precisely.
|
||||
// TODO: Log the ON state somewhere. It isn't currently logged anywhere.
|
||||
/**
|
||||
* Logs when the device turns off or on.
|
||||
*
|
||||
* Logged from:
|
||||
* frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
|
||||
*/
|
||||
message DeviceOnStatusChanged {
|
||||
enum State {
|
||||
OFF = 0;
|
||||
ON = 1;
|
||||
}
|
||||
optional State state = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs when an app's wakeup alarm fires.
|
||||
*
|
||||
@@ -598,8 +582,7 @@ message WakeupAlarmOccurred {
|
||||
* frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
|
||||
*/
|
||||
message MobileRadioPowerStateChanged {
|
||||
// TODO: Add attribution instead of uid?
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
// Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
|
||||
optional android.telephony.DataConnectionPowerStateEnum state = 2;
|
||||
@@ -613,8 +596,7 @@ message MobileRadioPowerStateChanged {
|
||||
* frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
|
||||
*/
|
||||
message WifiRadioPowerStateChanged {
|
||||
// TODO: Add attribution instead of uid?
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
repeated AttributionNode attribution_node = 1;
|
||||
|
||||
// Power state, from frameworks/base/core/proto/android/telephony/enums.proto.
|
||||
optional android.telephony.DataConnectionPowerStateEnum state = 2;
|
||||
@@ -1154,7 +1136,6 @@ message ChargeCyclesReported {
|
||||
message DaveyOccurred {
|
||||
// The UID that logged this atom.
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
;
|
||||
|
||||
// Amount of time it took to render the frame. Should be >=700ms.
|
||||
optional int64 jank_duration_millis = 2;
|
||||
@@ -1221,42 +1202,70 @@ message ActivityForegroundStateChanged {
|
||||
optional string pkg_name = 2;
|
||||
optional string class_name = 3;
|
||||
|
||||
enum Activity {
|
||||
MOVE_TO_BACKGROUND = 0;
|
||||
MOVE_TO_FOREGROUND = 1;
|
||||
enum State {
|
||||
BACKGROUND = 0;
|
||||
FOREGROUND = 1;
|
||||
}
|
||||
optional Activity activity = 4;
|
||||
optional State state = 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs when an error is written to dropbox.
|
||||
* Logs when an app crashes.
|
||||
* Logged from:
|
||||
* frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
|
||||
*/
|
||||
message DropboxErrorChanged {
|
||||
// The uid if available. -1 means not available.
|
||||
message AppCrashOccurred {
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
// Tag used when recording this error to dropbox. Contains data_ or system_ prefix.
|
||||
optional string tag = 2;
|
||||
optional string event_type = 2;
|
||||
|
||||
// The name of the process.
|
||||
// system_server if it is not by an app
|
||||
optional string process_name = 3;
|
||||
|
||||
// The pid if available. -1 means not available.
|
||||
optional sint32 pid = 4;
|
||||
}
|
||||
|
||||
// 1 indicates is instant app. -1 indicates Not applicable.
|
||||
optional sint32 is_instant_app = 5;
|
||||
/**
|
||||
* Logs when a WTF (What a Terrible Failure) happened.
|
||||
* Logged from:
|
||||
* frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
|
||||
*/
|
||||
message WTFOccurred {
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
// The activity name if available.
|
||||
optional string activity_name = 6;
|
||||
optional string tag = 2;
|
||||
|
||||
// The package name if available.
|
||||
optional string package_name = 7;
|
||||
// The name of the process.
|
||||
// system_server if it is not by an app
|
||||
optional string process_name = 3;
|
||||
|
||||
// 1 indicates in foreground. -1 indicates not available.
|
||||
optional sint32 is_foreground = 8;
|
||||
// The pid if available. -1 means not available.
|
||||
optional sint32 pid = 4;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs when system server reports low memory.
|
||||
* Logged from:
|
||||
* frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
|
||||
*/
|
||||
message LowMemReported {
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs when an app ANR (App Not Responding) occurs.
|
||||
* Logged from:
|
||||
* frameworks/base/services/core/java/com/android/server/am/AppErrors.java
|
||||
*/
|
||||
message ANROccurred {
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
optional string process_name = 2;
|
||||
|
||||
optional string short_component_name = 3;
|
||||
|
||||
optional string reason = 4;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1299,7 +1308,7 @@ message AnomalyDetected {
|
||||
optional int64 alert_id = 3;
|
||||
}
|
||||
|
||||
message AppStartChanged {
|
||||
message AppStartOccurred {
|
||||
// The uid if available. -1 means not available.
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
@@ -1307,7 +1316,7 @@ message AppStartChanged {
|
||||
optional string pkg_name = 2;
|
||||
|
||||
enum TransitionType {
|
||||
APP_START_TRANSITION_TYPE_UNKNOWN = 0;
|
||||
UNKNOWN = 0;
|
||||
WARM = 1;
|
||||
HOT = 2;
|
||||
COLD = 3;
|
||||
@@ -1346,7 +1355,7 @@ message AppStartChanged {
|
||||
optional int32 package_optimization_compilation_reason = 15;
|
||||
}
|
||||
|
||||
message AppStartCancelChanged {
|
||||
message AppStartCanceled {
|
||||
// The uid if available. -1 means not available.
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
@@ -1354,7 +1363,7 @@ message AppStartCancelChanged {
|
||||
optional string pkg_name = 2;
|
||||
|
||||
enum TransitionType {
|
||||
APP_START_TRANSITION_TYPE_UNKNOWN = 0;
|
||||
UNKNOWN = 0;
|
||||
WARM = 1;
|
||||
HOT = 2;
|
||||
COLD = 3;
|
||||
@@ -1366,7 +1375,7 @@ message AppStartCancelChanged {
|
||||
optional string activity_name = 4;
|
||||
}
|
||||
|
||||
message AppStartFullyDrawnChanged {
|
||||
message AppStartFullyDrawn {
|
||||
// The uid if available. -1 means not available.
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
@@ -1374,7 +1383,7 @@ message AppStartFullyDrawnChanged {
|
||||
optional string pkg_name = 2;
|
||||
|
||||
enum TransitionType {
|
||||
APP_START_TRANSITION_TYPE_UNKNOWN = 0;
|
||||
UNKNOWN = 0;
|
||||
WITH_BUNDLE = 1;
|
||||
WITHOUT_BUNDLE = 2;
|
||||
}
|
||||
@@ -1459,8 +1468,8 @@ message ForegroundServiceStateChanged {
|
||||
* frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java
|
||||
*/
|
||||
message IsolatedUidChanged {
|
||||
// NOTE: DO NOT annotate uid field in this atom. This atom is specially handled in statsd.
|
||||
// The host UID. Generally, we should attribute metrics from the isolated uid to the host uid.
|
||||
// NOTE: DO NOT annotate uid field in this atom. This atom is specially handled in statsd.
|
||||
optional int32 parent_uid = 1;
|
||||
|
||||
optional int32 isolated_uid = 2;
|
||||
@@ -1621,9 +1630,8 @@ message WifiBytesTransfer {
|
||||
message WifiBytesTransferByFgBg {
|
||||
optional int32 uid = 1 [(is_uid) = true];
|
||||
|
||||
// 1 denotes foreground and 0 denotes background. This is called Set in
|
||||
// NetworkStats.
|
||||
optional int32 is_foreground = 2;
|
||||
// 1 denotes foreground and 0 denotes background. This is called Set in NetworkStats.
|
||||
optional bool is_foreground = 2;
|
||||
|
||||
optional int64 rx_bytes = 3;
|
||||
|
||||
@@ -1663,7 +1671,7 @@ message MobileBytesTransferByFgBg {
|
||||
|
||||
// 1 denotes foreground and 0 denotes background. This is called Set in
|
||||
// NetworkStats.
|
||||
optional int32 is_foreground = 2;
|
||||
optional bool is_foreground = 2;
|
||||
|
||||
optional int64 rx_bytes = 3;
|
||||
|
||||
@@ -1760,7 +1768,7 @@ message CpuTimePerUidFreq {
|
||||
/**
|
||||
* Pulls Wifi Controller Activity Energy Info
|
||||
*/
|
||||
message WifiActivityEnergyInfo {
|
||||
message WifiActivityInfo {
|
||||
// timestamp(wall clock) of record creation
|
||||
optional uint64 timestamp_millis = 1;
|
||||
// stack reported state
|
||||
|
||||
@@ -120,11 +120,11 @@ const std::map<int, PullAtomInfo> StatsPullerManagerImpl::kAllPullAtomInfo = {
|
||||
1 * NS_PER_SEC,
|
||||
new StatsCompanionServicePuller(android::util::CPU_CLUSTER_TIME)}},
|
||||
// wifi_activity_energy_info
|
||||
{android::util::WIFI_ACTIVITY_ENERGY_INFO,
|
||||
{android::util::WIFI_ACTIVITY_INFO,
|
||||
{{},
|
||||
{},
|
||||
1 * NS_PER_SEC,
|
||||
new StatsCompanionServicePuller(android::util::WIFI_ACTIVITY_ENERGY_INFO)}},
|
||||
new StatsCompanionServicePuller(android::util::WIFI_ACTIVITY_INFO)}},
|
||||
// modem_activity_info
|
||||
{android::util::MODEM_ACTIVITY_INFO,
|
||||
{{},
|
||||
|
||||
@@ -356,7 +356,7 @@ TEST(AtomMatcherTest, TestWriteAtomToProto) {
|
||||
EXPECT_EQ("location1", atom.attribution_node(0).tag());
|
||||
EXPECT_EQ(2222, atom.attribution_node(1).uid());
|
||||
EXPECT_EQ("location2", atom.attribution_node(1).tag());
|
||||
EXPECT_EQ(999, atom.num_of_results());
|
||||
EXPECT_EQ(999, atom.num_results());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ StatsdConfig CreateStatsdConfigForPushedEvent(const GaugeMetric::SamplingType sa
|
||||
*config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher();
|
||||
*config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher();
|
||||
|
||||
auto atomMatcher = CreateSimpleAtomMatcher("", android::util::APP_START_CHANGED);
|
||||
auto atomMatcher = CreateSimpleAtomMatcher("", android::util::APP_START_OCCURRED);
|
||||
*config.add_atom_matcher() = atomMatcher;
|
||||
|
||||
auto isInBackgroundPredicate = CreateIsInBackgroundPredicate();
|
||||
@@ -49,18 +49,18 @@ StatsdConfig CreateStatsdConfigForPushedEvent(const GaugeMetric::SamplingType sa
|
||||
gaugeMetric->mutable_gauge_fields_filter()->set_include_all(false);
|
||||
gaugeMetric->set_sampling_type(sampling_type);
|
||||
auto fieldMatcher = gaugeMetric->mutable_gauge_fields_filter()->mutable_fields();
|
||||
fieldMatcher->set_field(android::util::APP_START_CHANGED);
|
||||
fieldMatcher->set_field(android::util::APP_START_OCCURRED);
|
||||
fieldMatcher->add_child()->set_field(3); // type (enum)
|
||||
fieldMatcher->add_child()->set_field(4); // activity_name(str)
|
||||
fieldMatcher->add_child()->set_field(7); // activity_start_msec(int64)
|
||||
*gaugeMetric->mutable_dimensions_in_what() =
|
||||
CreateDimensions(android::util::APP_START_CHANGED, {1 /* uid field */ });
|
||||
CreateDimensions(android::util::APP_START_OCCURRED, {1 /* uid field */ });
|
||||
gaugeMetric->set_bucket(FIVE_MINUTES);
|
||||
|
||||
auto links = gaugeMetric->add_links();
|
||||
links->set_condition(isInBackgroundPredicate.id());
|
||||
auto dimensionWhat = links->mutable_fields_in_what();
|
||||
dimensionWhat->set_field(android::util::APP_START_CHANGED);
|
||||
dimensionWhat->set_field(android::util::APP_START_OCCURRED);
|
||||
dimensionWhat->add_child()->set_field(1); // uid field.
|
||||
auto dimensionCondition = links->mutable_fields_in_condition();
|
||||
dimensionCondition->set_field(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED);
|
||||
@@ -68,12 +68,12 @@ StatsdConfig CreateStatsdConfigForPushedEvent(const GaugeMetric::SamplingType sa
|
||||
return config;
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateAppStartChangedEvent(
|
||||
const int uid, const string& pkg_name, AppStartChanged::TransitionType type,
|
||||
std::unique_ptr<LogEvent> CreateAppStartOccurredEvent(
|
||||
const int uid, const string& pkg_name, AppStartOccurred::TransitionType type,
|
||||
const string& activity_name, const string& calling_pkg_name, const bool is_instant_app,
|
||||
int64_t activity_start_msec, uint64_t timestampNs) {
|
||||
auto logEvent = std::make_unique<LogEvent>(
|
||||
android::util::APP_START_CHANGED, timestampNs);
|
||||
android::util::APP_START_OCCURRED, timestampNs);
|
||||
logEvent->write(uid);
|
||||
logEvent->write(pkg_name);
|
||||
logEvent->write(type);
|
||||
@@ -112,32 +112,32 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
|
||||
appUid1, bucketStartTimeNs + 2 * bucketSizeNs + 100));
|
||||
|
||||
|
||||
events.push_back(CreateAppStartChangedEvent(
|
||||
appUid1, "app1", AppStartChanged::WARM, "activity_name1", "calling_pkg_name1",
|
||||
events.push_back(CreateAppStartOccurredEvent(
|
||||
appUid1, "app1", AppStartOccurred::WARM, "activity_name1", "calling_pkg_name1",
|
||||
true /*is_instant_app*/, 101 /*activity_start_msec*/, bucketStartTimeNs + 10));
|
||||
events.push_back(CreateAppStartChangedEvent(
|
||||
appUid1, "app1", AppStartChanged::HOT, "activity_name2", "calling_pkg_name2",
|
||||
events.push_back(CreateAppStartOccurredEvent(
|
||||
appUid1, "app1", AppStartOccurred::HOT, "activity_name2", "calling_pkg_name2",
|
||||
true /*is_instant_app*/, 102 /*activity_start_msec*/, bucketStartTimeNs + 20));
|
||||
events.push_back(CreateAppStartChangedEvent(
|
||||
appUid1, "app1", AppStartChanged::COLD, "activity_name3", "calling_pkg_name3",
|
||||
events.push_back(CreateAppStartOccurredEvent(
|
||||
appUid1, "app1", AppStartOccurred::COLD, "activity_name3", "calling_pkg_name3",
|
||||
true /*is_instant_app*/, 103 /*activity_start_msec*/, bucketStartTimeNs + 30));
|
||||
events.push_back(CreateAppStartChangedEvent(
|
||||
appUid1, "app1", AppStartChanged::WARM, "activity_name4", "calling_pkg_name4",
|
||||
events.push_back(CreateAppStartOccurredEvent(
|
||||
appUid1, "app1", AppStartOccurred::WARM, "activity_name4", "calling_pkg_name4",
|
||||
true /*is_instant_app*/, 104 /*activity_start_msec*/,
|
||||
bucketStartTimeNs + bucketSizeNs + 30));
|
||||
events.push_back(CreateAppStartChangedEvent(
|
||||
appUid1, "app1", AppStartChanged::COLD, "activity_name5", "calling_pkg_name5",
|
||||
events.push_back(CreateAppStartOccurredEvent(
|
||||
appUid1, "app1", AppStartOccurred::COLD, "activity_name5", "calling_pkg_name5",
|
||||
true /*is_instant_app*/, 105 /*activity_start_msec*/,
|
||||
bucketStartTimeNs + 2 * bucketSizeNs));
|
||||
events.push_back(CreateAppStartChangedEvent(
|
||||
appUid1, "app1", AppStartChanged::HOT, "activity_name6", "calling_pkg_name6",
|
||||
events.push_back(CreateAppStartOccurredEvent(
|
||||
appUid1, "app1", AppStartOccurred::HOT, "activity_name6", "calling_pkg_name6",
|
||||
false /*is_instant_app*/, 106 /*activity_start_msec*/,
|
||||
bucketStartTimeNs + 2 * bucketSizeNs + 10));
|
||||
|
||||
events.push_back(CreateMoveToBackgroundEvent(
|
||||
appUid2, bucketStartTimeNs + bucketSizeNs + 10));
|
||||
events.push_back(CreateAppStartChangedEvent(
|
||||
appUid2, "app2", AppStartChanged::COLD, "activity_name7", "calling_pkg_name7",
|
||||
events.push_back(CreateAppStartOccurredEvent(
|
||||
appUid2, "app2", AppStartOccurred::COLD, "activity_name7", "calling_pkg_name7",
|
||||
true /*is_instant_app*/, 201 /*activity_start_msec*/,
|
||||
bucketStartTimeNs + 2 * bucketSizeNs + 10));
|
||||
|
||||
@@ -159,7 +159,7 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
|
||||
EXPECT_EQ(2, gaugeMetrics.data_size());
|
||||
|
||||
auto data = gaugeMetrics.data(0);
|
||||
EXPECT_EQ(android::util::APP_START_CHANGED, data.dimensions_in_what().field());
|
||||
EXPECT_EQ(android::util::APP_START_OCCURRED, data.dimensions_in_what().field());
|
||||
EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
|
||||
EXPECT_EQ(1 /* uid field */,
|
||||
data.dimensions_in_what().value_tuple().dimensions_value(0).field());
|
||||
@@ -171,29 +171,29 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
|
||||
EXPECT_EQ(2, data.bucket_info(0).wall_clock_timestamp_nanos_size());
|
||||
EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_nanos());
|
||||
EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_nanos());
|
||||
EXPECT_EQ(AppStartChanged::HOT, data.bucket_info(0).atom(0).app_start_changed().type());
|
||||
EXPECT_EQ(AppStartOccurred::HOT, data.bucket_info(0).atom(0).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name2",
|
||||
data.bucket_info(0).atom(0).app_start_changed().activity_name());
|
||||
data.bucket_info(0).atom(0).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(102L,
|
||||
data.bucket_info(0).atom(0).app_start_changed().activity_start_millis());
|
||||
EXPECT_EQ(AppStartChanged::COLD,
|
||||
data.bucket_info(0).atom(1).app_start_changed().type());
|
||||
data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
|
||||
EXPECT_EQ(AppStartOccurred::COLD,
|
||||
data.bucket_info(0).atom(1).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name3",
|
||||
data.bucket_info(0).atom(1).app_start_changed().activity_name());
|
||||
data.bucket_info(0).atom(1).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(103L,
|
||||
data.bucket_info(0).atom(1).app_start_changed().activity_start_millis());
|
||||
data.bucket_info(0).atom(1).app_start_occurred().activity_start_millis());
|
||||
|
||||
EXPECT_EQ(1, data.bucket_info(1).atom_size());
|
||||
EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size());
|
||||
EXPECT_EQ(1, data.bucket_info(1).wall_clock_timestamp_nanos_size());
|
||||
EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(1).start_bucket_nanos());
|
||||
EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(1).end_bucket_nanos());
|
||||
EXPECT_EQ(AppStartChanged::WARM,
|
||||
data.bucket_info(1).atom(0).app_start_changed().type());
|
||||
EXPECT_EQ(AppStartOccurred::WARM,
|
||||
data.bucket_info(1).atom(0).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name4",
|
||||
data.bucket_info(1).atom(0).app_start_changed().activity_name());
|
||||
data.bucket_info(1).atom(0).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(104L,
|
||||
data.bucket_info(1).atom(0).app_start_changed().activity_start_millis());
|
||||
data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis());
|
||||
|
||||
EXPECT_EQ(2, data.bucket_info(2).atom_size());
|
||||
EXPECT_EQ(2, data.bucket_info(2).elapsed_timestamp_nanos_size());
|
||||
@@ -202,41 +202,41 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
|
||||
data.bucket_info(2).start_bucket_nanos());
|
||||
EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
|
||||
data.bucket_info(2).end_bucket_nanos());
|
||||
EXPECT_EQ(AppStartChanged::COLD,
|
||||
data.bucket_info(2).atom(0).app_start_changed().type());
|
||||
EXPECT_EQ(AppStartOccurred::COLD,
|
||||
data.bucket_info(2).atom(0).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name5",
|
||||
data.bucket_info(2).atom(0).app_start_changed().activity_name());
|
||||
data.bucket_info(2).atom(0).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(105L,
|
||||
data.bucket_info(2).atom(0).app_start_changed().activity_start_millis());
|
||||
EXPECT_EQ(AppStartChanged::HOT,
|
||||
data.bucket_info(2).atom(1).app_start_changed().type());
|
||||
data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis());
|
||||
EXPECT_EQ(AppStartOccurred::HOT,
|
||||
data.bucket_info(2).atom(1).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name6",
|
||||
data.bucket_info(2).atom(1).app_start_changed().activity_name());
|
||||
data.bucket_info(2).atom(1).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(106L,
|
||||
data.bucket_info(2).atom(1).app_start_changed().activity_start_millis());
|
||||
data.bucket_info(2).atom(1).app_start_occurred().activity_start_millis());
|
||||
} else {
|
||||
EXPECT_EQ(1, data.bucket_info(0).atom_size());
|
||||
EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
|
||||
EXPECT_EQ(1, data.bucket_info(0).wall_clock_timestamp_nanos_size());
|
||||
EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_nanos());
|
||||
EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_nanos());
|
||||
EXPECT_EQ(AppStartChanged::HOT, data.bucket_info(0).atom(0).app_start_changed().type());
|
||||
EXPECT_EQ(AppStartOccurred::HOT, data.bucket_info(0).atom(0).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name2",
|
||||
data.bucket_info(0).atom(0).app_start_changed().activity_name());
|
||||
data.bucket_info(0).atom(0).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(102L,
|
||||
data.bucket_info(0).atom(0).app_start_changed().activity_start_millis());
|
||||
data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
|
||||
|
||||
EXPECT_EQ(1, data.bucket_info(1).atom_size());
|
||||
EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size());
|
||||
EXPECT_EQ(1, data.bucket_info(1).wall_clock_timestamp_nanos_size());
|
||||
EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(1).start_bucket_nanos());
|
||||
EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(1).end_bucket_nanos());
|
||||
EXPECT_EQ(AppStartChanged::WARM,
|
||||
data.bucket_info(1).atom(0).app_start_changed().type());
|
||||
EXPECT_EQ(AppStartOccurred::WARM,
|
||||
data.bucket_info(1).atom(0).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name4",
|
||||
data.bucket_info(1).atom(0).app_start_changed().activity_name());
|
||||
data.bucket_info(1).atom(0).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(104L,
|
||||
data.bucket_info(1).atom(0).app_start_changed().activity_start_millis());
|
||||
data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis());
|
||||
|
||||
EXPECT_EQ(1, data.bucket_info(2).atom_size());
|
||||
EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size());
|
||||
@@ -245,17 +245,17 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
|
||||
data.bucket_info(2).start_bucket_nanos());
|
||||
EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs,
|
||||
data.bucket_info(2).end_bucket_nanos());
|
||||
EXPECT_EQ(AppStartChanged::COLD,
|
||||
data.bucket_info(2).atom(0).app_start_changed().type());
|
||||
EXPECT_EQ(AppStartOccurred::COLD,
|
||||
data.bucket_info(2).atom(0).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name5",
|
||||
data.bucket_info(2).atom(0).app_start_changed().activity_name());
|
||||
data.bucket_info(2).atom(0).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(105L,
|
||||
data.bucket_info(2).atom(0).app_start_changed().activity_start_millis());
|
||||
data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis());
|
||||
}
|
||||
|
||||
data = gaugeMetrics.data(1);
|
||||
|
||||
EXPECT_EQ(data.dimensions_in_what().field(), android::util::APP_START_CHANGED);
|
||||
EXPECT_EQ(data.dimensions_in_what().field(), android::util::APP_START_OCCURRED);
|
||||
EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1);
|
||||
EXPECT_EQ(1 /* uid field */,
|
||||
data.dimensions_in_what().value_tuple().dimensions_value(0).field());
|
||||
@@ -266,10 +266,10 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) {
|
||||
EXPECT_EQ(1, data.bucket_info(0).wall_clock_timestamp_nanos_size());
|
||||
EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_nanos());
|
||||
EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_nanos());
|
||||
EXPECT_EQ(AppStartChanged::COLD, data.bucket_info(0).atom(0).app_start_changed().type());
|
||||
EXPECT_EQ(AppStartOccurred::COLD, data.bucket_info(0).atom(0).app_start_occurred().type());
|
||||
EXPECT_EQ("activity_name7",
|
||||
data.bucket_info(0).atom(0).app_start_changed().activity_name());
|
||||
EXPECT_EQ(201L, data.bucket_info(0).atom(0).app_start_changed().activity_start_millis());
|
||||
data.bucket_info(0).atom(0).app_start_occurred().activity_name());
|
||||
EXPECT_EQ(201L, data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ TEST(StatsdStatsTest, TestAtomLog) {
|
||||
|
||||
stats.noteAtomLogged(android::util::SENSOR_STATE_CHANGED, now + 1);
|
||||
stats.noteAtomLogged(android::util::SENSOR_STATE_CHANGED, now + 2);
|
||||
stats.noteAtomLogged(android::util::DROPBOX_ERROR_CHANGED, now + 3);
|
||||
stats.noteAtomLogged(android::util::APP_CRASH_OCCURRED, now + 3);
|
||||
// pulled event, should ignore
|
||||
stats.noteAtomLogged(android::util::WIFI_BYTES_TRANSFER, now + 4);
|
||||
|
||||
@@ -228,7 +228,7 @@ TEST(StatsdStatsTest, TestAtomLog) {
|
||||
if (atomStats.tag() == android::util::SENSOR_STATE_CHANGED && atomStats.count() == 3) {
|
||||
sensorAtomGood = true;
|
||||
}
|
||||
if (atomStats.tag() == android::util::DROPBOX_ERROR_CHANGED && atomStats.count() == 1) {
|
||||
if (atomStats.tag() == android::util::APP_CRASH_OCCURRED && atomStats.count() == 1) {
|
||||
dropboxAtomGood = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,42 +152,42 @@ AtomMatcher CreateSyncEndAtomMatcher() {
|
||||
}
|
||||
|
||||
AtomMatcher CreateActivityForegroundStateChangedAtomMatcher(
|
||||
const string& name, ActivityForegroundStateChanged::Activity activity) {
|
||||
const string& name, ActivityForegroundStateChanged::State state) {
|
||||
AtomMatcher atom_matcher;
|
||||
atom_matcher.set_id(StringToId(name));
|
||||
auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
|
||||
simple_atom_matcher->set_atom_id(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED);
|
||||
auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
|
||||
field_value_matcher->set_field(4); // Activity field.
|
||||
field_value_matcher->set_eq_int(activity);
|
||||
field_value_matcher->set_eq_int(state);
|
||||
return atom_matcher;
|
||||
}
|
||||
|
||||
AtomMatcher CreateMoveToBackgroundAtomMatcher() {
|
||||
return CreateActivityForegroundStateChangedAtomMatcher(
|
||||
"MoveToBackground", ActivityForegroundStateChanged::MOVE_TO_BACKGROUND);
|
||||
"Background", ActivityForegroundStateChanged::BACKGROUND);
|
||||
}
|
||||
|
||||
AtomMatcher CreateMoveToForegroundAtomMatcher() {
|
||||
return CreateActivityForegroundStateChangedAtomMatcher(
|
||||
"MoveToForeground", ActivityForegroundStateChanged::MOVE_TO_FOREGROUND);
|
||||
"Foreground", ActivityForegroundStateChanged::FOREGROUND);
|
||||
}
|
||||
|
||||
AtomMatcher CreateProcessLifeCycleStateChangedAtomMatcher(
|
||||
const string& name, ProcessLifeCycleStateChanged::Event event) {
|
||||
const string& name, ProcessLifeCycleStateChanged::State state) {
|
||||
AtomMatcher atom_matcher;
|
||||
atom_matcher.set_id(StringToId(name));
|
||||
auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher();
|
||||
simple_atom_matcher->set_atom_id(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED);
|
||||
auto field_value_matcher = simple_atom_matcher->add_field_value_matcher();
|
||||
field_value_matcher->set_field(3); // Process state field.
|
||||
field_value_matcher->set_eq_int(event);
|
||||
field_value_matcher->set_eq_int(state);
|
||||
return atom_matcher;
|
||||
}
|
||||
|
||||
AtomMatcher CreateProcessCrashAtomMatcher() {
|
||||
return CreateProcessLifeCycleStateChangedAtomMatcher(
|
||||
"ProcessCrashed", ProcessLifeCycleStateChanged::PROCESS_CRASHED);
|
||||
"Crashed", ProcessLifeCycleStateChanged::CRASHED);
|
||||
}
|
||||
|
||||
Predicate CreateScheduledJobPredicate() {
|
||||
@@ -241,8 +241,8 @@ Predicate CreateIsSyncingPredicate() {
|
||||
Predicate CreateIsInBackgroundPredicate() {
|
||||
Predicate predicate;
|
||||
predicate.set_id(StringToId("IsInBackground"));
|
||||
predicate.mutable_simple_predicate()->set_start(StringToId("MoveToBackground"));
|
||||
predicate.mutable_simple_predicate()->set_stop(StringToId("MoveToForeground"));
|
||||
predicate.mutable_simple_predicate()->set_start(StringToId("Background"));
|
||||
predicate.mutable_simple_predicate()->set_stop(StringToId("Foreground"));
|
||||
return predicate;
|
||||
}
|
||||
|
||||
@@ -373,25 +373,25 @@ std::unique_ptr<LogEvent> CreateReleaseWakelockEvent(
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateActivityForegroundStateChangedEvent(
|
||||
const int uid, const ActivityForegroundStateChanged::Activity activity, uint64_t timestampNs) {
|
||||
const int uid, const ActivityForegroundStateChanged::State state, uint64_t timestampNs) {
|
||||
auto event = std::make_unique<LogEvent>(
|
||||
android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs);
|
||||
event->write(uid);
|
||||
event->write("pkg_name");
|
||||
event->write("class_name");
|
||||
event->write(activity);
|
||||
event->write(state);
|
||||
event->init();
|
||||
return event;
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) {
|
||||
return CreateActivityForegroundStateChangedEvent(
|
||||
uid, ActivityForegroundStateChanged::MOVE_TO_BACKGROUND, timestampNs);
|
||||
uid, ActivityForegroundStateChanged::BACKGROUND, timestampNs);
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) {
|
||||
return CreateActivityForegroundStateChangedEvent(
|
||||
uid, ActivityForegroundStateChanged::MOVE_TO_FOREGROUND, timestampNs);
|
||||
uid, ActivityForegroundStateChanged::FOREGROUND, timestampNs);
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateSyncStateChangedEvent(
|
||||
@@ -418,19 +418,19 @@ std::unique_ptr<LogEvent> CreateSyncEndEvent(
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateProcessLifeCycleStateChangedEvent(
|
||||
const int uid, const ProcessLifeCycleStateChanged::Event event, uint64_t timestampNs) {
|
||||
const int uid, const ProcessLifeCycleStateChanged::State state, uint64_t timestampNs) {
|
||||
auto logEvent = std::make_unique<LogEvent>(
|
||||
android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, timestampNs);
|
||||
logEvent->write(uid);
|
||||
logEvent->write("");
|
||||
logEvent->write(event);
|
||||
logEvent->write(state);
|
||||
logEvent->init();
|
||||
return logEvent;
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateAppCrashEvent(const int uid, uint64_t timestampNs) {
|
||||
return CreateProcessLifeCycleStateChangedEvent(
|
||||
uid, ProcessLifeCycleStateChanged::PROCESS_CRASHED, timestampNs);
|
||||
uid, ProcessLifeCycleStateChanged::CRASHED, timestampNs);
|
||||
}
|
||||
|
||||
std::unique_ptr<LogEvent> CreateIsolatedUidChangedEvent(
|
||||
|
||||
@@ -4493,8 +4493,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
StatsLog.write(StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED,
|
||||
component.app.uid, component.realActivity.getPackageName(),
|
||||
component.realActivity.getShortClassName(), resumed ?
|
||||
StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__ACTIVITY__MOVE_TO_FOREGROUND :
|
||||
StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__ACTIVITY__MOVE_TO_BACKGROUND);
|
||||
StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__STATE__FOREGROUND :
|
||||
StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__STATE__BACKGROUND);
|
||||
if (resumed) {
|
||||
if (mUsageStatsService != null) {
|
||||
mUsageStatsService.reportEvent(component.realActivity, component.userId,
|
||||
@@ -13179,10 +13179,6 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
+ android.Manifest.permission.SHUTDOWN);
|
||||
}
|
||||
|
||||
// TODO: Where should the corresponding '1' (start) write go?
|
||||
StatsLog.write(StatsLog.DEVICE_ON_STATUS_CHANGED,
|
||||
StatsLog.DEVICE_ON_STATUS_CHANGED__STATE__OFF);
|
||||
|
||||
boolean timedout = false;
|
||||
|
||||
synchronized(this) {
|
||||
@@ -15197,6 +15193,12 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
crashInfo.throwFileName,
|
||||
crashInfo.throwLineNumber);
|
||||
|
||||
StatsLog.write(StatsLog.APP_CRASH_OCCURRED,
|
||||
Binder.getCallingUid(),
|
||||
eventType,
|
||||
processName,
|
||||
Binder.getCallingPid());
|
||||
|
||||
addErrorToDropBox(eventType, r, processName, null, null, null, null, null, crashInfo);
|
||||
|
||||
mAppErrors.crashApplication(r, crashInfo);
|
||||
@@ -15367,6 +15369,9 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
EventLog.writeEvent(EventLogTags.AM_WTF, UserHandle.getUserId(callingUid), callingPid,
|
||||
processName, r == null ? -1 : r.info.flags, tag, crashInfo.exceptionMessage);
|
||||
|
||||
StatsLog.write(StatsLog.WTF_OCCURRED, callingUid, tag, processName,
|
||||
callingPid);
|
||||
|
||||
addErrorToDropBox("wtf", r, processName, null, null, tag, null, null, crashInfo);
|
||||
|
||||
return r;
|
||||
@@ -15488,19 +15493,6 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
final String dropboxTag = processClass(process) + "_" + eventType;
|
||||
if (dbox == null || !dbox.isTagEnabled(dropboxTag)) return;
|
||||
|
||||
// Log to StatsLog before the rate-limiting.
|
||||
// The logging below is adapated from appendDropboxProcessHeaders.
|
||||
StatsLog.write(StatsLog.DROPBOX_ERROR_CHANGED,
|
||||
process != null ? process.uid : -1,
|
||||
dropboxTag,
|
||||
processName,
|
||||
process != null ? process.pid : -1,
|
||||
(process != null && process.info != null) ?
|
||||
(process.info.isInstantApp() ? 1 : 0) : -1,
|
||||
activity != null ? activity.shortComponentName : null,
|
||||
activity != null ? activity.packageName : null,
|
||||
process != null ? (process.isInterestingToUserLocked() ? 1 : 0) : -1);
|
||||
|
||||
// Rate-limit how often we're willing to do the heavy lifting below to
|
||||
// collect and record logs; currently 5 logs per 10 second period.
|
||||
final long now = SystemClock.elapsedRealtime();
|
||||
@@ -19780,6 +19772,7 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
catPw.flush();
|
||||
}
|
||||
dropBuilder.append(catSw.toString());
|
||||
StatsLog.write(StatsLog.LOW_MEM_REPORTED);
|
||||
addErrorToDropBox("lowmem", null, "system_server", null,
|
||||
null, tag.toString(), dropBuilder.toString(), null, null);
|
||||
//Slog.i(TAG, "Sent to dropbox:");
|
||||
|
||||
@@ -489,7 +489,7 @@ class ActivityMetricsLogger {
|
||||
builder.addTaggedData(FIELD_CLASS_NAME, info.launchedActivity.info.name);
|
||||
mMetricsLogger.write(builder);
|
||||
StatsLog.write(
|
||||
StatsLog.APP_START_CANCEL_CHANGED,
|
||||
StatsLog.APP_START_CANCELED,
|
||||
info.launchedActivity.appInfo.uid,
|
||||
info.launchedActivity.packageName,
|
||||
convertAppStartTransitionType(type),
|
||||
@@ -561,7 +561,7 @@ class ActivityMetricsLogger {
|
||||
packageOptimizationInfo.getCompilationFilter());
|
||||
mMetricsLogger.write(builder);
|
||||
StatsLog.write(
|
||||
StatsLog.APP_START_CHANGED,
|
||||
StatsLog.APP_START_OCCURRED,
|
||||
info.applicationInfo.uid,
|
||||
info.packageName,
|
||||
convertAppStartTransitionType(info.type),
|
||||
@@ -582,15 +582,15 @@ class ActivityMetricsLogger {
|
||||
|
||||
private int convertAppStartTransitionType(int tronType) {
|
||||
if (tronType == TYPE_TRANSITION_COLD_LAUNCH) {
|
||||
return StatsLog.APP_START_CHANGED__TYPE__COLD;
|
||||
return StatsLog.APP_START_OCCURRED__TYPE__COLD;
|
||||
}
|
||||
if (tronType == TYPE_TRANSITION_WARM_LAUNCH) {
|
||||
return StatsLog.APP_START_CHANGED__TYPE__WARM;
|
||||
return StatsLog.APP_START_OCCURRED__TYPE__WARM;
|
||||
}
|
||||
if (tronType == TYPE_TRANSITION_HOT_LAUNCH) {
|
||||
return StatsLog.APP_START_CHANGED__TYPE__HOT;
|
||||
return StatsLog.APP_START_OCCURRED__TYPE__HOT;
|
||||
}
|
||||
return StatsLog.APP_START_CHANGED__TYPE__APP_START_TRANSITION_TYPE_UNKNOWN;
|
||||
return StatsLog.APP_START_OCCURRED__TYPE__UNKNOWN;
|
||||
}
|
||||
|
||||
void logAppTransitionReportedDrawn(ActivityRecord r, boolean restoredFromBundle) {
|
||||
@@ -611,12 +611,12 @@ class ActivityMetricsLogger {
|
||||
info.currentTransitionProcessRunning ? 1 : 0);
|
||||
mMetricsLogger.write(builder);
|
||||
StatsLog.write(
|
||||
StatsLog.APP_START_FULLY_DRAWN_CHANGED,
|
||||
StatsLog.APP_START_FULLY_DRAWN,
|
||||
info.launchedActivity.appInfo.uid,
|
||||
info.launchedActivity.packageName,
|
||||
restoredFromBundle
|
||||
? StatsLog.APP_START_FULLY_DRAWN_CHANGED__TYPE__WITH_BUNDLE
|
||||
: StatsLog.APP_START_FULLY_DRAWN_CHANGED__TYPE__WITHOUT_BUNDLE,
|
||||
? StatsLog.APP_START_FULLY_DRAWN__TYPE__WITH_BUNDLE
|
||||
: StatsLog.APP_START_FULLY_DRAWN__TYPE__WITHOUT_BUNDLE,
|
||||
info.launchedActivity.info.name,
|
||||
info.currentTransitionProcessRunning,
|
||||
startupTimeMs);
|
||||
|
||||
@@ -47,6 +47,7 @@ import android.util.ArraySet;
|
||||
import android.util.EventLog;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
import android.util.StatsLog;
|
||||
import android.util.SparseArray;
|
||||
import android.util.TimeUtils;
|
||||
import android.util.proto.ProtoOutputStream;
|
||||
@@ -1039,6 +1040,8 @@ class AppErrors {
|
||||
Process.sendSignal(app.pid, Process.SIGNAL_QUIT);
|
||||
}
|
||||
|
||||
StatsLog.write(StatsLog.ANR_OCCURRED, app.uid, app.processName,
|
||||
activity == null ? "unknown": activity.shortComponentName, annotation);
|
||||
mService.addErrorToDropBox("anr", app, app.processName, activity, parent, annotation,
|
||||
cpuInfo, tracesFile, null);
|
||||
|
||||
|
||||
@@ -337,7 +337,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
synchronized (mStats) {
|
||||
mStats.noteProcessStartLocked(name, uid);
|
||||
StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name,
|
||||
StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_STARTED);
|
||||
StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__STATE__STARTED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -345,15 +345,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
synchronized (mStats) {
|
||||
mStats.noteProcessCrashLocked(name, uid);
|
||||
StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name,
|
||||
StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_CRASHED);
|
||||
StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__STATE__CRASHED);
|
||||
}
|
||||
}
|
||||
|
||||
void noteProcessAnr(String name, int uid) {
|
||||
synchronized (mStats) {
|
||||
mStats.noteProcessAnrLocked(name, uid);
|
||||
StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name,
|
||||
StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_ANRED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -361,7 +359,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
synchronized (mStats) {
|
||||
mStats.noteProcessFinishLocked(name, uid);
|
||||
StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name,
|
||||
StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_FINISHED);
|
||||
StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__STATE__FINISHED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -768,8 +766,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
enforceCallingPermission();
|
||||
synchronized (mStats) {
|
||||
mStats.noteVideoOnLocked(uid);
|
||||
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, uid, null,
|
||||
StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED__STATE__ON);
|
||||
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, uid, null,
|
||||
StatsLog.MEDIA_CODEC_STATE_CHANGED__STATE__ON);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -777,8 +775,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
enforceCallingPermission();
|
||||
synchronized (mStats) {
|
||||
mStats.noteVideoOffLocked(uid);
|
||||
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, uid,
|
||||
null, StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED__STATE__OFF);
|
||||
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, uid,
|
||||
null, StatsLog.MEDIA_CODEC_STATE_CHANGED__STATE__OFF);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -795,8 +793,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
enforceCallingPermission();
|
||||
synchronized (mStats) {
|
||||
mStats.noteResetVideoLocked();
|
||||
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, -1, null,
|
||||
StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED__STATE__RESET);
|
||||
StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, -1, null,
|
||||
StatsLog.MEDIA_CODEC_STATE_CHANGED__STATE__RESET);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -751,7 +751,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
||||
});
|
||||
}
|
||||
|
||||
private void pullWifiActivityEnergyInfo(int tagId, List<StatsLogEventWrapper> pulledData) {
|
||||
private void pullWifiActivityInfo(int tagId, List<StatsLogEventWrapper> pulledData) {
|
||||
long token = Binder.clearCallingIdentity();
|
||||
if (mWifiManager == null) {
|
||||
mWifiManager =
|
||||
@@ -919,8 +919,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
||||
pullKernelUidCpuActiveTime(tagId, ret);
|
||||
break;
|
||||
}
|
||||
case StatsLog.WIFI_ACTIVITY_ENERGY_INFO: {
|
||||
pullWifiActivityEnergyInfo(tagId, ret);
|
||||
case StatsLog.WIFI_ACTIVITY_INFO: {
|
||||
pullWifiActivityInfo(tagId, ret);
|
||||
break;
|
||||
}
|
||||
case StatsLog.MODEM_ACTIVITY_INFO: {
|
||||
|
||||
Reference in New Issue
Block a user