Skip to content
This repository has been archived by the owner on Oct 7, 2024. It is now read-only.

Commit

Permalink
Tile loading performance measurement
Browse files Browse the repository at this point in the history
  • Loading branch information
osana committed May 10, 2019
1 parent dcdc444 commit 4eff6a3
Show file tree
Hide file tree
Showing 6 changed files with 171 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,23 @@

import android.app.Application;

import com.mapbox.mapboxandroiddemo.utils.TileLoadingInterceptor;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.module.http.HttpRequestUtil;
import com.squareup.picasso.OkHttpDownloader;
import com.squareup.picasso.Picasso;

import okhttp3.OkHttpClient;

public class MapboxApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
setUpPicasso();
Mapbox.getInstance(this, getString(R.string.access_token));
Mapbox.getTelemetry().setDebugLoggingEnabled(true);
setUpTileLoadingMeasurement();
}

private void setUpPicasso() {
Expand All @@ -22,4 +28,11 @@ private void setUpPicasso() {
built.setLoggingEnabled(true);
Picasso.setSingletonInstance(built);
}

private void setUpTileLoadingMeasurement() {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(new TileLoadingInterceptor())
.build();
HttpRequestUtil.setOkHttpClient(okHttpClient);
}
}
3 changes: 2 additions & 1 deletion MapboxAndroidDemo/src/global/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
package="com.mapbox.mapboxandroiddemo">


<application>
<application
android:name=".MapboxApplication">

<activity
android:name=".account.LandingActivity"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@

import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.mapbox.mapboxandroiddemo.utils.TileLoadingInterceptor;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.module.http.HttpRequestUtil;
import com.squareup.picasso.OkHttpDownloader;
import com.squareup.picasso.Picasso;

import okhttp3.OkHttpClient;

public class MapboxApplication extends MultiDexApplication {

@Override
Expand All @@ -16,6 +20,9 @@ public void onCreate() {
initializeFirebaseApp();
setUpPicasso();
Mapbox.getInstance(this, getString(R.string.access_token));
Mapbox.getTelemetry().setDebugLoggingEnabled(true);
setUpTileLoadingMeasurement();

}

private void initializeFirebaseApp() {
Expand All @@ -33,4 +40,11 @@ private void setUpPicasso() {
built.setLoggingEnabled(true);
Picasso.setSingletonInstance(built);
}

private void setUpTileLoadingMeasurement() {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(new TileLoadingInterceptor())
.build();
HttpRequestUtil.setOkHttpClient(okHttpClient);
}
}
1 change: 1 addition & 0 deletions MapboxAndroidDemo/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
android:required="false" />

<application
android:name=".MapboxApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
package com.mapbox.mapboxandroiddemo.utils;

import android.app.ActivityManager;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.mapbox.mapboxandroiddemo.BuildConfig;
import com.mapbox.mapboxsdk.Mapbox;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/**
* This Interceptor allows to measure time spent getting a response object over network.
* The following data will be collected:
* responseCode, elapsedMS
* requestUrl (request string till the question mark),
* and device metadata.
*/
public class TileLoadingInterceptor implements Interceptor {

private static String metadata = null;

@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
long elapsed = System.nanoTime();

Response response = chain.proceed(request);
elapsed = System.nanoTime() - elapsed;

triggerPerformanceEvent(response, elapsed / 1000000);

return response;
}

private void triggerPerformanceEvent(Response response, long elapsedMs) {

Context appContext = Mapbox.getApplicationContext();
ConnectivityManager cm =
(ConnectivityManager)appContext.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
List<Attribute<String>> attributes = new ArrayList<>();
String request = getUrl(response.request());
attributes.add(
new Attribute<>("requestUrl", request));
attributes.add(
new Attribute<>("responseCode", String.valueOf(response.code())));
attributes.add(
new Attribute<>("wifiOn",
String.valueOf(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)));

List<Attribute<Long>> counters = new ArrayList();
counters.add(new Attribute<>("elapsedMS", elapsedMs));

Bundle bundle = new Bundle();
Gson gson = new Gson();
bundle.putString("attributes", gson.toJson(attributes));
bundle.putString("counters", gson.toJson(counters));
bundle.putString("metadata", getMetadata());

Mapbox.getTelemetry().onPerformanceEvent(bundle);

Mapbox.getTelemetry().setUserTelemetryRequestState(true);

Log.d(">>>",">>> PERF Event CODE=" + response.code()
+ " elapsed=" + elapsedMs
+ " wifiOn=" + (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
+ " url=" + request);
}

private static String getUrl(Request request) {
String url = request.url().toString();
return url.substring(0, url.indexOf('?'));
}

private static String getMetadata() {
if (metadata == null) {
JsonObject metaData = new JsonObject();
metaData.addProperty("os", "android");
metaData.addProperty("manufacturer", Build.MANUFACTURER);
metaData.addProperty("brand", Build.BRAND);
metaData.addProperty("device", Build.MODEL);
metaData.addProperty("version", Build.VERSION.RELEASE);
metaData.addProperty("abi", Build.CPU_ABI);
metaData.addProperty("country", Locale.getDefault().getISO3Country());
metaData.addProperty("ram", getRam());
metaData.addProperty("screenSize", getWindowSize());
metaData.addProperty("buildFlavor", BuildConfig.FLAVOR);
metadata = metaData.toString();
}
return metadata;
}

private static String getRam() {
ActivityManager actManager =
(ActivityManager) Mapbox.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
actManager.getMemoryInfo(memInfo);
return String.valueOf(memInfo.totalMem);
}

private static String getWindowSize() {
WindowManager windowManager =
(WindowManager) Mapbox.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;

return "{" + width + "," + height + "}";
}

private static class Attribute<T> {
private String name;
private T value;

Attribute(String name, T value) {
this.name = name;
this.value = value;
}
}
}
1 change: 1 addition & 0 deletions MapboxAndroidWearDemo/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<uses-feature android:name="android.hardware.type.watch"/>

<application
android:name=".MapboxApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
Expand Down

0 comments on commit 4eff6a3

Please sign in to comment.