[Android]Expand schema test, modify performance event (#14535)
* expand schema test, modify performance event * enclose java doc * revert int to long
This commit is contained in:
@@ -9,7 +9,7 @@ import com.mapbox.android.telemetry.Event;
|
||||
* Base event class for telemetry events.
|
||||
*/
|
||||
@SuppressLint("ParcelCreator")
|
||||
public abstract class MapBaseEvent extends Event {
|
||||
abstract class MapBaseEvent extends Event {
|
||||
private final String event;
|
||||
private final String created;
|
||||
|
||||
@@ -20,11 +20,11 @@ public abstract class MapBaseEvent extends Event {
|
||||
|
||||
abstract String getEventName();
|
||||
|
||||
public String getEvent() {
|
||||
String getEvent() {
|
||||
return event;
|
||||
}
|
||||
|
||||
public String getCreated() {
|
||||
String getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.mapbox.mapboxsdk.module.telemetry;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.FloatRange;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
@@ -35,8 +36,8 @@ class MapEventFactory {
|
||||
@FloatRange(from = MapboxConstants.MINIMUM_ZOOM,
|
||||
to = MapboxConstants.MAXIMUM_ZOOM) Double maxZoom,
|
||||
String styleURL,
|
||||
Long sizeOfResourcesCompleted,
|
||||
Long numberOfTilesCompleted,
|
||||
long sizeOfResourcesCompleted,
|
||||
long numberOfTilesCompleted,
|
||||
@OfflineRegion.DownloadState int state) {
|
||||
|
||||
OfflineDownloadEndEvent offlineEvent =
|
||||
@@ -56,4 +57,9 @@ class MapEventFactory {
|
||||
return new MapDragendEvent(phoneState, mapState);
|
||||
}
|
||||
|
||||
static PerformanceEvent buildPerformanceEvent(@NonNull PhoneState phoneState, @NonNull String sessionId,
|
||||
@NonNull Bundle data) {
|
||||
return new PerformanceEvent(phoneState, sessionId, data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ public class OfflineDownloadEndEvent extends MapBaseEvent {
|
||||
private final Double maxZoom;
|
||||
private final String shapeForOfflineRegion;
|
||||
private String styleURL;
|
||||
private String state;
|
||||
private long sizeOfResourcesCompleted;
|
||||
private long numberOfTilesCompleted;
|
||||
private int state;
|
||||
|
||||
OfflineDownloadEndEvent(PhoneState phoneState, String shapeForOfflineRegion,
|
||||
@FloatRange(from = MapboxConstants.MINIMUM_ZOOM,
|
||||
@@ -72,12 +72,12 @@ public class OfflineDownloadEndEvent extends MapBaseEvent {
|
||||
this.numberOfTilesCompleted = numberOfTilesCompleted;
|
||||
}
|
||||
|
||||
int getState() {
|
||||
String getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
void setState(@OfflineRegion.DownloadState int state) {
|
||||
this.state = state;
|
||||
this.state = String.valueOf(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -97,20 +97,20 @@ public class OfflineDownloadEndEvent extends MapBaseEvent {
|
||||
if (numberOfTilesCompleted != that.numberOfTilesCompleted) {
|
||||
return false;
|
||||
}
|
||||
if (state != that.state) {
|
||||
return false;
|
||||
}
|
||||
if (minZoom != null ? !minZoom.equals(that.minZoom) : that.minZoom != null) {
|
||||
return false;
|
||||
}
|
||||
if (maxZoom != null ? !maxZoom.equals(that.maxZoom) : that.maxZoom != null) {
|
||||
return false;
|
||||
}
|
||||
if (shapeForOfflineRegion != null ? !shapeForOfflineRegion.equals(that.shapeForOfflineRegion) :
|
||||
that.shapeForOfflineRegion != null) {
|
||||
if (shapeForOfflineRegion != null ? !shapeForOfflineRegion.equals(that.shapeForOfflineRegion)
|
||||
: that.shapeForOfflineRegion != null) {
|
||||
return false;
|
||||
}
|
||||
return styleURL != null ? styleURL.equals(that.styleURL) : that.styleURL == null;
|
||||
if (styleURL != null ? !styleURL.equals(that.styleURL) : that.styleURL != null) {
|
||||
return false;
|
||||
}
|
||||
return state != null ? state.equals(that.state) : that.state == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -119,9 +119,9 @@ public class OfflineDownloadEndEvent extends MapBaseEvent {
|
||||
result = 31 * result + (maxZoom != null ? maxZoom.hashCode() : 0);
|
||||
result = 31 * result + (shapeForOfflineRegion != null ? shapeForOfflineRegion.hashCode() : 0);
|
||||
result = 31 * result + (styleURL != null ? styleURL.hashCode() : 0);
|
||||
result = 31 * result + (state != null ? state.hashCode() : 0);
|
||||
result = 31 * result + (int) (sizeOfResourcesCompleted ^ (sizeOfResourcesCompleted >>> 32));
|
||||
result = 31 * result + (int) (numberOfTilesCompleted ^ (numberOfTilesCompleted >>> 32));
|
||||
result = 31 * result + state;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,116 +1,71 @@
|
||||
package com.mapbox.mapboxsdk.module.telemetry;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.mapbox.android.telemetry.Event;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Generic Performance Event that can be used for performance measurements.
|
||||
* Customer measurements can be added to the bundle.
|
||||
*
|
||||
* <p>
|
||||
* Bundle is expected to have following properties:
|
||||
* "attributes", "counters", and "metadata" with String values.
|
||||
*
|
||||
* </p>
|
||||
* <p>
|
||||
* Attributes: a string representing an array of name/string value pair objects.
|
||||
* Counters: a string representing an array of name/number value pair objects.
|
||||
* Metadata is a string representation of a JsonObject with string values.
|
||||
*
|
||||
* Here is an example of a Performance event bundle data:
|
||||
*
|
||||
* </p>
|
||||
* <p>
|
||||
* Here is an example of a Performance event bundle data:
|
||||
* </p>
|
||||
* <p>
|
||||
* "attributes": [{ "name": "style_id", "value": "mapbox://styles/mapbox/streets-v10"}]
|
||||
*
|
||||
* </p>
|
||||
* <p>
|
||||
* "counters": [{"name": "fps_average", "value": 90.7655486547093},
|
||||
* {"name": "fps_deviation", "value": 29.301809631465574}]
|
||||
* {"name": "fps_deviation", "value": 29.301809631465574}]
|
||||
* “metadata”: {
|
||||
* “version”: “9”,
|
||||
* “screenSize”: “1080x1794”,
|
||||
* “country”: “US”,
|
||||
* “device”: “Pixel 2”,
|
||||
* “abi”: “arm64-v8a”,
|
||||
* “brand”: “google”,
|
||||
* “ram”: “3834167296”,
|
||||
* “os”: “android”,
|
||||
* “gpu”: “Qualcomm, Adreno (TM) 540, OpenGL ES 3.2 V@313.0 (GIT@7bf2852, Ie32bfa6f6f)“,
|
||||
* “manufacturer”: “Google”
|
||||
* }
|
||||
* “version”: “9”,
|
||||
* “screenSize”: “1080x1794”,
|
||||
* “country”: “US”,
|
||||
* “device”: “Pixel 2”,
|
||||
* “abi”: “arm64-v8a”,
|
||||
* “brand”: “google”,
|
||||
* “ram”: “3834167296”,
|
||||
* “os”: “android”,
|
||||
* “gpu”: “Qualcomm, Adreno (TM) 540, OpenGL ES 3.2 V@313.0 (GIT@7bf2852, Ie32bfa6f6f)“,
|
||||
* “manufacturer”: “Google”
|
||||
* }
|
||||
* </p>
|
||||
*/
|
||||
public class PerformanceEvent extends Event {
|
||||
|
||||
@SuppressLint("ParcelCreator")
|
||||
class PerformanceEvent extends MapBaseEvent {
|
||||
private static final String PERFORMANCE_TRACE = "mobile.performance_trace";
|
||||
|
||||
private final String event;
|
||||
|
||||
private final String created;
|
||||
|
||||
private final String sessionId;
|
||||
|
||||
private final List<Attribute<String>> attributes;
|
||||
|
||||
private final List<Attribute<Double>> counters;
|
||||
|
||||
private final List<PerformanceAttribute<String>> attributes;
|
||||
private final List<PerformanceAttribute<Double>> counters;
|
||||
private final JsonObject metadata;
|
||||
|
||||
|
||||
private static final SimpleDateFormat DATE_FORMAT =
|
||||
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
|
||||
|
||||
PerformanceEvent(String sessionId, Bundle bundle) {
|
||||
|
||||
this.event = PERFORMANCE_TRACE;
|
||||
this.created = DATE_FORMAT.format(new Date());
|
||||
PerformanceEvent(PhoneState phoneState, String sessionId, Bundle bundle) {
|
||||
super(phoneState);
|
||||
this.sessionId = sessionId;
|
||||
this.attributes = initList(bundle.getString("attributes"),
|
||||
new TypeToken<ArrayList<Attribute<String>>>() {});
|
||||
new TypeToken<ArrayList<PerformanceAttribute<String>>>() {
|
||||
});
|
||||
this.counters = initList(bundle.getString("counters"),
|
||||
new TypeToken<ArrayList<Attribute<Double>>>() {});
|
||||
new TypeToken<ArrayList<PerformanceAttribute<Double>>>() {
|
||||
});
|
||||
this.metadata = initMetaData(bundle.getString("metadata"));
|
||||
}
|
||||
|
||||
private PerformanceEvent(Parcel in) {
|
||||
this.event = in.readString();
|
||||
this.created = in.readString();
|
||||
this.sessionId = in.readString();
|
||||
|
||||
this.attributes = initList(in.readString(), new TypeToken<ArrayList<Attribute<String>>>() {});
|
||||
this.counters = initList(in.readString(), new TypeToken<ArrayList<Attribute<Double>>>() {});
|
||||
this.metadata = initMetaData(in.readString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel parcel, int i) {
|
||||
parcel.writeString(event);
|
||||
parcel.writeString(created);
|
||||
parcel.writeString(sessionId);
|
||||
|
||||
Gson gson = new Gson();
|
||||
|
||||
parcel.writeString(gson.toJson(attributes));
|
||||
parcel.writeString(gson.toJson(counters));
|
||||
|
||||
if (metadata != null) {
|
||||
parcel.writeString(metadata.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private <T> ArrayList<Attribute<T>> initList(String fromString, TypeToken typeToken) {
|
||||
private <T> ArrayList<PerformanceAttribute<T>> initList(String fromString, TypeToken typeToken) {
|
||||
if (fromString == null || fromString.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
@@ -125,26 +80,100 @@ public class PerformanceEvent extends Event {
|
||||
}
|
||||
}
|
||||
|
||||
public static final Creator<PerformanceEvent> CREATOR = new Creator<PerformanceEvent>() {
|
||||
@Override
|
||||
public PerformanceEvent createFromParcel(Parcel in) {
|
||||
return new PerformanceEvent(in);
|
||||
@Override
|
||||
String getEventName() {
|
||||
return PERFORMANCE_TRACE;
|
||||
}
|
||||
|
||||
String getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
List<PerformanceAttribute<String>> getAttributes() {
|
||||
return attributes;
|
||||
}
|
||||
|
||||
List<PerformanceAttribute<Double>> getCounters() {
|
||||
return counters;
|
||||
}
|
||||
|
||||
JsonObject getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PerformanceEvent[] newArray(int size) {
|
||||
return new PerformanceEvent[size];
|
||||
PerformanceEvent that = (PerformanceEvent) o;
|
||||
|
||||
if (sessionId != null ? !sessionId.equals(that.sessionId) : that.sessionId != null) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
if (attributes != null ? !attributes.equals(that.attributes) : that.attributes != null) {
|
||||
return false;
|
||||
}
|
||||
if (counters != null ? !counters.equals(that.counters) : that.counters != null) {
|
||||
return false;
|
||||
}
|
||||
return metadata != null ? metadata.equals(that.metadata) : that.metadata == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = sessionId != null ? sessionId.hashCode() : 0;
|
||||
result = 31 * result + (attributes != null ? attributes.hashCode() : 0);
|
||||
result = 31 * result + (counters != null ? counters.hashCode() : 0);
|
||||
result = 31 * result + (metadata != null ? metadata.hashCode() : 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
private class Attribute<T> {
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PerformanceEvent{"
|
||||
+ "sessionId='" + sessionId + '\''
|
||||
+ ", attributes=" + attributes
|
||||
+ ", counters=" + counters
|
||||
+ ", metadata=" + metadata
|
||||
+ '}';
|
||||
}
|
||||
|
||||
static class PerformanceAttribute<T> {
|
||||
private final String name;
|
||||
private final T value;
|
||||
|
||||
Attribute(String name, T value) {
|
||||
PerformanceAttribute(String name, T value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
PerformanceAttribute<?> that = (PerformanceAttribute<?>) o;
|
||||
|
||||
if (name != null ? !name.equals(that.name) : that.name != null) {
|
||||
return false;
|
||||
}
|
||||
return value != null ? value.equals(that.value) : that.value == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = name != null ? name.hashCode() : 0;
|
||||
result = 31 * result + (value != null ? value.hashCode() : 0);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,6 +115,7 @@ public class TelemetryImpl implements TelemetryDefinition {
|
||||
if (data == null) {
|
||||
data = new Bundle();
|
||||
}
|
||||
telemetry.push(new PerformanceEvent(UUID.randomUUID().toString(), data));
|
||||
telemetry.push(MapEventFactory.buildPerformanceEvent(new PhoneState(appContext),
|
||||
UUID.randomUUID().toString(), data));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user