[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:
Kevin Li
2019-05-02 16:55:20 +08:00
committed by GitHub
parent 3e4afbc788
commit 386b013c5e
8 changed files with 287 additions and 336 deletions

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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;
}
}
}

View File

@@ -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));
}
}