diff options
| author | Chester Hsieh <dunno@google.com> | 2018-07-20 17:16:34 -0700 |
|---|---|---|
| committer | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-08-01 18:17:01 +0000 |
| commit | a7897dc5cd877d0c013d57539bd28b0b6bd0e8bd (patch) | |
| tree | 4c4b38d93b8a9a622b5db07c7ebd1b8da03fc461 /swingp/testSrc | |
| parent | 3ee15764217207438223d3214d01e95f4c6e2019 (diff) | |
| download | platform_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.java | 34 | ||||
| -rw-r--r-- | swingp/testSrc/com/android/tools/swingp/RenderStatsManagerTest.java | 96 |
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); + } + } +} |
