From 66ada54280ee41a654c72809e1ad3fd1e401f780 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Mon, 22 Apr 2019 15:02:52 -0700 Subject: [PATCH 01/11] Java side of FirebasePerformance rewrite --- .../FirebasePerformancePlugin.java | 154 +----------------- .../FlutterFirebasePerformance.java | 62 +++++++ .../FlutterHttpMetric.java | 113 +++++++++++++ .../firebaseperformance/FlutterTrace.java | 134 +++++++++++++++ 4 files changed, 313 insertions(+), 150 deletions(-) create mode 100644 packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java create mode 100644 packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java create mode 100644 packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java index cd8d4960fd16..ad115a499d2f 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java @@ -4,161 +4,15 @@ package io.flutter.plugins.firebaseperformance; -import android.util.SparseArray; -import com.google.firebase.perf.FirebasePerformance; -import com.google.firebase.perf.metrics.HttpMetric; -import com.google.firebase.perf.metrics.Trace; -import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -import io.flutter.plugin.common.MethodChannel.MethodCallHandler; -import io.flutter.plugin.common.MethodChannel.Result; import io.flutter.plugin.common.PluginRegistry.Registrar; -import java.util.Map; /** FirebasePerformancePlugin */ -public class FirebasePerformancePlugin implements MethodCallHandler { - private FirebasePerformance firebasePerformance; - - private final SparseArray traces = new SparseArray<>(); - private final SparseArray httpMetrics = new SparseArray<>(); +public class FirebasePerformancePlugin { + private static final String CHANNEL_NAME = "plugins.flutter.io/firebase_performance"; public static void registerWith(Registrar registrar) { - final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_performance"); - channel.setMethodCallHandler(new FirebasePerformancePlugin()); - } - - private FirebasePerformancePlugin() { - firebasePerformance = FirebasePerformance.getInstance(); - } - - @Override - public void onMethodCall(MethodCall call, Result result) { - switch (call.method) { - case "FirebasePerformance#isPerformanceCollectionEnabled": - result.success(firebasePerformance.isPerformanceCollectionEnabled()); - break; - case "FirebasePerformance#setPerformanceCollectionEnabled": - final boolean enabled = (boolean) call.arguments; - firebasePerformance.setPerformanceCollectionEnabled(enabled); - result.success(null); - break; - case "Trace#start": - handleTraceStart(call, result); - break; - case "Trace#stop": - handleTraceStop(call, result); - break; - case "HttpMetric#start": - handleHttpMetricStart(call, result); - break; - case "HttpMetric#stop": - handleHttpMetricStop(call, result); - break; - default: - result.notImplemented(); - } - } - - private void handleTraceStart(MethodCall call, Result result) { - Integer handle = call.argument("handle"); - String name = call.argument("name"); - - Trace trace = firebasePerformance.newTrace(name); - - traces.put(handle, trace); - - trace.start(); - result.success(null); - } - - private void handleTraceStop(MethodCall call, Result result) { - Integer handle = call.argument("handle"); - Trace trace = traces.get(handle); - - Map counters = call.argument("counters"); - for (Map.Entry entry : counters.entrySet()) { - trace.incrementCounter(entry.getKey(), entry.getValue()); - } - - Map attributes = call.argument("attributes"); - for (Map.Entry entry : attributes.entrySet()) { - trace.putAttribute(entry.getKey(), entry.getValue()); - } - - trace.stop(); - traces.remove(handle); - result.success(null); - } - - private void handleHttpMetricStart(MethodCall call, Result result) { - Integer handle = call.argument("handle"); - String url = call.argument("url"); - - int httpMethod = call.argument("httpMethod"); - String httpMethodStr; - switch (httpMethod) { - case 0: - httpMethodStr = FirebasePerformance.HttpMethod.CONNECT; - break; - case 1: - httpMethodStr = FirebasePerformance.HttpMethod.DELETE; - break; - case 2: - httpMethodStr = FirebasePerformance.HttpMethod.GET; - break; - case 3: - httpMethodStr = FirebasePerformance.HttpMethod.HEAD; - break; - case 4: - httpMethodStr = FirebasePerformance.HttpMethod.OPTIONS; - break; - case 5: - httpMethodStr = FirebasePerformance.HttpMethod.PATCH; - break; - case 6: - httpMethodStr = FirebasePerformance.HttpMethod.POST; - break; - case 7: - httpMethodStr = FirebasePerformance.HttpMethod.PUT; - break; - case 8: - httpMethodStr = FirebasePerformance.HttpMethod.TRACE; - break; - default: - httpMethodStr = null; - break; - } - - HttpMetric metric = firebasePerformance.newHttpMetric(url, httpMethodStr); - - httpMetrics.put(handle, metric); - - metric.start(); - result.success(null); - } - - private void handleHttpMetricStop(MethodCall call, Result result) { - Integer handle = call.argument("handle"); - HttpMetric metric = httpMetrics.get(handle); - - Integer httpResponseCode = call.argument("httpResponseCode"); - Number requestPayloadSize = call.argument("requestPayloadSize"); - String responseContentType = call.argument("responseContentType"); - Number responsePayloadSize = call.argument("responsePayloadSize"); - - if (requestPayloadSize != null) metric.setRequestPayloadSize(requestPayloadSize.longValue()); - if (httpResponseCode != null) metric.setHttpResponseCode(httpResponseCode); - if (responseContentType != null) metric.setResponseContentType(responseContentType); - if (responsePayloadSize != null) metric.setResponsePayloadSize(responsePayloadSize.longValue()); - - Map attributes = call.argument("attributes"); - for (Map.Entry entry : attributes.entrySet()) { - metric.putAttribute(entry.getKey(), entry.getValue()); - } - - metric.stop(); - httpMetrics.remove(handle); - result.success(null); + final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME); + channel.setMethodCallHandler(FlutterFirebasePerformance.getInstance(registrar.messenger())); } } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java new file mode 100644 index 000000000000..bc3da7ea53f9 --- /dev/null +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java @@ -0,0 +1,62 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebaseperformance; + +import com.google.firebase.perf.FirebasePerformance; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; + +public class FlutterFirebasePerformance implements MethodChannel.MethodCallHandler { + private final BinaryMessenger binaryMessenger; + private final FirebasePerformance performance; + + static FlutterFirebasePerformance getInstance(BinaryMessenger messenger) { + return new FlutterFirebasePerformance(messenger); + } + + private FlutterFirebasePerformance(BinaryMessenger messenger) { + this.binaryMessenger = messenger; + this.performance = FirebasePerformance.getInstance(); + } + + @Override + public void onMethodCall(MethodCall call, MethodChannel.Result result) { + switch (call.method) { + case "FirebasePerformance#isPerformanceCollectionEnabled": + isPerformanceCollectionEnabled(result); + break; + case "FirebasePerformance#setPerformanceCollectionEnabled": + setPerformanceCollectionEnabled(call.arguments, result); + break; + case "FirebasePerformance#newTrace": + newTrace(call.arguments, result); + break; + case "FirebasePerformance#newHttpMetric": + newHttpMetric(call.arguments, result); + break; + default: + result.notImplemented(); + } + } + + private void isPerformanceCollectionEnabled(MethodChannel.Result result) { + result.success(performance.isPerformanceCollectionEnabled()); + } + + private void setPerformanceCollectionEnabled(Object arguments, MethodChannel.Result result) { + final boolean enabled = (Boolean) arguments; + performance.setPerformanceCollectionEnabled(enabled); + result.success(null); + } + + private void newTrace(Object arguments, MethodChannel.Result result) { + new FlutterTrace(performance, binaryMessenger, arguments, result); + } + + private void newHttpMetric(Object arguments, MethodChannel.Result result) { + new FlutterHttpMetric(performance, binaryMessenger, arguments, result); + } +} diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java new file mode 100644 index 000000000000..1d2e8a3729af --- /dev/null +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -0,0 +1,113 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebaseperformance; + +import com.google.firebase.perf.FirebasePerformance; +import com.google.firebase.perf.metrics.HttpMetric; +import java.util.Map; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; + +public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { + private final HttpMetric httpMetric; + + FlutterHttpMetric( + FirebasePerformance performance, + BinaryMessenger messenger, + Object arguments, + MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String channelName = (String) args.get("channelName"); + final String url = (String) args.get("url"); + final String httpMethod = (String) args.get("httpMethod"); + + this.httpMetric = performance.newHttpMetric(url, httpMethod); + + final MethodChannel channel = new MethodChannel(messenger, channelName); + channel.setMethodCallHandler(this); + + result.success(null); + } + + @Override + public void onMethodCall(MethodCall call, MethodChannel.Result result) { + switch (call.method) { + case "HttpMetric#start": + start(result); + break; + case "HttpMetric#stop": + stop(call.arguments, result); + break; + case "PerformanceAttributes#putAttribute": + putAttribute(call.arguments, result); + break; + case "PerformanceAttributes#removeAttribute": + removeAttribute(call.arguments, result); + break; + case "PerformanceAttributes#getAttributes": + getAttributes(result); + break; + default: + result.notImplemented(); + } + } + + private void start(MethodChannel.Result result) { + httpMetric.start(); + result.success(null); + } + + private void stop(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final Integer httpResponseCode = (Integer) args.get("httpResponseCode"); + final Number requestPayloadSize = (Number) args.get("requestPayloadSize"); + final String responseContentType = (String) args.get("responseContentType"); + final Number responsePayloadSize = (Number) args.get("responsePayloadSize"); + + if (requestPayloadSize != null) { + httpMetric.setRequestPayloadSize(requestPayloadSize.longValue()); + } + if (responsePayloadSize != null) { + httpMetric.setResponsePayloadSize(responsePayloadSize.longValue()); + } + + if (httpResponseCode != null) httpMetric.setHttpResponseCode(httpResponseCode); + if (responseContentType != null) httpMetric.setResponseContentType(responseContentType); + + httpMetric.stop(); + result.success(null); + } + + private void putAttribute(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String attribute = (String) args.get("attribute"); + final String value = (String) args.get("value"); + + httpMetric.putAttribute(attribute, value); + + result.success(null); + } + + private void removeAttribute(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String attribute = (String) args.get("attribute"); + httpMetric.removeAttribute(attribute); + + result.success(null); + } + + private void getAttributes(MethodChannel.Result result) { + result.success(httpMetric.getAttributes()); + } +} diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java new file mode 100644 index 000000000000..3ccbfdd07b14 --- /dev/null +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -0,0 +1,134 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebaseperformance; + +import com.google.firebase.perf.FirebasePerformance; +import com.google.firebase.perf.metrics.Trace; +import java.util.Map; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; + +public class FlutterTrace implements MethodChannel.MethodCallHandler { + private final Trace trace; + + FlutterTrace( + FirebasePerformance performance, + BinaryMessenger messenger, + Object arguments, + MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String traceName = (String) args.get("traceName"); + final String channelName = (String) args.get("channelName"); + + this.trace = performance.newTrace(traceName); + + final MethodChannel channel = new MethodChannel(messenger, channelName); + channel.setMethodCallHandler(this); + + result.success(null); + } + + @Override + public void onMethodCall(MethodCall call, MethodChannel.Result result) { + switch (call.method) { + case "Trace#start": + start(result); + break; + case "Trace#stop": + stop(result); + break; + case "Trace#putMetric": + putMetric(call.arguments, result); + break; + case "Trace#incrementMetric": + incrementMetric(call.arguments, result); + break; + case "Trace#getMetric": + getMetric(call.arguments, result); + break; + case "PerformanceAttributes#putAttribute": + putAttribute(call.arguments, result); + break; + case "PerformanceAttributes#removeAttribute": + removeAttribute(call.arguments, result); + break; + case "PerformanceAttributes#getAttributes": + getAttributes(result); + break; + default: + result.notImplemented(); + } + } + + private void start(MethodChannel.Result result) { + trace.start(); + result.success(null); + } + + private void stop(MethodChannel.Result result) { + trace.stop(); + result.success(null); + } + + private void putMetric(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String name = (String) args.get("name"); + final Number value = (Number) args.get("value"); + trace.putMetric(name, value.longValue()); + + result.success(null); + } + + private void incrementMetric(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String name = (String) args.get("name"); + final Number value = (Number) args.get("value"); + trace.incrementMetric(name, value.longValue()); + + result.success(null); + } + + private void getMetric(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String name = (String) args.get("name"); + + result.success(trace.getLongMetric(name)); + } + + private void putAttribute(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String attribute = (String) args.get("attribute"); + final String value = (String) args.get("value"); + + trace.putAttribute(attribute, value); + + result.success(null); + } + + private void removeAttribute(Object arguments, MethodChannel.Result result) { + @SuppressWarnings("unchecked") + final Map args = (Map) arguments; + + final String attribute = (String) args.get("attribute"); + trace.removeAttribute(attribute); + + result.success(null); + } + + private void getAttributes(MethodChannel.Result result) { + result.success(trace.getAttributes()); + } +} From cfa200cd3de8d4541a6901c6231a93ef2917d961 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Mon, 22 Apr 2019 15:27:03 -0700 Subject: [PATCH 02/11] Formatting and suppressing warnings --- .../flutter/plugins/firebaseperformance/FlutterHttpMetric.java | 3 ++- .../io/flutter/plugins/firebaseperformance/FlutterTrace.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index 1d2e8a3729af..9f6c41f67a54 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -6,11 +6,12 @@ import com.google.firebase.perf.FirebasePerformance; import com.google.firebase.perf.metrics.HttpMetric; -import java.util.Map; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; +import java.util.Map; +@SuppressWarnings("ConstantConditions") public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { private final HttpMetric httpMetric; diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java index 3ccbfdd07b14..7488204e8d11 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -6,11 +6,12 @@ import com.google.firebase.perf.FirebasePerformance; import com.google.firebase.perf.metrics.Trace; -import java.util.Map; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; +import java.util.Map; +@SuppressWarnings("ConstantConditions") public class FlutterTrace implements MethodChannel.MethodCallHandler { private final Trace trace; From e3aa0e91b578590d34f5b496dc06665b53bbef6c Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 23 Apr 2019 12:00:56 -0700 Subject: [PATCH 03/11] Update metric take individual parameters --- .../FlutterFirebasePerformance.java | 20 ++--- .../FlutterHttpMetric.java | 85 ++++++++++--------- .../firebaseperformance/FlutterTrace.java | 63 +++++--------- 3 files changed, 79 insertions(+), 89 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java index bc3da7ea53f9..9e66cf732f50 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java @@ -1,4 +1,4 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. +// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -29,13 +29,13 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { isPerformanceCollectionEnabled(result); break; case "FirebasePerformance#setPerformanceCollectionEnabled": - setPerformanceCollectionEnabled(call.arguments, result); + setPerformanceCollectionEnabled(call, result); break; case "FirebasePerformance#newTrace": - newTrace(call.arguments, result); + newTrace(call, result); break; case "FirebasePerformance#newHttpMetric": - newHttpMetric(call.arguments, result); + newHttpMetric(call, result); break; default: result.notImplemented(); @@ -46,17 +46,17 @@ private void isPerformanceCollectionEnabled(MethodChannel.Result result) { result.success(performance.isPerformanceCollectionEnabled()); } - private void setPerformanceCollectionEnabled(Object arguments, MethodChannel.Result result) { - final boolean enabled = (Boolean) arguments; + private void setPerformanceCollectionEnabled(MethodCall call, MethodChannel.Result result) { + final boolean enabled = (Boolean) call.arguments; performance.setPerformanceCollectionEnabled(enabled); result.success(null); } - private void newTrace(Object arguments, MethodChannel.Result result) { - new FlutterTrace(performance, binaryMessenger, arguments, result); + private void newTrace(MethodCall call, MethodChannel.Result result) { + new FlutterTrace(performance, binaryMessenger, call, result); } - private void newHttpMetric(Object arguments, MethodChannel.Result result) { - new FlutterHttpMetric(performance, binaryMessenger, arguments, result); + private void newHttpMetric(MethodCall call, MethodChannel.Result result) { + new FlutterHttpMetric(performance, binaryMessenger, call, result); } } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index 9f6c41f67a54..2ef6163bc620 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -1,4 +1,4 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. +// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -9,7 +9,6 @@ import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -import java.util.Map; @SuppressWarnings("ConstantConditions") public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { @@ -18,14 +17,11 @@ public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { FlutterHttpMetric( FirebasePerformance performance, BinaryMessenger messenger, - Object arguments, + MethodCall call, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String channelName = (String) args.get("channelName"); - final String url = (String) args.get("url"); - final String httpMethod = (String) args.get("httpMethod"); + final String channelName = call.argument("channelName"); + final String url = call.argument("url"); + final String httpMethod = call.argument("httpMethod"); this.httpMetric = performance.newHttpMetric(url, httpMethod); @@ -42,13 +38,25 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { start(result); break; case "HttpMetric#stop": - stop(call.arguments, result); + stop(result); + break; + case "HttpMetric#httpResponseCode": + setHttpResponseCode(call, result); + break; + case "HttpMetric#requestPayloadSize": + setRequestPayloadSize(call, result); + break; + case "HttpMetric#responseContentType": + setResponseContentType(call, result); + break; + case "HttpMetric#responsePayloadSize": + setResponsePayloadSize(call, result); break; case "PerformanceAttributes#putAttribute": - putAttribute(call.arguments, result); + putAttribute(call, result); break; case "PerformanceAttributes#removeAttribute": - removeAttribute(call.arguments, result); + removeAttribute(call, result); break; case "PerformanceAttributes#getAttributes": getAttributes(result); @@ -63,46 +71,47 @@ private void start(MethodChannel.Result result) { result.success(null); } - private void stop(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; + private void stop(MethodChannel.Result result) { + httpMetric.stop(); + result.success(null); + } - final Integer httpResponseCode = (Integer) args.get("httpResponseCode"); - final Number requestPayloadSize = (Number) args.get("requestPayloadSize"); - final String responseContentType = (String) args.get("responseContentType"); - final Number responsePayloadSize = (Number) args.get("responsePayloadSize"); + private void setHttpResponseCode(MethodCall call, MethodChannel.Result result) { + final Integer httpResponseCode = call.argument("httpResponseCode"); + httpMetric.setHttpResponseCode(httpResponseCode); + result.success(null); + } - if (requestPayloadSize != null) { - httpMetric.setRequestPayloadSize(requestPayloadSize.longValue()); - } - if (responsePayloadSize != null) { - httpMetric.setResponsePayloadSize(responsePayloadSize.longValue()); - } + private void setRequestPayloadSize(MethodCall call, MethodChannel.Result result) { + final Number payloadSize = call.argument("requestPayloadSize"); + httpMetric.setRequestPayloadSize(payloadSize.longValue()); + result.success(null); + } - if (httpResponseCode != null) httpMetric.setHttpResponseCode(httpResponseCode); - if (responseContentType != null) httpMetric.setResponseContentType(responseContentType); + private void setResponseContentType(MethodCall call, MethodChannel.Result result) { + final String contentType = call.argument("responseContentType"); + httpMetric.setResponseContentType(contentType); + result.success(null); + } - httpMetric.stop(); + private void setResponsePayloadSize(MethodCall call, MethodChannel.Result result) { + final Number payloadSize = call.argument("responsePayloadSize"); + httpMetric.setResponsePayloadSize(payloadSize.longValue()); result.success(null); } - private void putAttribute(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - final String attribute = (String) args.get("attribute"); - final String value = (String) args.get("value"); + private void putAttribute(MethodCall call, MethodChannel.Result result) { + final String attribute = call.argument("attribute"); + final String value = call.argument("value"); httpMetric.putAttribute(attribute, value); result.success(null); } - private void removeAttribute(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String attribute = (String) args.get("attribute"); + private void removeAttribute(MethodCall call, MethodChannel.Result result) { + final String attribute = call.argument("attribute"); httpMetric.removeAttribute(attribute); result.success(null); diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java index 7488204e8d11..566e99c5d179 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -1,4 +1,4 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. +// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -9,7 +9,6 @@ import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -import java.util.Map; @SuppressWarnings("ConstantConditions") public class FlutterTrace implements MethodChannel.MethodCallHandler { @@ -18,13 +17,10 @@ public class FlutterTrace implements MethodChannel.MethodCallHandler { FlutterTrace( FirebasePerformance performance, BinaryMessenger messenger, - Object arguments, + MethodCall call, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String traceName = (String) args.get("traceName"); - final String channelName = (String) args.get("channelName"); + final String traceName = call.argument("traceName"); + final String channelName = call.argument("channelName"); this.trace = performance.newTrace(traceName); @@ -44,19 +40,19 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { stop(result); break; case "Trace#putMetric": - putMetric(call.arguments, result); + putMetric(call, result); break; case "Trace#incrementMetric": - incrementMetric(call.arguments, result); + incrementMetric(call, result); break; case "Trace#getMetric": - getMetric(call.arguments, result); + getMetric(call, result); break; case "PerformanceAttributes#putAttribute": - putAttribute(call.arguments, result); + putAttribute(call, result); break; case "PerformanceAttributes#removeAttribute": - removeAttribute(call.arguments, result); + removeAttribute(call, result); break; case "PerformanceAttributes#getAttributes": getAttributes(result); @@ -76,54 +72,39 @@ private void stop(MethodChannel.Result result) { result.success(null); } - private void putMetric(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String name = (String) args.get("name"); - final Number value = (Number) args.get("value"); + private void putMetric(MethodCall call, MethodChannel.Result result) { + final String name = call.argument("name"); + final Number value = call.argument("value"); trace.putMetric(name, value.longValue()); result.success(null); } - private void incrementMetric(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String name = (String) args.get("name"); - final Number value = (Number) args.get("value"); + private void incrementMetric(MethodCall call, MethodChannel.Result result) { + final String name = call.argument("name"); + final Number value = call.argument("value"); trace.incrementMetric(name, value.longValue()); result.success(null); } - private void getMetric(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String name = (String) args.get("name"); + private void getMetric(MethodCall call, MethodChannel.Result result) { + final String name = call.argument("name"); result.success(trace.getLongMetric(name)); } - private void putAttribute(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String attribute = (String) args.get("attribute"); - final String value = (String) args.get("value"); + private void putAttribute(MethodCall call, MethodChannel.Result result) { + final String attribute = call.argument("attribute"); + final String value = call.argument("value"); trace.putAttribute(attribute, value); result.success(null); } - private void removeAttribute(Object arguments, MethodChannel.Result result) { - @SuppressWarnings("unchecked") - final Map args = (Map) arguments; - - final String attribute = (String) args.get("attribute"); + private void removeAttribute(MethodCall call, MethodChannel.Result result) { + final String attribute = call.argument("attribute"); trace.removeAttribute(attribute); result.success(null); From 588c7fb01a19b988cc5209f04486f5b4291d99c1 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 23 Apr 2019 12:41:19 -0700 Subject: [PATCH 04/11] Unregister MethodCallHandler --- .../plugins/firebaseperformance/FlutterHttpMetric.java | 4 +++- .../io/flutter/plugins/firebaseperformance/FlutterTrace.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index 2ef6163bc620..0a71239b89fc 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -13,6 +13,7 @@ @SuppressWarnings("ConstantConditions") public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { private final HttpMetric httpMetric; + private final MethodChannel channel; FlutterHttpMetric( FirebasePerformance performance, @@ -25,7 +26,7 @@ public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { this.httpMetric = performance.newHttpMetric(url, httpMethod); - final MethodChannel channel = new MethodChannel(messenger, channelName); + this.channel = new MethodChannel(messenger, channelName); channel.setMethodCallHandler(this); result.success(null); @@ -73,6 +74,7 @@ private void start(MethodChannel.Result result) { private void stop(MethodChannel.Result result) { httpMetric.stop(); + channel.setMethodCallHandler(null); result.success(null); } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java index 566e99c5d179..9b3b4c8f58e2 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -13,6 +13,7 @@ @SuppressWarnings("ConstantConditions") public class FlutterTrace implements MethodChannel.MethodCallHandler { private final Trace trace; + private final MethodChannel channel; FlutterTrace( FirebasePerformance performance, @@ -24,7 +25,7 @@ public class FlutterTrace implements MethodChannel.MethodCallHandler { this.trace = performance.newTrace(traceName); - final MethodChannel channel = new MethodChannel(messenger, channelName); + this.channel = new MethodChannel(messenger, channelName); channel.setMethodCallHandler(this); result.success(null); @@ -69,6 +70,7 @@ private void start(MethodChannel.Result result) { private void stop(MethodChannel.Result result) { trace.stop(); + channel.setMethodCallHandler(null); result.success(null); } From 55d69991a55e53446d3352e9f76e78a5e2c6ac39 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 23 Apr 2019 12:52:06 -0700 Subject: [PATCH 05/11] Parse HttpMethod --- .../FlutterHttpMetric.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index 0a71239b89fc..d3073f37b52f 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -12,6 +12,31 @@ @SuppressWarnings("ConstantConditions") public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { + private static String parseHttpMethod(String httpMethod) { + switch (httpMethod) { + case "HttpMethod.Connect": + return FirebasePerformance.HttpMethod.CONNECT; + case "HttpMethod.Delete": + return FirebasePerformance.HttpMethod.DELETE; + case "HttpMethod.Get": + return FirebasePerformance.HttpMethod.GET; + case "HttpMethod.Head": + return FirebasePerformance.HttpMethod.HEAD; + case "HttpMethod.Options": + return FirebasePerformance.HttpMethod.OPTIONS; + case "HttpMethod.Patch": + return FirebasePerformance.HttpMethod.PATCH; + case "HttpMethod.Post": + return FirebasePerformance.HttpMethod.POST; + case "HttpMethod.Put": + return FirebasePerformance.HttpMethod.PUT; + case "HttpMethod.Trace": + return FirebasePerformance.HttpMethod.TRACE; + default: + throw new IllegalArgumentException(String.format("No HttpMethod for: %s", httpMethod)); + } + } + private final HttpMetric httpMetric; private final MethodChannel channel; @@ -24,7 +49,7 @@ public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { final String url = call.argument("url"); final String httpMethod = call.argument("httpMethod"); - this.httpMetric = performance.newHttpMetric(url, httpMethod); + this.httpMetric = performance.newHttpMetric(url, parseHttpMethod(httpMethod)); this.channel = new MethodChannel(messenger, channelName); channel.setMethodCallHandler(this); From 08d976f2dbef722552286ad3548eb02d28dbf92b Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Tue, 23 Apr 2019 14:39:24 -0700 Subject: [PATCH 06/11] Extra space --- .../flutter/plugins/firebaseperformance/FlutterHttpMetric.java | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index d3073f37b52f..927a94719fea 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -127,7 +127,6 @@ private void setResponsePayloadSize(MethodCall call, MethodChannel.Result result result.success(null); } - private void putAttribute(MethodCall call, MethodChannel.Result result) { final String attribute = call.argument("attribute"); final String value = call.argument("value"); From 353641e9261dbc4aa4f4b6b65605636318aac6e1 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Wed, 24 Apr 2019 12:24:28 -0700 Subject: [PATCH 07/11] Change method name to setMetric --- .../flutter/plugins/firebaseperformance/FlutterTrace.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java index 9b3b4c8f58e2..e544ffbc8c77 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -40,8 +40,8 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { case "Trace#stop": stop(result); break; - case "Trace#putMetric": - putMetric(call, result); + case "Trace#setMetric": + setMetric(call, result); break; case "Trace#incrementMetric": incrementMetric(call, result); @@ -74,7 +74,7 @@ private void stop(MethodChannel.Result result) { result.success(null); } - private void putMetric(MethodCall call, MethodChannel.Result result) { + private void setMetric(MethodCall call, MethodChannel.Result result) { final String name = call.argument("name"); final Number value = call.argument("value"); trace.putMetric(name, value.longValue()); From c07c810b6b5d309ead8d0c96ce951c7df6fa131f Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Mon, 29 Apr 2019 21:58:19 -0700 Subject: [PATCH 08/11] Redesign of flutter plugin objects --- .../FirebasePerformancePlugin.java | 52 +++++++++++++++- .../FlutterFirebasePerformance.java | 59 ++++++++++++++++--- .../FlutterHttpMetric.java | 54 +++-------------- .../firebaseperformance/FlutterTrace.java | 28 +++------ 4 files changed, 117 insertions(+), 76 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java index ad115a499d2f..11748c4162bc 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java @@ -4,15 +4,63 @@ package io.flutter.plugins.firebaseperformance; +import android.util.SparseArray; +import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.PluginRegistry.Registrar; /** FirebasePerformancePlugin */ -public class FirebasePerformancePlugin { +public class FirebasePerformancePlugin implements MethodChannel.MethodCallHandler { private static final String CHANNEL_NAME = "plugins.flutter.io/firebase_performance"; + private static final SparseArray handlers = new SparseArray<>(); + public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME); - channel.setMethodCallHandler(FlutterFirebasePerformance.getInstance(registrar.messenger())); + channel.setMethodCallHandler(new FirebasePerformancePlugin()); + } + + @Override + public void onMethodCall(MethodCall call, MethodChannel.Result result) { + switch (call.method) { + case "FirebasePerformance#instance": + FlutterFirebasePerformance.getInstance(call, result); + break; + case "FirebasePerformance#isPerformanceCollectionEnabled": + case "FirebasePerformance#setPerformanceCollectionEnabled": + case "FirebasePerformance#newTrace": + case "FirebasePerformance#newHttpMetric": + case "Trace#start": + case "Trace#stop": + case "Trace#setMetric": + case "Trace#incrementMetric": + case "Trace#getMetric": + case "PerformanceAttributes#putAttribute": + case "PerformanceAttributes#removeAttribute": + case "PerformanceAttributes#getAttributes": + getHandler(call).onMethodCall(call, result); + break; + default: + result.notImplemented(); + } + } + + static void addHandler(final int handle, final MethodChannel.MethodCallHandler handler) { + if (handlers.get(handle) != null) { + final String message = String.format("Object for handle already exists: %s", handle); + throw new IllegalArgumentException(message); + } + + handlers.put(handle, handler); + } + + static void removeHandler(final int handle) { + handlers.remove(handle); + } + + @SuppressWarnings("ConstantConditions") + private static MethodChannel.MethodCallHandler getHandler(final MethodCall call) { + final Integer handle = call.argument("handle"); + return handlers.get(handle); } } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java index 9e66cf732f50..312363fd46e7 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java @@ -5,20 +5,47 @@ package io.flutter.plugins.firebaseperformance; import com.google.firebase.perf.FirebasePerformance; -import io.flutter.plugin.common.BinaryMessenger; +import com.google.firebase.perf.metrics.HttpMetric; +import com.google.firebase.perf.metrics.Trace; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; public class FlutterFirebasePerformance implements MethodChannel.MethodCallHandler { - private final BinaryMessenger binaryMessenger; + private static String parseHttpMethod(String httpMethod) { + switch (httpMethod) { + case "HttpMethod.Connect": + return FirebasePerformance.HttpMethod.CONNECT; + case "HttpMethod.Delete": + return FirebasePerformance.HttpMethod.DELETE; + case "HttpMethod.Get": + return FirebasePerformance.HttpMethod.GET; + case "HttpMethod.Head": + return FirebasePerformance.HttpMethod.HEAD; + case "HttpMethod.Options": + return FirebasePerformance.HttpMethod.OPTIONS; + case "HttpMethod.Patch": + return FirebasePerformance.HttpMethod.PATCH; + case "HttpMethod.Post": + return FirebasePerformance.HttpMethod.POST; + case "HttpMethod.Put": + return FirebasePerformance.HttpMethod.PUT; + case "HttpMethod.Trace": + return FirebasePerformance.HttpMethod.TRACE; + default: + throw new IllegalArgumentException(String.format("No HttpMethod for: %s", httpMethod)); + } + } + private final FirebasePerformance performance; - static FlutterFirebasePerformance getInstance(BinaryMessenger messenger) { - return new FlutterFirebasePerformance(messenger); + @SuppressWarnings("ConstantConditions") + static void getInstance(MethodCall call, MethodChannel.Result result) { + final Integer handle = call.argument("handle"); + FirebasePerformancePlugin.addHandler(handle, new FlutterFirebasePerformance()); + result.success(null); } - private FlutterFirebasePerformance(BinaryMessenger messenger) { - this.binaryMessenger = messenger; + private FlutterFirebasePerformance() { this.performance = FirebasePerformance.getInstance(); } @@ -52,11 +79,27 @@ private void setPerformanceCollectionEnabled(MethodCall call, MethodChannel.Resu result.success(null); } + @SuppressWarnings("ConstantConditions") private void newTrace(MethodCall call, MethodChannel.Result result) { - new FlutterTrace(performance, binaryMessenger, call, result); + final String name = call.argument("name"); + final Trace trace = performance.newTrace(name); + + final Integer handle = call.argument("handle"); + FirebasePerformancePlugin.addHandler(handle, new FlutterTrace(trace)); + + result.success(null); } + @SuppressWarnings("ConstantConditions") private void newHttpMetric(MethodCall call, MethodChannel.Result result) { - new FlutterHttpMetric(performance, binaryMessenger, call, result); + final String url = call.argument("url"); + final String httpMethod = call.argument("httpMethod"); + + final HttpMetric metric = performance.newHttpMetric(url, parseHttpMethod(httpMethod)); + + final Integer handle = call.argument("handle"); + FirebasePerformancePlugin.addHandler(handle, new FlutterHttpMetric(metric)); + + result.success(null); } } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index 927a94719fea..0fdc99998af4 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -4,57 +4,16 @@ package io.flutter.plugins.firebaseperformance; -import com.google.firebase.perf.FirebasePerformance; import com.google.firebase.perf.metrics.HttpMetric; -import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @SuppressWarnings("ConstantConditions") public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { - private static String parseHttpMethod(String httpMethod) { - switch (httpMethod) { - case "HttpMethod.Connect": - return FirebasePerformance.HttpMethod.CONNECT; - case "HttpMethod.Delete": - return FirebasePerformance.HttpMethod.DELETE; - case "HttpMethod.Get": - return FirebasePerformance.HttpMethod.GET; - case "HttpMethod.Head": - return FirebasePerformance.HttpMethod.HEAD; - case "HttpMethod.Options": - return FirebasePerformance.HttpMethod.OPTIONS; - case "HttpMethod.Patch": - return FirebasePerformance.HttpMethod.PATCH; - case "HttpMethod.Post": - return FirebasePerformance.HttpMethod.POST; - case "HttpMethod.Put": - return FirebasePerformance.HttpMethod.PUT; - case "HttpMethod.Trace": - return FirebasePerformance.HttpMethod.TRACE; - default: - throw new IllegalArgumentException(String.format("No HttpMethod for: %s", httpMethod)); - } - } - private final HttpMetric httpMetric; - private final MethodChannel channel; - - FlutterHttpMetric( - FirebasePerformance performance, - BinaryMessenger messenger, - MethodCall call, - MethodChannel.Result result) { - final String channelName = call.argument("channelName"); - final String url = call.argument("url"); - final String httpMethod = call.argument("httpMethod"); - this.httpMetric = performance.newHttpMetric(url, parseHttpMethod(httpMethod)); - - this.channel = new MethodChannel(messenger, channelName); - channel.setMethodCallHandler(this); - - result.success(null); + FlutterHttpMetric(final HttpMetric metric) { + this.httpMetric = metric; } @Override @@ -64,7 +23,7 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { start(result); break; case "HttpMetric#stop": - stop(result); + stop(call, result); break; case "HttpMetric#httpResponseCode": setHttpResponseCode(call, result); @@ -97,9 +56,12 @@ private void start(MethodChannel.Result result) { result.success(null); } - private void stop(MethodChannel.Result result) { + private void stop(MethodCall call, MethodChannel.Result result) { httpMetric.stop(); - channel.setMethodCallHandler(null); + + final Integer handle = call.argument("handle"); + FirebasePerformancePlugin.removeHandler(handle); + result.success(null); } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java index e544ffbc8c77..63a469cdcd2f 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -4,31 +4,16 @@ package io.flutter.plugins.firebaseperformance; -import com.google.firebase.perf.FirebasePerformance; import com.google.firebase.perf.metrics.Trace; -import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; @SuppressWarnings("ConstantConditions") public class FlutterTrace implements MethodChannel.MethodCallHandler { private final Trace trace; - private final MethodChannel channel; - FlutterTrace( - FirebasePerformance performance, - BinaryMessenger messenger, - MethodCall call, - MethodChannel.Result result) { - final String traceName = call.argument("traceName"); - final String channelName = call.argument("channelName"); - - this.trace = performance.newTrace(traceName); - - this.channel = new MethodChannel(messenger, channelName); - channel.setMethodCallHandler(this); - - result.success(null); + FlutterTrace(final Trace trace) { + this.trace = trace; } @Override @@ -38,7 +23,7 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { start(result); break; case "Trace#stop": - stop(result); + stop(call, result); break; case "Trace#setMetric": setMetric(call, result); @@ -68,9 +53,12 @@ private void start(MethodChannel.Result result) { result.success(null); } - private void stop(MethodChannel.Result result) { + private void stop(MethodCall call, MethodChannel.Result result) { trace.stop(); - channel.setMethodCallHandler(null); + + final Integer handle = call.argument("handle"); + FirebasePerformancePlugin.removeHandler(handle); + result.success(null); } From f9f05b7dc276bc07bf88af69190479145e68f2f1 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Mon, 29 Apr 2019 23:01:53 -0700 Subject: [PATCH 09/11] Fix some method calls --- .../FlutterFirebasePerformance.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java index 312363fd46e7..ce04044a1ea8 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterFirebasePerformance.java @@ -73,9 +73,11 @@ private void isPerformanceCollectionEnabled(MethodChannel.Result result) { result.success(performance.isPerformanceCollectionEnabled()); } + @SuppressWarnings("ConstantConditions") private void setPerformanceCollectionEnabled(MethodCall call, MethodChannel.Result result) { - final boolean enabled = (Boolean) call.arguments; - performance.setPerformanceCollectionEnabled(enabled); + final Boolean enable = call.argument("enable"); + performance.setPerformanceCollectionEnabled(enable); + result.success(null); } @@ -84,7 +86,7 @@ private void newTrace(MethodCall call, MethodChannel.Result result) { final String name = call.argument("name"); final Trace trace = performance.newTrace(name); - final Integer handle = call.argument("handle"); + final Integer handle = call.argument("traceHandle"); FirebasePerformancePlugin.addHandler(handle, new FlutterTrace(trace)); result.success(null); @@ -97,7 +99,7 @@ private void newHttpMetric(MethodCall call, MethodChannel.Result result) { final HttpMetric metric = performance.newHttpMetric(url, parseHttpMethod(httpMethod)); - final Integer handle = call.argument("handle"); + final Integer handle = call.argument("httpMetricHandle"); FirebasePerformancePlugin.addHandler(handle, new FlutterHttpMetric(metric)); result.success(null); From 1a35bde6491705e7c6590c3cb4e834ee3722b09d Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Mon, 29 Apr 2019 23:38:48 -0700 Subject: [PATCH 10/11] Move ConstantConditions and generic handler call --- .../FirebasePerformancePlugin.java | 31 +++++++------------ .../FlutterHttpMetric.java | 7 ++++- .../firebaseperformance/FlutterTrace.java | 7 ++++- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java index 11748c4162bc..99a1d82d06e1 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FirebasePerformancePlugin.java @@ -22,26 +22,16 @@ public static void registerWith(Registrar registrar) { @Override public void onMethodCall(MethodCall call, MethodChannel.Result result) { - switch (call.method) { - case "FirebasePerformance#instance": - FlutterFirebasePerformance.getInstance(call, result); - break; - case "FirebasePerformance#isPerformanceCollectionEnabled": - case "FirebasePerformance#setPerformanceCollectionEnabled": - case "FirebasePerformance#newTrace": - case "FirebasePerformance#newHttpMetric": - case "Trace#start": - case "Trace#stop": - case "Trace#setMetric": - case "Trace#incrementMetric": - case "Trace#getMetric": - case "PerformanceAttributes#putAttribute": - case "PerformanceAttributes#removeAttribute": - case "PerformanceAttributes#getAttributes": - getHandler(call).onMethodCall(call, result); - break; - default: + if (call.method.equals("FirebasePerformance#instance")) { + FlutterFirebasePerformance.getInstance(call, result); + } else { + final MethodChannel.MethodCallHandler handler = getHandler(call); + + if (handler != null) { + handler.onMethodCall(call, result); + } else { result.notImplemented(); + } } } @@ -58,9 +48,10 @@ static void removeHandler(final int handle) { handlers.remove(handle); } - @SuppressWarnings("ConstantConditions") private static MethodChannel.MethodCallHandler getHandler(final MethodCall call) { final Integer handle = call.argument("handle"); + + if (handle == null) return null; return handlers.get(handle); } } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index 0fdc99998af4..a6ff761b0df4 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -8,7 +8,6 @@ import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -@SuppressWarnings("ConstantConditions") public class FlutterHttpMetric implements MethodChannel.MethodCallHandler { private final HttpMetric httpMetric; @@ -56,6 +55,7 @@ private void start(MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void stop(MethodCall call, MethodChannel.Result result) { httpMetric.stop(); @@ -65,12 +65,14 @@ private void stop(MethodCall call, MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void setHttpResponseCode(MethodCall call, MethodChannel.Result result) { final Integer httpResponseCode = call.argument("httpResponseCode"); httpMetric.setHttpResponseCode(httpResponseCode); result.success(null); } + @SuppressWarnings("ConstantConditions") private void setRequestPayloadSize(MethodCall call, MethodChannel.Result result) { final Number payloadSize = call.argument("requestPayloadSize"); httpMetric.setRequestPayloadSize(payloadSize.longValue()); @@ -83,12 +85,14 @@ private void setResponseContentType(MethodCall call, MethodChannel.Result result result.success(null); } + @SuppressWarnings("ConstantConditions") private void setResponsePayloadSize(MethodCall call, MethodChannel.Result result) { final Number payloadSize = call.argument("responsePayloadSize"); httpMetric.setResponsePayloadSize(payloadSize.longValue()); result.success(null); } + @SuppressWarnings("ConstantConditions") private void putAttribute(MethodCall call, MethodChannel.Result result) { final String attribute = call.argument("attribute"); final String value = call.argument("value"); @@ -98,6 +102,7 @@ private void putAttribute(MethodCall call, MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void removeAttribute(MethodCall call, MethodChannel.Result result) { final String attribute = call.argument("attribute"); httpMetric.removeAttribute(attribute); diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java index 63a469cdcd2f..b9e2fa3fbc6b 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -8,7 +8,6 @@ import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; -@SuppressWarnings("ConstantConditions") public class FlutterTrace implements MethodChannel.MethodCallHandler { private final Trace trace; @@ -53,6 +52,7 @@ private void start(MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void stop(MethodCall call, MethodChannel.Result result) { trace.stop(); @@ -62,6 +62,7 @@ private void stop(MethodCall call, MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void setMetric(MethodCall call, MethodChannel.Result result) { final String name = call.argument("name"); final Number value = call.argument("value"); @@ -70,6 +71,7 @@ private void setMetric(MethodCall call, MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void incrementMetric(MethodCall call, MethodChannel.Result result) { final String name = call.argument("name"); final Number value = call.argument("value"); @@ -78,12 +80,14 @@ private void incrementMetric(MethodCall call, MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void getMetric(MethodCall call, MethodChannel.Result result) { final String name = call.argument("name"); result.success(trace.getLongMetric(name)); } + @SuppressWarnings("ConstantConditions") private void putAttribute(MethodCall call, MethodChannel.Result result) { final String attribute = call.argument("attribute"); final String value = call.argument("value"); @@ -93,6 +97,7 @@ private void putAttribute(MethodCall call, MethodChannel.Result result) { result.success(null); } + @SuppressWarnings("ConstantConditions") private void removeAttribute(MethodCall call, MethodChannel.Result result) { final String attribute = call.argument("attribute"); trace.removeAttribute(attribute); From 2a3f0b2b45f82712dc70c4d0663366cf9753c804 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Wed, 1 May 2019 13:57:53 -0700 Subject: [PATCH 11/11] attribute to name --- .../plugins/firebaseperformance/FlutterHttpMetric.java | 8 ++++---- .../flutter/plugins/firebaseperformance/FlutterTrace.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java index a6ff761b0df4..2e2f2e6e4ed3 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterHttpMetric.java @@ -94,18 +94,18 @@ private void setResponsePayloadSize(MethodCall call, MethodChannel.Result result @SuppressWarnings("ConstantConditions") private void putAttribute(MethodCall call, MethodChannel.Result result) { - final String attribute = call.argument("attribute"); + final String name = call.argument("name"); final String value = call.argument("value"); - httpMetric.putAttribute(attribute, value); + httpMetric.putAttribute(name, value); result.success(null); } @SuppressWarnings("ConstantConditions") private void removeAttribute(MethodCall call, MethodChannel.Result result) { - final String attribute = call.argument("attribute"); - httpMetric.removeAttribute(attribute); + final String name = call.argument("name"); + httpMetric.removeAttribute(name); result.success(null); } diff --git a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java index b9e2fa3fbc6b..0bcb54f34834 100644 --- a/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java +++ b/packages/firebase_performance/android/src/main/java/io/flutter/plugins/firebaseperformance/FlutterTrace.java @@ -89,18 +89,18 @@ private void getMetric(MethodCall call, MethodChannel.Result result) { @SuppressWarnings("ConstantConditions") private void putAttribute(MethodCall call, MethodChannel.Result result) { - final String attribute = call.argument("attribute"); + final String name = call.argument("name"); final String value = call.argument("value"); - trace.putAttribute(attribute, value); + trace.putAttribute(name, value); result.success(null); } @SuppressWarnings("ConstantConditions") private void removeAttribute(MethodCall call, MethodChannel.Result result) { - final String attribute = call.argument("attribute"); - trace.removeAttribute(attribute); + final String name = call.argument("name"); + trace.removeAttribute(name); result.success(null); }