1395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck/* 2395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * Copyright (C) 2016 The Android Open Source Project 3395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * 4395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * you may not use this file except in compliance with the License. 6395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * You may obtain a copy of the License at 7395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * 8395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * http://www.apache.org/licenses/LICENSE-2.0 9395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * 10395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * Unless required by applicable law or agreed to in writing, software 11395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * distributed under the License is distributed on an "AS IS" BASIS, 12395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * See the License for the specific language governing permissions and 14395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck * limitations under the License. 15395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck */ 16395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck 17395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckpackage android.graphics.perftests; 18395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck 192cbbd8d3ab8de2937ffff753311876c786176b1bChris Craikimport android.graphics.Outline; 20395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckimport android.perftests.utils.BenchmarkState; 21395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckimport android.perftests.utils.PerfStatusReporter; 22395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckimport android.support.test.filters.LargeTest; 232cbbd8d3ab8de2937ffff753311876c786176b1bChris Craikimport android.view.DisplayListCanvas; 24395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckimport android.view.RenderNode; 25395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck 26395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckimport org.junit.Rule; 27395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckimport org.junit.Test; 28395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck 292cbbd8d3ab8de2937ffff753311876c786176b1bChris Craikimport java.util.ArrayList; 302cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik 31395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck@LargeTest 32395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reckpublic class RenderNodePerfTest { 33395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck @Rule 34395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter(); 35395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck 36395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck @Test 37395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck public void testMeasureRenderNodeJniOverhead() { 383acf0382da22cda88234e599cd81b1ff5441cc35John Reck final RenderNode node = RenderNode.create("benchmark", null); 393acf0382da22cda88234e599cd81b1ff5441cc35John Reck final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 40395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck 41395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck while (state.keepRunning()) { 42395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck node.setTranslationX(1.0f); 43395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck } 44395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck } 453acf0382da22cda88234e599cd81b1ff5441cc35John Reck 463acf0382da22cda88234e599cd81b1ff5441cc35John Reck @Test 473acf0382da22cda88234e599cd81b1ff5441cc35John Reck public void testCreateRenderNodeNoName() { 483acf0382da22cda88234e599cd81b1ff5441cc35John Reck final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 493acf0382da22cda88234e599cd81b1ff5441cc35John Reck while (state.keepRunning()) { 503acf0382da22cda88234e599cd81b1ff5441cc35John Reck RenderNode node = RenderNode.create(null, null); 513acf0382da22cda88234e599cd81b1ff5441cc35John Reck node.destroy(); 523acf0382da22cda88234e599cd81b1ff5441cc35John Reck } 533acf0382da22cda88234e599cd81b1ff5441cc35John Reck } 543acf0382da22cda88234e599cd81b1ff5441cc35John Reck 553acf0382da22cda88234e599cd81b1ff5441cc35John Reck @Test 563acf0382da22cda88234e599cd81b1ff5441cc35John Reck public void testCreateRenderNode() { 573acf0382da22cda88234e599cd81b1ff5441cc35John Reck final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 583acf0382da22cda88234e599cd81b1ff5441cc35John Reck while (state.keepRunning()) { 593acf0382da22cda88234e599cd81b1ff5441cc35John Reck RenderNode node = RenderNode.create("LinearLayout", null); 603acf0382da22cda88234e599cd81b1ff5441cc35John Reck node.destroy(); 613acf0382da22cda88234e599cd81b1ff5441cc35John Reck } 623acf0382da22cda88234e599cd81b1ff5441cc35John Reck } 633acf0382da22cda88234e599cd81b1ff5441cc35John Reck 643acf0382da22cda88234e599cd81b1ff5441cc35John Reck @Test 653acf0382da22cda88234e599cd81b1ff5441cc35John Reck public void testIsValid() { 663acf0382da22cda88234e599cd81b1ff5441cc35John Reck final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 673acf0382da22cda88234e599cd81b1ff5441cc35John Reck RenderNode node = RenderNode.create("LinearLayout", null); 683acf0382da22cda88234e599cd81b1ff5441cc35John Reck while (state.keepRunning()) { 693acf0382da22cda88234e599cd81b1ff5441cc35John Reck node.isValid(); 703acf0382da22cda88234e599cd81b1ff5441cc35John Reck } 713acf0382da22cda88234e599cd81b1ff5441cc35John Reck } 722cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik 732cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik @Test 742cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik public void testStartEnd() { 752cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 762cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik RenderNode node = RenderNode.create("LinearLayout", null); 772cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik while (state.keepRunning()) { 782cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik DisplayListCanvas canvas = node.start(100, 100); 792cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik node.end(canvas); 802cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 812cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 822cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik 832cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik @Test 842cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik public void testStartEndDeepHierarchy() { 852cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 862cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik RenderNode[] nodes = new RenderNode[30]; 872cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik DisplayListCanvas[] canvases = new DisplayListCanvas[nodes.length]; 882cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik for (int i = 0; i < nodes.length; i++) { 892cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik nodes[i] = RenderNode.create("LinearLayout", null); 902cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 912cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik 922cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik while (state.keepRunning()) { 932cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik for (int i = 0; i < nodes.length; i++) { 942cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik canvases[i] = nodes[i].start(100, 100); 952cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 962cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik for (int i = nodes.length - 1; i >= 0; i--) { 972cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik nodes[i].end(canvases[i]); 982cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 992cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 1002cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 1012cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik 1022cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik @Test 1032cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik public void testHasIdentityMatrix() { 1042cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 1052cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik RenderNode node = RenderNode.create("LinearLayout", null); 1062cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik while (state.keepRunning()) { 1072cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik node.hasIdentityMatrix(); 1082cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 1092cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 1102cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik 1112cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik @Test 1122cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik public void testSetOutline() { 1132cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); 1142cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik RenderNode node = RenderNode.create("LinearLayout", null); 1152cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik Outline a = new Outline(); 1162cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik a.setRoundRect(0, 0, 100, 100, 10); 1172cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik Outline b = new Outline(); 1182cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik b.setRect(50, 50, 150, 150); 1192cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik b.setAlpha(0.5f); 1202cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik 1212cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik while (state.keepRunning()) { 1222cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik node.setOutline(a); 1232cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik node.setOutline(b); 1242cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 1252cbbd8d3ab8de2937ffff753311876c786176b1bChris Craik } 126395e9b8db245f7638c1c79e97d8ee56be91614dbJohn Reck} 127