aboutsummaryrefslogtreecommitdiffstats
path: root/swingp/testSrc
diff options
context:
space:
mode:
authorChester Hsieh <dunno@google.com>2018-07-20 17:16:34 -0700
committerTreeHugger Robot <treehugger-gerrit@google.com>2018-08-01 18:17:01 +0000
commita7897dc5cd877d0c013d57539bd28b0b6bd0e8bd (patch)
tree4c4b38d93b8a9a622b5db07c7ebd1b8da03fc461 /swingp/testSrc
parent3ee15764217207438223d3214d01e95f4c6e2019 (diff)
downloadplatform_tools_adt_idea-a7897dc5cd877d0c013d57539bd28b0b6bd0e8bd.tar.gz
platform_tools_adt_idea-a7897dc5cd877d0c013d57539bd28b0b6bd0e8bd.tar.bz2
platform_tools_adt_idea-a7897dc5cd877d0c013d57539bd28b0b6bd0e8bd.zip
Adds JSON serializers for swingp stats.
This CL adds JSON serialization of captured Swing rendering stats using the GSON library. The serialized JSON can eventually be read by, say, a browser, and replay what was captured by swingp. Change-Id: I33f1483f0e1eba6dc4965f3efb2b7d4c8bc1cd46 Test: Added tests for serialization and main serialized stat getter. Bug: 80499904
Diffstat (limited to 'swingp/testSrc')
-rw-r--r--swingp/testSrc/com/android/tools/swingp/MethodStatTest.java34
-rw-r--r--swingp/testSrc/com/android/tools/swingp/RenderStatsManagerTest.java96
2 files changed, 118 insertions, 12 deletions
diff --git a/swingp/testSrc/com/android/tools/swingp/MethodStatTest.java b/swingp/testSrc/com/android/tools/swingp/MethodStatTest.java
index 53a9afb8ae4..0438d81dc6f 100644
--- a/swingp/testSrc/com/android/tools/swingp/MethodStatTest.java
+++ b/swingp/testSrc/com/android/tools/swingp/MethodStatTest.java
@@ -16,31 +16,41 @@
package com.android.tools.swingp;
import org.jetbrains.annotations.NotNull;
-import org.junit.After;
-import org.junit.Before;
+import com.google.common.truth.Truth;
+import com.google.gson.JsonArray;
import org.junit.Test;
public class MethodStatTest {
- @Before
- public void before() {
- RenderStatsManager.setIsEnabled(true);
- }
-
- @After
- public void after() {
- RenderStatsManager.setIsEnabled(false);
- }
-
@Test(expected = RuntimeException.class)
public void catchesDoubleEnd() {
+ RenderStatsManager.setIsEnabled(true);
BadTestClass bad = new BadTestClass();
bad.doubleBad();
+ RenderStatsManager.setIsEnabled(false);
}
@Test
public void methodStatEndsCorrect() {
+ RenderStatsManager.setIsEnabled(true);
TestClass good = new TestClass();
good.foo();
+ RenderStatsManager.setIsEnabled(false);
+ }
+
+ @Test
+ public void arraySerializesCorrectly() {
+ int[] intArray = {5, 7};
+ JsonArray jsonIntArray = SerializationHelpers.arrayToJsonArray(intArray);
+ Truth.assertThat(jsonIntArray.size()).isEqualTo(2);
+ Truth.assertThat(jsonIntArray.get(0).getAsInt()).isEqualTo(intArray[0]);
+ Truth.assertThat(jsonIntArray.get(1).getAsInt()).isEqualTo(intArray[1]);
+
+ double[] doubleArray = {3.5, 9.5, 11};
+ JsonArray jsonDoubleArray = SerializationHelpers.arrayToJsonArray(doubleArray);
+ Truth.assertThat(jsonDoubleArray.size()).isEqualTo(3);
+ Truth.assertThat(jsonDoubleArray.get(0).getAsDouble()).isEqualTo(doubleArray[0]);
+ Truth.assertThat(jsonDoubleArray.get(1).getAsDouble()).isEqualTo(doubleArray[1]);
+ Truth.assertThat(jsonDoubleArray.get(2).getAsDouble()).isEqualTo(doubleArray[2]);
}
/**
diff --git a/swingp/testSrc/com/android/tools/swingp/RenderStatsManagerTest.java b/swingp/testSrc/com/android/tools/swingp/RenderStatsManagerTest.java
new file mode 100644
index 00000000000..8e10fceb063
--- /dev/null
+++ b/swingp/testSrc/com/android/tools/swingp/RenderStatsManagerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.tools.swingp;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+import com.google.gson.JsonObject;
+import org.jetbrains.annotations.NotNull;
+import org.junit.Test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import static com.google.common.truth.Truth.assertThat;
+
+public class RenderStatsManagerTest {
+ @Test
+ public void getsNullForEmptyOrDisabled() {
+ // Ensure empty stats returns JsonNull.
+ assertThat(RenderStatsManager.getJson()).isSameAs(JsonNull.INSTANCE);
+
+ // Ensure JsonNull is returned when the system is disabled.
+ MethodStat fakeStat = new TestMethodStat(this);
+ fakeStat.endMethod();
+ assertThat(RenderStatsManager.getJson()).isSameAs(JsonNull.INSTANCE);
+ }
+
+ @Test
+ public void getsCorrectThreads() throws InterruptedException {
+ RenderStatsManager.setIsEnabled(true);
+
+ MethodStat fakeStat = new TestMethodStat(this);
+ fakeStat.endMethod();
+
+ String separateThreadName = "Separate Thread";
+ Thread separateThread = new Thread(separateThreadName) {
+ @Override
+ public void run() {
+ super.run();
+
+ MethodStat separateStat = new TestMethodStat(this);
+ separateStat.endMethod();
+ }
+ };
+ separateThread.start();
+ separateThread.join();
+
+ JsonElement element = RenderStatsManager.getJson();
+ assertThat(element).isNotSameAs(JsonNull.INSTANCE);
+ assertThat(element.isJsonArray()).isTrue();
+
+ JsonArray root = (JsonArray)element;
+ assertThat(root.size()).isEqualTo(2);
+
+ assertThat(root.get(0).isJsonObject()).isTrue();
+ JsonElement currentThreadElement = ((JsonObject)root.get(0)).get("__tName");
+ assertThat(currentThreadElement.isJsonPrimitive()).isTrue();
+
+ assertThat(root.get(1).isJsonObject()).isTrue();
+ JsonElement separateThreadElement = ((JsonObject)root.get(1)).get("__tName");
+ assertThat(separateThreadElement.isJsonPrimitive()).isTrue();
+
+ Set<String> threadNames = new HashSet<>();
+ threadNames.add(currentThreadElement.getAsString());
+ threadNames.add(separateThreadElement.getAsString());
+ assertThat(threadNames).containsExactly(Thread.currentThread().getName(), separateThreadName);
+
+ // Ensure there are no leftovers.
+ assertThat(RenderStatsManager.getJson()).isSameAs(JsonNull.INSTANCE);
+
+ RenderStatsManager.setIsEnabled(false);
+ }
+
+ /**
+ * Trivial extension of {@link MethodStat} (since it's abstract) to test its implementation.
+ */
+ private static final class TestMethodStat extends MethodStat {
+ public TestMethodStat(@NotNull Object owner) {
+ super(owner);
+ }
+ }
+}