Add basic appcompat view inflation test.
Test: ran the benchmark locally
Change-Id: I2e59084cdd745a1fc7e2bbe49c7ed1a947203772
diff --git a/appcompat/benchmark/build.gradle b/appcompat/benchmark/build.gradle
new file mode 100644
index 0000000..21e4797
--- /dev/null
+++ b/appcompat/benchmark/build.gradle
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2019 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.
+ */
+import static androidx.build.dependencies.DependenciesKt.*
+import androidx.build.LibraryGroups
+import androidx.build.LibraryVersions
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.library")
+ id("kotlin-android")
+}
+
+dependencies {
+ androidTestImplementation(project(":appcompat"))
+ androidTestImplementation(project(":benchmark"))
+ androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
+ androidTestImplementation(ANDROIDX_TEST_CORE)
+ androidTestImplementation(ANDROIDX_TEST_RUNNER)
+ androidTestImplementation(ANDROIDX_TEST_RULES)
+ androidTestImplementation(KOTLIN_STDLIB)
+}
diff --git a/appcompat/benchmark/src/androidTest/AndroidManifest.xml b/appcompat/benchmark/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..1302397
--- /dev/null
+++ b/appcompat/benchmark/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2019 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.
+ -->
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="androidx.appcompat.benchmark.test">
+
+ <!-- Important: disable debuggable for accurate performance results -->
+ <application
+ android:debuggable="false"
+ tools:replace="android:debuggable">
+ <activity android:name="androidx.appcompat.app.AppCompatActivity"
+ android:theme="@style/Theme.AppCompat"/>
+ </application>
+</manifest>
diff --git a/appcompat/benchmark/src/androidTest/java/androidx/appcompat/benchmark/ViewInflationBenchmark.kt b/appcompat/benchmark/src/androidTest/java/androidx/appcompat/benchmark/ViewInflationBenchmark.kt
new file mode 100644
index 0000000..7976411
--- /dev/null
+++ b/appcompat/benchmark/src/androidTest/java/androidx/appcompat/benchmark/ViewInflationBenchmark.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2019 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 androidx.appcompat.benchmark
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.widget.FrameLayout
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.benchmark.test.R
+import androidx.benchmark.BenchmarkRule
+import androidx.benchmark.measureRepeated
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.rule.ActivityTestRule
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class ViewInflationBenchmark {
+ @get:Rule
+ val benchmarkRule = BenchmarkRule()
+
+ @get:Rule
+ val activityRule = ActivityTestRule(AppCompatActivity::class.java)
+
+ @Test
+ fun testTwelveKeyInflate() {
+ val context: Context = activityRule.activity
+ val inflater = LayoutInflater.from(context)
+ val root = FrameLayout(context)
+ benchmarkRule.measureRepeated {
+ inflater.inflate(R.layout.twelve_key_entry, root, false)
+ }
+ }
+}
\ No newline at end of file
diff --git a/appcompat/benchmark/src/androidTest/res/layout/twelve_key_entry.xml b/appcompat/benchmark/src/androidTest/res/layout/twelve_key_entry.xml
new file mode 100644
index 0000000..c8828c8
--- /dev/null
+++ b/appcompat/benchmark/src/androidTest/res/layout/twelve_key_entry.xml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2019 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.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="64dip"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:orientation="horizontal">
+
+ <Button
+ android:id="@+id/one"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/two"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/three"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="64dip"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:orientation="horizontal">
+
+ <Button
+ android:id="@+id/four"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/five"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/six"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="64dip"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:orientation="horizontal">
+
+ <Button
+ android:id="@+id/seven"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/eight"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/nine"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="64dip"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:orientation="horizontal">
+
+ <Button
+ android:id="@+id/cancel"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:text="@android:string/cancel"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/zero"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/ok"
+ android:layout_width="0sp"
+ android:layout_height="fill_parent"
+ android:layout_marginEnd="2dip"
+ android:layout_marginStart="2dip"
+ android:layout_weight="1"
+ android:text="@android:string/ok"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textStyle="bold" />
+
+ </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/appcompat/benchmark/src/main/AndroidManifest.xml b/appcompat/benchmark/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..70f780e
--- /dev/null
+++ b/appcompat/benchmark/src/main/AndroidManifest.xml
@@ -0,0 +1,18 @@
+<!--
+ ~ Copyright (C) 2019 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="androidx.appcompat.benchmark"/>
diff --git a/settings.gradle b/settings.gradle
index 89fe006..638625e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -41,6 +41,7 @@
includeProject(":animation:testing", "animation/testing")
includeProject(":animation:integration-tests:testapp", "animation/integration-tests/testapp")
includeProject(":appcompat", "appcompat")
+includeProject(":appcompat-benchmark", "appcompat/benchmark")
includeProject(":appcompat:appcompat-resources", "appcompat/resources")
includeProject(":arch:core-common", "arch/core-common")
includeProject(":arch:core-testing", "arch/core-testing")