Loading libs/hwui/tests/common/scenes/SaveLayer2Animation.cpp 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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. */ #include "TestSceneBase.h" #include <string> #include <hwui/Paint.h> #include <minikin/Layout.h> class SaveLayer2Animation; static TestScene::Registrar _SaveLayer(TestScene::Info{ "savelayer2", "Interleaving 20 drawText/drawRect ops with saveLayer" "Tests the clipped saveLayer performance and FBO switching overhead.", TestScene::simpleCreateScene<SaveLayer2Animation> }); class SaveLayer2Animation : public TestScene { public: Paint mBluePaint; Paint mGreenPaint; void createContent(int width, int height, Canvas& canvas) override { canvas.drawColor(SkColorSetARGB(255, 255, 0, 0), SkBlendMode::kSrcOver); SkIRect bounds = SkIRect::MakeWH(width, height); int regions = 20; int smallRectHeight = (bounds.height()/regions); int padding = smallRectHeight / 4; int top = bounds.fTop; mBluePaint.setColor(SkColorSetARGB(255, 0, 0, 255)); mBluePaint.setTextSize(padding); mGreenPaint.setColor(SkColorSetARGB(255, 0, 255, 0)); mGreenPaint.setTextSize(padding); //interleave drawText and drawRect with saveLayer ops for (int i = 0; i < regions; i++, top += smallRectHeight) { canvas.saveLayer(bounds.fLeft, top, bounds.fRight, top + padding, &mBluePaint, SaveFlags::ClipToLayer | SaveFlags::MatrixClip); canvas.drawColor(SkColorSetARGB(255, 255, 255, 0), SkBlendMode::kSrcOver); std::string stri = std::to_string(i); std::string offscreen = "offscreen line " + stri; std::unique_ptr<uint16_t[]> offtext = TestUtils::asciiToUtf16(offscreen.c_str()); canvas.drawText(offtext.get(), 0, offscreen.length(), offscreen.length(), bounds.fLeft, top + padding, minikin::kBidi_Force_LTR, mBluePaint, nullptr); canvas.restore(); canvas.drawRect(bounds.fLeft, top + padding, bounds.fRight, top + smallRectHeight - padding, mBluePaint); std::string onscreen = "onscreen line " + stri; std::unique_ptr<uint16_t[]> ontext = TestUtils::asciiToUtf16(onscreen.c_str()); canvas.drawText(ontext.get(), 0, onscreen.length(), onscreen.length(), bounds.fLeft, top + smallRectHeight - padding, minikin::kBidi_Force_LTR, mGreenPaint, nullptr); } } void doFrame(int frameNr) override { } }; tests/UiBench/AndroidManifest.xml +16 −0 Original line number Diff line number Diff line Loading @@ -99,6 +99,22 @@ <category android:name="com.android.test.uibench.TEST" /> </intent-filter> </activity> <activity android:name=".FadingEdgeListActivity" android:label="General/Fading Edge ListView" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.test.uibench.TEST" /> </intent-filter> </activity> <activity android:name=".SaveLayerInterleaveActivity" android:label="General/SaveLayer Animation" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.test.uibench.TEST" /> </intent-filter> </activity> <activity android:name=".ClippedListActivity" android:label="General/Clipped ListView" Loading tests/UiBench/src/com/android/test/uibench/FadingEdgeListActivity.java 0 → 100644 +37 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.test.uibench; import android.support.v4.app.ListFragment; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import com.android.test.uibench.listview.CompatListActivity; import com.android.test.uibench.listview.FadingEdgeListFragment; public class FadingEdgeListActivity extends CompatListActivity { @Override protected ListAdapter createListAdapter() { return new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, TextUtils.buildSimpleStringList(40)); } @Override protected ListFragment createListFragment() { return (ListFragment)new FadingEdgeListFragment(); } } tests/UiBench/src/com/android/test/uibench/SaveLayerInterleaveActivity.java 0 → 100644 +89 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.test.uibench; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; /** * Test Canvas.saveLayer performance by interleaving drawText/drawRect with saveLayer. * This test will be used to measure if drawing interleaved layers at the beginning of a frame will * decrease FBO switching overhead (this is a future optimization in SkiaGL rendering pipeline). */ public class SaveLayerInterleaveActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setBackgroundDrawable(new Drawable() { private final Paint mBluePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint mGreenPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @Override public void setAlpha(int alpha) { } @Override public int getOpacity() { return PixelFormat.OPAQUE; } @Override public void setColorFilter(ColorFilter colorFilter) { } @Override public void draw(Canvas canvas) { canvas.drawColor(Color.RED); Rect bounds = getBounds(); int regions = 20; int smallRectHeight = (bounds.height()/regions); int padding = smallRectHeight / 4; int top = bounds.top; mBluePaint.setColor(Color.BLUE); mBluePaint.setTextSize(padding); mGreenPaint.setColor(Color.GREEN); mGreenPaint.setTextSize(padding); //interleave drawText and drawRect with saveLayer ops for (int i = 0; i < regions; i++, top += smallRectHeight) { canvas.saveLayer(bounds.left, top, bounds.right, top + padding, mBluePaint); canvas.drawColor(Color.YELLOW); canvas.drawText("offscreen line "+ i, bounds.left, top + padding, mBluePaint); canvas.restore(); Rect partX = new Rect(bounds.left, top + padding, bounds.right,top + smallRectHeight - padding); canvas.drawRect(partX, mBluePaint); canvas.drawText("onscreen line "+ i, bounds.left, top + smallRectHeight - padding, mGreenPaint); } invalidateSelf(); } }); } } tests/UiBench/src/com/android/test/uibench/listview/CompatListActivity.java +5 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,15 @@ public abstract class CompatListActivity extends AppCompatActivity { FragmentManager fm = getSupportFragmentManager(); if (fm.findFragmentById(android.R.id.content) == null) { ListFragment listFragment = new ListFragment(); ListFragment listFragment = createListFragment(); listFragment.setListAdapter(createListAdapter()); fm.beginTransaction().add(android.R.id.content, listFragment).commit(); } } protected abstract ListAdapter createListAdapter(); protected ListFragment createListFragment() { return new ListFragment(); } } Loading
libs/hwui/tests/common/scenes/SaveLayer2Animation.cpp 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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. */ #include "TestSceneBase.h" #include <string> #include <hwui/Paint.h> #include <minikin/Layout.h> class SaveLayer2Animation; static TestScene::Registrar _SaveLayer(TestScene::Info{ "savelayer2", "Interleaving 20 drawText/drawRect ops with saveLayer" "Tests the clipped saveLayer performance and FBO switching overhead.", TestScene::simpleCreateScene<SaveLayer2Animation> }); class SaveLayer2Animation : public TestScene { public: Paint mBluePaint; Paint mGreenPaint; void createContent(int width, int height, Canvas& canvas) override { canvas.drawColor(SkColorSetARGB(255, 255, 0, 0), SkBlendMode::kSrcOver); SkIRect bounds = SkIRect::MakeWH(width, height); int regions = 20; int smallRectHeight = (bounds.height()/regions); int padding = smallRectHeight / 4; int top = bounds.fTop; mBluePaint.setColor(SkColorSetARGB(255, 0, 0, 255)); mBluePaint.setTextSize(padding); mGreenPaint.setColor(SkColorSetARGB(255, 0, 255, 0)); mGreenPaint.setTextSize(padding); //interleave drawText and drawRect with saveLayer ops for (int i = 0; i < regions; i++, top += smallRectHeight) { canvas.saveLayer(bounds.fLeft, top, bounds.fRight, top + padding, &mBluePaint, SaveFlags::ClipToLayer | SaveFlags::MatrixClip); canvas.drawColor(SkColorSetARGB(255, 255, 255, 0), SkBlendMode::kSrcOver); std::string stri = std::to_string(i); std::string offscreen = "offscreen line " + stri; std::unique_ptr<uint16_t[]> offtext = TestUtils::asciiToUtf16(offscreen.c_str()); canvas.drawText(offtext.get(), 0, offscreen.length(), offscreen.length(), bounds.fLeft, top + padding, minikin::kBidi_Force_LTR, mBluePaint, nullptr); canvas.restore(); canvas.drawRect(bounds.fLeft, top + padding, bounds.fRight, top + smallRectHeight - padding, mBluePaint); std::string onscreen = "onscreen line " + stri; std::unique_ptr<uint16_t[]> ontext = TestUtils::asciiToUtf16(onscreen.c_str()); canvas.drawText(ontext.get(), 0, onscreen.length(), onscreen.length(), bounds.fLeft, top + smallRectHeight - padding, minikin::kBidi_Force_LTR, mGreenPaint, nullptr); } } void doFrame(int frameNr) override { } };
tests/UiBench/AndroidManifest.xml +16 −0 Original line number Diff line number Diff line Loading @@ -99,6 +99,22 @@ <category android:name="com.android.test.uibench.TEST" /> </intent-filter> </activity> <activity android:name=".FadingEdgeListActivity" android:label="General/Fading Edge ListView" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.test.uibench.TEST" /> </intent-filter> </activity> <activity android:name=".SaveLayerInterleaveActivity" android:label="General/SaveLayer Animation" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android.test.uibench.TEST" /> </intent-filter> </activity> <activity android:name=".ClippedListActivity" android:label="General/Clipped ListView" Loading
tests/UiBench/src/com/android/test/uibench/FadingEdgeListActivity.java 0 → 100644 +37 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.test.uibench; import android.support.v4.app.ListFragment; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import com.android.test.uibench.listview.CompatListActivity; import com.android.test.uibench.listview.FadingEdgeListFragment; public class FadingEdgeListActivity extends CompatListActivity { @Override protected ListAdapter createListAdapter() { return new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, TextUtils.buildSimpleStringList(40)); } @Override protected ListFragment createListFragment() { return (ListFragment)new FadingEdgeListFragment(); } }
tests/UiBench/src/com/android/test/uibench/SaveLayerInterleaveActivity.java 0 → 100644 +89 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 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.test.uibench; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; /** * Test Canvas.saveLayer performance by interleaving drawText/drawRect with saveLayer. * This test will be used to measure if drawing interleaved layers at the beginning of a frame will * decrease FBO switching overhead (this is a future optimization in SkiaGL rendering pipeline). */ public class SaveLayerInterleaveActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setBackgroundDrawable(new Drawable() { private final Paint mBluePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint mGreenPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @Override public void setAlpha(int alpha) { } @Override public int getOpacity() { return PixelFormat.OPAQUE; } @Override public void setColorFilter(ColorFilter colorFilter) { } @Override public void draw(Canvas canvas) { canvas.drawColor(Color.RED); Rect bounds = getBounds(); int regions = 20; int smallRectHeight = (bounds.height()/regions); int padding = smallRectHeight / 4; int top = bounds.top; mBluePaint.setColor(Color.BLUE); mBluePaint.setTextSize(padding); mGreenPaint.setColor(Color.GREEN); mGreenPaint.setTextSize(padding); //interleave drawText and drawRect with saveLayer ops for (int i = 0; i < regions; i++, top += smallRectHeight) { canvas.saveLayer(bounds.left, top, bounds.right, top + padding, mBluePaint); canvas.drawColor(Color.YELLOW); canvas.drawText("offscreen line "+ i, bounds.left, top + padding, mBluePaint); canvas.restore(); Rect partX = new Rect(bounds.left, top + padding, bounds.right,top + smallRectHeight - padding); canvas.drawRect(partX, mBluePaint); canvas.drawText("onscreen line "+ i, bounds.left, top + smallRectHeight - padding, mGreenPaint); } invalidateSelf(); } }); } }
tests/UiBench/src/com/android/test/uibench/listview/CompatListActivity.java +5 −1 Original line number Diff line number Diff line Loading @@ -29,11 +29,15 @@ public abstract class CompatListActivity extends AppCompatActivity { FragmentManager fm = getSupportFragmentManager(); if (fm.findFragmentById(android.R.id.content) == null) { ListFragment listFragment = new ListFragment(); ListFragment listFragment = createListFragment(); listFragment.setListAdapter(createListAdapter()); fm.beginTransaction().add(android.R.id.content, listFragment).commit(); } } protected abstract ListAdapter createListAdapter(); protected ListFragment createListFragment() { return new ListFragment(); } }