diff options
53 files changed, 328 insertions, 331 deletions
diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java index eed1db032d9f..c742df3b882b 100644 --- a/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java +++ b/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java @@ -17,14 +17,14 @@ package android.graphics.perftests; import android.graphics.Bitmap; -import android.graphics.Color; import android.graphics.Bitmap.Config; +import android.graphics.Color; import android.graphics.Paint; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -43,7 +43,7 @@ public class CanvasPerfTest { RenderNode child = RenderNode.create("child", null); child.setLeftTopRightBottom(50, 50, 100, 100); - DisplayListCanvas canvas = node.start(100, 100); + RecordingCanvas canvas = node.start(100, 100); node.end(canvas); canvas = child.start(50, 50); canvas.drawColor(Color.WHITE); @@ -70,7 +70,7 @@ public class CanvasPerfTest { BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); RenderNode node = RenderNode.create("benchmark", null); - DisplayListCanvas canvas = node.start(100, 100); + RecordingCanvas canvas = node.start(100, 100); node.end(canvas); Bitmap bitmap = Bitmap.createBitmap(80, 80, Config.ARGB_8888); Paint paint = new Paint(); diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java index 3a4fc7206712..f9c375804599 100644 --- a/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java +++ b/apct-tests/perftests/core/src/android/graphics/perftests/OutlinePerfTest.java @@ -20,7 +20,6 @@ import android.graphics.Outline; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java index a283e0664bc6..d18aa51bfcd3 100644 --- a/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java +++ b/apct-tests/perftests/core/src/android/graphics/perftests/RenderNodePerfTest.java @@ -17,17 +17,15 @@ package android.graphics.perftests; import android.graphics.Outline; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; -import java.util.ArrayList; - @LargeTest public class RenderNodePerfTest { @Rule @@ -73,7 +71,7 @@ public class RenderNodePerfTest { final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); RenderNode node = RenderNode.create("LinearLayout", null); while (state.keepRunning()) { - DisplayListCanvas canvas = node.start(100, 100); + RecordingCanvas canvas = node.start(100, 100); node.end(canvas); } } @@ -82,7 +80,7 @@ public class RenderNodePerfTest { public void testStartEndDeepHierarchy() { final BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); RenderNode[] nodes = new RenderNode[30]; - DisplayListCanvas[] canvases = new DisplayListCanvas[nodes.length]; + RecordingCanvas[] canvases = new RecordingCanvas[nodes.length]; for (int i = 0; i < nodes.length; i++) { nodes[i] = RenderNode.create("LinearLayout", null); } diff --git a/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java b/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java index 64f2800ee112..9245c1ba59e4 100644 --- a/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/BoringLayoutCreateDrawPerfTest.java @@ -18,12 +18,12 @@ package android.text; import static android.text.Layout.Alignment.ALIGN_NORMAL; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; import android.text.NonEditableTextGenerator.TextType; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -120,7 +120,7 @@ public class BoringLayoutCreateDrawPerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); final int save = canvas.save(); if (!mCached) Canvas.freeTextLayoutCaches(); state.resumeTiming(); diff --git a/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java b/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java index ad5a34e44997..a7972f59f382 100644 --- a/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/PaintMeasureDrawPerfTest.java @@ -17,11 +17,11 @@ package android.text; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -107,7 +107,7 @@ public class PaintMeasureDrawPerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); final int save = canvas.save(); if (!mCached) Canvas.freeTextLayoutCaches(); state.resumeTiming(); diff --git a/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java b/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java index d98df059e2d3..00a626750c79 100644 --- a/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java +++ b/apct-tests/perftests/core/src/android/text/PrecomputedTextMemoryUsageTest.java @@ -16,32 +16,16 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - -import android.perftests.utils.BenchmarkState; -import android.perftests.utils.PerfStatusReporter; - -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4; - import android.app.Activity; import android.os.Bundle; import android.support.test.InstrumentationRegistry; -import android.content.res.ColorStateList; -import android.graphics.Canvas; -import android.graphics.Typeface; -import android.text.Layout; -import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; +import android.support.test.filters.LargeTest; +import android.support.test.runner.AndroidJUnit4; import org.junit.Before; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import java.nio.CharBuffer; -import java.util.Random; import java.util.Locale; @LargeTest diff --git a/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java b/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java index 1cd0ae13069b..33b1a47413c8 100644 --- a/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/PrecomputedTextPerfTest.java @@ -16,30 +16,16 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; - import android.support.test.filters.LargeTest; import android.support.test.runner.AndroidJUnit4; -import android.content.res.ColorStateList; -import android.graphics.Canvas; -import android.graphics.Typeface; -import android.text.Layout; -import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import java.nio.CharBuffer; -import java.util.Random; - @LargeTest @RunWith(AndroidJUnit4.class) public class PrecomputedTextPerfTest { diff --git a/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java b/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java index deb2b0a74aaa..b40dd6b9dbb7 100644 --- a/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/StaticLayoutCreateDrawPerfTest.java @@ -18,12 +18,12 @@ package android.text; import static android.text.Layout.Alignment.ALIGN_NORMAL; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.filters.LargeTest; import android.text.NonEditableTextGenerator.TextType; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import org.junit.Rule; import org.junit.Test; @@ -119,7 +119,7 @@ public class StaticLayoutCreateDrawPerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); int save = canvas.save(); if (!mCached) Canvas.freeTextLayoutCaches(); state.resumeTiming(); diff --git a/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java b/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java index e1a38a0956d7..e224fa39422c 100644 --- a/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java +++ b/apct-tests/perftests/core/src/android/text/StaticLayoutPerfTest.java @@ -16,30 +16,19 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - +import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; - import android.support.test.filters.LargeTest; import android.support.test.runner.AndroidJUnit4; -import android.content.res.ColorStateList; -import android.graphics.Canvas; -import android.graphics.Typeface; -import android.text.Layout; -import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import java.nio.CharBuffer; -import java.util.Random; - @LargeTest @RunWith(AndroidJUnit4.class) public class StaticLayoutPerfTest { @@ -256,7 +245,7 @@ public class StaticLayoutPerfTest { state.pauseTiming(); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); state.resumeTiming(); layout.draw(c); @@ -272,7 +261,7 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); state.resumeTiming(); layout.draw(c); @@ -288,7 +277,7 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); state.resumeTiming(); layout.draw(c); @@ -304,7 +293,7 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); @@ -321,7 +310,7 @@ public class StaticLayoutPerfTest { final CharSequence text = mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); @@ -339,7 +328,7 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); state.resumeTiming(); layout.draw(c); @@ -356,7 +345,7 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); state.resumeTiming(); layout.draw(c); @@ -373,7 +362,7 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); @@ -391,7 +380,7 @@ public class StaticLayoutPerfTest { mTextUtil.nextRandomParagraph(WORD_LENGTH, NO_STYLE_TEXT), PAINT); final StaticLayout layout = StaticLayout.Builder.obtain(text, 0, text.length(), PAINT, TEXT_WIDTH).build(); - final DisplayListCanvas c = node.start(1200, 200); + final RecordingCanvas c = node.start(1200, 200); Canvas.freeTextLayoutCaches(); state.resumeTiming(); diff --git a/apct-tests/perftests/core/src/android/text/TextPerfUtils.java b/apct-tests/perftests/core/src/android/text/TextPerfUtils.java index aa505b533f26..22e516abe926 100644 --- a/apct-tests/perftests/core/src/android/text/TextPerfUtils.java +++ b/apct-tests/perftests/core/src/android/text/TextPerfUtils.java @@ -16,32 +16,15 @@ package android.text; -import static android.text.TextDirectionHeuristics.LTR; - -import android.perftests.utils.BenchmarkState; -import android.perftests.utils.PerfStatusReporter; - -import android.support.test.filters.LargeTest; -import android.support.test.runner.AndroidJUnit4; - import android.content.res.ColorStateList; -import android.graphics.Canvas; import android.graphics.Typeface; import android.icu.text.UnicodeSet; import android.icu.text.UnicodeSetIterator; -import android.text.Layout; import android.text.style.TextAppearanceSpan; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; import java.nio.CharBuffer; -import java.util.Random; import java.util.ArrayList; +import java.util.Random; public class TextPerfUtils { diff --git a/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java b/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java index 4bbe4049ba35..25cc7078762a 100644 --- a/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java +++ b/apct-tests/perftests/core/src/android/text/TextViewSetTextMeasurePerfTest.java @@ -19,13 +19,13 @@ import static android.view.View.MeasureSpec.AT_MOST; import static android.view.View.MeasureSpec.UNSPECIFIED; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.InstrumentationRegistry; import android.support.test.filters.LargeTest; import android.text.NonEditableTextGenerator.TextType; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import android.widget.TextView; import org.junit.Rule; @@ -128,7 +128,7 @@ public class TextViewSetTextMeasurePerfTest { while (state.keepRunning()) { state.pauseTiming(); - final DisplayListCanvas canvas = node.start(1200, 200); + final RecordingCanvas canvas = node.start(1200, 200); int save = canvas.save(); textView.setTextLocale(Locale.UK); textView.setTextLocale(Locale.US); diff --git a/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java b/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java index dc34b7fe057c..434b8e56dd36 100644 --- a/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java +++ b/apct-tests/perftests/core/src/android/widget/TextViewPrecomputedTextPerfTest.java @@ -16,46 +16,29 @@ package android.widget; -import static android.view.View.MeasureSpec.AT_MOST; -import static android.view.View.MeasureSpec.EXACTLY; -import static android.view.View.MeasureSpec.UNSPECIFIED; +import static android.widget.TextView.UNKNOWN_BORING; import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Typeface; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.perftests.utils.BenchmarkState; import android.perftests.utils.PerfStatusReporter; import android.support.test.InstrumentationRegistry; import android.support.test.filters.LargeTest; import android.support.test.runner.AndroidJUnit4; -import android.text.PrecomputedText; -import android.text.Layout; import android.text.BoringLayout; -import android.text.SpannableStringBuilder; -import android.text.Spanned; +import android.text.Layout; +import android.text.PrecomputedText; import android.text.TextPaint; -import android.text.style.TextAppearanceSpan; -import android.view.LayoutInflater; import android.text.TextPerfUtils; import android.view.View.MeasureSpec; -import android.view.DisplayListCanvas; -import android.view.RenderNode; - -import com.android.perftests.core.R; - -import java.util.Random; -import java.util.Locale; import org.junit.Before; -import org.junit.Test; import org.junit.Rule; +import org.junit.Test; import org.junit.runner.RunWith; -import static org.junit.Assert.assertTrue; - -import static android.widget.TextView.UNKNOWN_BORING; - @LargeTest @RunWith(AndroidJUnit4.class) public class TextViewPrecomputedTextPerfTest { @@ -360,7 +343,7 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.start( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); @@ -386,7 +369,7 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.start( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); @@ -414,7 +397,7 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.start( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); @@ -443,7 +426,7 @@ public class TextViewPrecomputedTextPerfTest { textView.setText(text); textView.measure(width, height); textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight()); - final DisplayListCanvas c = node.start( + final RecordingCanvas c = node.start( textView.getMeasuredWidth(), textView.getMeasuredHeight()); textView.nullLayouts(); Canvas.freeTextLayoutCaches(); diff --git a/config/preloaded-classes b/config/preloaded-classes index 56ca98ff9888..f42e2b0c6846 100644 --- a/config/preloaded-classes +++ b/config/preloaded-classes @@ -3226,7 +3226,7 @@ android.view.DisplayCutout$ParcelableWrapper$1 android.view.DisplayEventReceiver android.view.DisplayInfo android.view.DisplayInfo$1 -android.view.DisplayListCanvas +android.graphics.RecordingCanvas android.view.FallbackEventHandler android.view.FocusFinder android.view.FocusFinder$1 @@ -3304,8 +3304,8 @@ android.view.OrientationEventListener android.view.OrientationEventListener$SensorEventListenerImpl android.view.PointerIcon android.view.PointerIcon$1 -android.view.RenderNode -android.view.RenderNode$NoImagePreloadHolder +android.graphics.RenderNode +android.graphics.RenderNode$NoImagePreloadHolder android.view.RenderNodeAnimator android.view.RenderNodeAnimator$1 android.view.RenderNodeAnimatorSetHelper diff --git a/core/java/android/view/GhostView.java b/core/java/android/view/GhostView.java index fa7b067deb20..98ed21735e62 100644 --- a/core/java/android/view/GhostView.java +++ b/core/java/android/view/GhostView.java @@ -18,6 +18,8 @@ package android.view; import android.annotation.UnsupportedAppUsage; import android.graphics.Canvas; import android.graphics.Matrix; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.widget.FrameLayout; import java.util.ArrayList; @@ -46,8 +48,8 @@ public class GhostView extends View { @Override protected void onDraw(Canvas canvas) { - if (canvas instanceof DisplayListCanvas) { - DisplayListCanvas dlCanvas = (DisplayListCanvas) canvas; + if (canvas instanceof RecordingCanvas) { + RecordingCanvas dlCanvas = (RecordingCanvas) canvas; mView.mRecreateDisplayList = true; RenderNode renderNode = mView.updateDisplayListIfDirty(); if (renderNode.isValid()) { diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java index e48bcfdb7203..9d31bd16b452 100644 --- a/core/java/android/view/RenderNodeAnimator.java +++ b/core/java/android/view/RenderNodeAnimator.java @@ -22,6 +22,8 @@ import android.animation.ValueAnimator; import android.annotation.UnsupportedAppUsage; import android.graphics.CanvasProperty; import android.graphics.Paint; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import android.util.SparseIntArray; import com.android.internal.util.VirtualRefBasePtr; @@ -286,8 +288,8 @@ public class RenderNodeAnimator extends Animator { setTarget(mViewTarget.mRenderNode); } - /** Sets the animation target to the owning view of the DisplayListCanvas */ - public void setTarget(DisplayListCanvas canvas) { + /** Sets the animation target to the owning view of the RecordingCanvas */ + public void setTarget(RecordingCanvas canvas) { setTarget(canvas.mNode); } @@ -405,7 +407,7 @@ public class RenderNodeAnimator extends Animator { return listeners; } - long getNativeAnimator() { + public long getNativeAnimator() { return mNativePtr.get(); } diff --git a/core/java/android/view/RenderNodeAnimatorSetHelper.java b/core/java/android/view/RenderNodeAnimatorSetHelper.java index e1ef05941394..d222e0739fa2 100644 --- a/core/java/android/view/RenderNodeAnimatorSetHelper.java +++ b/core/java/android/view/RenderNodeAnimatorSetHelper.java @@ -16,6 +16,8 @@ package android.view; import android.animation.TimeInterpolator; +import android.graphics.RecordingCanvas; +import android.graphics.RenderNode; import com.android.internal.view.animation.FallbackLUTInterpolator; import com.android.internal.view.animation.NativeInterpolatorFactory; @@ -29,10 +31,12 @@ import com.android.internal.view.animation.NativeInterpolatorFactoryHelper; */ public class RenderNodeAnimatorSetHelper { - public static RenderNode getTarget(DisplayListCanvas recordingCanvas) { + /** checkstyle @hide */ + public static RenderNode getTarget(RecordingCanvas recordingCanvas) { return recordingCanvas.mNode; } + /** checkstyle @hide */ public static long createNativeInterpolator(TimeInterpolator interpolator, long duration) { if (interpolator == null) { diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java index 6fb1bbabddc2..f17a45800aeb 100644 --- a/core/java/android/view/Surface.java +++ b/core/java/android/view/Surface.java @@ -22,7 +22,9 @@ import android.content.res.CompatibilityInfo.Translator; import android.graphics.Canvas; import android.graphics.GraphicBuffer; import android.graphics.Matrix; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.RenderNode; import android.graphics.SurfaceTexture; import android.os.Parcel; import android.os.Parcelable; @@ -889,7 +891,7 @@ public class Surface implements Parcelable { private final class HwuiContext { private final RenderNode mRenderNode; private long mHwuiRenderer; - private DisplayListCanvas mCanvas; + private RecordingCanvas mCanvas; private final boolean mIsWideColorGamut; HwuiContext(boolean isWideColorGamut) { diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index e71182c33c12..67f9399e678a 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -30,6 +30,7 @@ import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.Region; +import android.graphics.RenderNode; import android.os.Build; import android.os.Handler; import android.os.IBinder; diff --git a/core/java/android/view/TextureLayer.java b/core/java/android/view/TextureLayer.java index 35a886fa27a3..d89d634c6a25 100644 --- a/core/java/android/view/TextureLayer.java +++ b/core/java/android/view/TextureLayer.java @@ -31,7 +31,7 @@ import com.android.internal.util.VirtualRefBasePtr; * * @hide */ -final class TextureLayer { +public final class TextureLayer { private ThreadedRenderer mRenderer; private VirtualRefBasePtr mFinalizer; diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 997e48fe61ac..0175ba201dd1 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -23,6 +23,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; +import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.SurfaceTexture; import android.graphics.drawable.Drawable; @@ -343,7 +344,7 @@ public class TextureView extends View { properties (alpha, layer paint) affect all of the content of a TextureView. */ if (canvas.isHardwareAccelerated()) { - DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas; + RecordingCanvas recordingCanvas = (RecordingCanvas) canvas; TextureLayer layer = getTextureLayer(); if (layer != null) { @@ -351,7 +352,7 @@ public class TextureView extends View { applyTransformMatrix(); mLayer.setLayerPaint(mLayerPaint); // ensure layer paint is up to date - displayListCanvas.drawTextureLayer(layer); + recordingCanvas.drawTextureLayer(layer); } } } diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 42690cef9da3..c1ab4d4b895e 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -24,7 +24,9 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Point; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.RenderNode; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; @@ -693,7 +695,7 @@ public final class ThreadedRenderer { updateViewTreeDisplayList(view); if (mRootNodeNeedsUpdate || !mRootNode.isValid()) { - DisplayListCanvas canvas = mRootNode.start(mSurfaceWidth, mSurfaceHeight); + RecordingCanvas canvas = mRootNode.start(mSurfaceWidth, mSurfaceHeight); try { final int saveCount = canvas.save(); canvas.translate(mInsetLeft, mInsetTop); @@ -770,7 +772,7 @@ public final class ThreadedRenderer { * * @param canvas The Canvas used to render the view. */ - void onPreDraw(DisplayListCanvas canvas); + void onPreDraw(RecordingCanvas canvas); /** * Invoked after a view is drawn by a threaded renderer. @@ -778,7 +780,7 @@ public final class ThreadedRenderer { * * @param canvas The Canvas used to render the view. */ - void onPostDraw(DisplayListCanvas canvas); + void onPostDraw(RecordingCanvas canvas); } /** diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index cddd83c45c75..c7249dba79f8 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -57,9 +57,11 @@ import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; +import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; +import android.graphics.RenderNode; import android.graphics.Shader; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; @@ -19213,7 +19215,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int height = mBottom - mTop; int layerType = getLayerType(); - final DisplayListCanvas canvas = renderNode.start(width, height); + final RecordingCanvas canvas = renderNode.start(width, height); try { if (layerType == LAYER_TYPE_SOFTWARE) { @@ -20230,7 +20232,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (!drawingWithDrawingCache) { if (drawingWithRenderNode) { mPrivateFlags &= ~PFLAG_DIRTY_MASK; - ((DisplayListCanvas) canvas).drawRenderNode(renderNode); + ((RecordingCanvas) canvas).drawRenderNode(renderNode); } else { // Fast path for layouts with no backgrounds if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) { @@ -20561,7 +20563,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final RenderNode renderNode = mBackgroundRenderNode; if (renderNode != null && renderNode.isValid()) { setBackgroundRenderNodeProperties(renderNode); - ((DisplayListCanvas) canvas).drawRenderNode(renderNode); + ((RecordingCanvas) canvas).drawRenderNode(renderNode); return; } } @@ -20613,7 +20615,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final Rect bounds = drawable.getBounds(); final int width = bounds.width(); final int height = bounds.height(); - final DisplayListCanvas canvas = renderNode.start(width, height); + final RecordingCanvas canvas = renderNode.start(width, height); // Reverse left/top translation done by drawable canvas, which will // instead be applied by rendernode's LTRB bounds below. This way, the diff --git a/core/java/android/view/ViewAnimationHostBridge.java b/core/java/android/view/ViewAnimationHostBridge.java index 58f555dfa305..e0fae21bbdf6 100644 --- a/core/java/android/view/ViewAnimationHostBridge.java +++ b/core/java/android/view/ViewAnimationHostBridge.java @@ -16,6 +16,8 @@ package android.view; +import android.graphics.RenderNode; + /** * Maps a View to a RenderNode's AnimationHost * diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 8dd03476a2b8..292e933c3f7e 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -23,7 +23,9 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Picture; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.RenderNode; import android.os.Debug; import android.os.Handler; import android.os.RemoteException; @@ -601,7 +603,7 @@ public class ViewDebug { } if (view.isHardwareAccelerated()) { - DisplayListCanvas canvas = node.start(dm.widthPixels, dm.heightPixels); + RecordingCanvas canvas = node.start(dm.widthPixels, dm.heightPixels); try { return profileViewOperation(view, () -> view.draw(canvas)); } finally { diff --git a/core/java/android/view/ViewPropertyAnimator.java b/core/java/android/view/ViewPropertyAnimator.java index e3e2069422fc..a0ab362f3985 100644 --- a/core/java/android/view/ViewPropertyAnimator.java +++ b/core/java/android/view/ViewPropertyAnimator.java @@ -19,6 +19,7 @@ package android.view; import android.animation.Animator; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; +import android.graphics.RenderNode; import java.util.ArrayList; import java.util.HashMap; diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index bef8e8fedfdf..7da31ebe4a17 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -51,8 +51,10 @@ import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.PointF; import android.graphics.PorterDuff; +import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.Region; +import android.graphics.RenderNode; import android.graphics.drawable.Drawable; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager.DisplayListener; @@ -3120,7 +3122,7 @@ public final class ViewRootImpl implements ViewParent, int mHardwareYOffset; @Override - public void onPreDraw(DisplayListCanvas canvas) { + public void onPreDraw(RecordingCanvas canvas) { // If mCurScrollY is not 0 then this influences the hardwareYOffset. The end result is we // can apply offsets that are not handled by anything else, resulting in underdraw as // the View is shifted (thus shifting the window background) exposing unpainted @@ -3134,7 +3136,7 @@ public final class ViewRootImpl implements ViewParent, } @Override - public void onPostDraw(DisplayListCanvas canvas) { + public void onPostDraw(RecordingCanvas canvas) { drawAccessibilityFocusedDrawableIfNeeded(canvas); if (mUseMTRenderer) { for (int i = mWindowCallbacks.size() - 1; i >= 0; i--) { diff --git a/core/java/android/view/WindowCallbacks.java b/core/java/android/view/WindowCallbacks.java index b2dc1e91bdf7..a99730205136 100644 --- a/core/java/android/view/WindowCallbacks.java +++ b/core/java/android/view/WindowCallbacks.java @@ -16,6 +16,7 @@ package android.view; +import android.graphics.RecordingCanvas; import android.graphics.Rect; /** @@ -82,5 +83,5 @@ public interface WindowCallbacks { * * @param canvas The canvas to draw on. */ - void onPostDraw(DisplayListCanvas canvas); + void onPostDraw(RecordingCanvas canvas); } diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java index ba665713fb21..6ab7f66aedd3 100644 --- a/core/java/android/webkit/WebViewDelegate.java +++ b/core/java/android/webkit/WebViewDelegate.java @@ -27,11 +27,11 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.res.Resources; import android.graphics.Canvas; +import android.graphics.RecordingCanvas; import android.os.RemoteException; import android.os.SystemProperties; import android.os.Trace; import android.util.SparseArray; -import android.view.DisplayListCanvas; import android.view.View; import android.view.ViewRootImpl; @@ -107,12 +107,12 @@ public final class WebViewDelegate { * @throws IllegalArgumentException if the canvas is not hardware accelerated */ public void callDrawGlFunction(Canvas canvas, long nativeDrawGLFunctor) { - if (!(canvas instanceof DisplayListCanvas)) { + if (!(canvas instanceof RecordingCanvas)) { // Canvas#isHardwareAccelerated() is only true for subclasses of HardwareCanvas. throw new IllegalArgumentException(canvas.getClass().getName() + " is not a DisplayList canvas"); } - ((DisplayListCanvas) canvas).drawGLFunctor2(nativeDrawGLFunctor, null); + ((RecordingCanvas) canvas).drawGLFunctor2(nativeDrawGLFunctor, null); } /** @@ -129,12 +129,12 @@ public final class WebViewDelegate { */ public void callDrawGlFunction(@NonNull Canvas canvas, long nativeDrawGLFunctor, @Nullable Runnable releasedRunnable) { - if (!(canvas instanceof DisplayListCanvas)) { + if (!(canvas instanceof RecordingCanvas)) { // Canvas#isHardwareAccelerated() is only true for subclasses of HardwareCanvas. throw new IllegalArgumentException(canvas.getClass().getName() + " is not a DisplayList canvas"); } - ((DisplayListCanvas) canvas).drawGLFunctor2(nativeDrawGLFunctor, releasedRunnable); + ((RecordingCanvas) canvas).drawGLFunctor2(nativeDrawGLFunctor, releasedRunnable); } /** diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 8027dd7cdb10..48c164f726bc 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -42,8 +42,10 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.graphics.PointF; +import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.RectF; +import android.graphics.RenderNode; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -83,7 +85,6 @@ import android.view.ActionMode; import android.view.ActionMode.Callback; import android.view.ContextMenu; import android.view.ContextThemeWrapper; -import android.view.DisplayListCanvas; import android.view.DragAndDropPermissions; import android.view.DragEvent; import android.view.Gravity; @@ -93,7 +94,6 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; -import android.view.RenderNode; import android.view.SubMenu; import android.view.View; import android.view.View.DragShadowBuilder; @@ -1941,18 +1941,18 @@ public class Editor { // Rebuild display list if it is invalid if (blockDisplayListIsInvalid) { - final DisplayListCanvas displayListCanvas = blockDisplayList.start( + final RecordingCanvas recordingCanvas = blockDisplayList.start( right - left, bottom - top); try { // drawText is always relative to TextView's origin, this translation // brings this range of text back to the top left corner of the viewport - displayListCanvas.translate(-left, -top); - layout.drawText(displayListCanvas, blockBeginLine, blockEndLine); + recordingCanvas.translate(-left, -top); + layout.drawText(recordingCanvas, blockBeginLine, blockEndLine); mTextRenderNodes[blockIndex].isDirty = false; // No need to untranslate, previous context is popped after // drawDisplayList } finally { - blockDisplayList.end(displayListCanvas); + blockDisplayList.end(recordingCanvas); // Same as drawDisplayList below, handled by our TextView's parent blockDisplayList.setClipToBounds(false); } @@ -1962,7 +1962,7 @@ public class Editor { blockDisplayList.setLeftTopRightBottom(left, top, right, bottom); mTextRenderNodes[blockIndex].needsToBeShifted = false; } - ((DisplayListCanvas) canvas).drawRenderNode(blockDisplayList); + ((RecordingCanvas) canvas).drawRenderNode(blockDisplayList); return startIndexToFindAvailableRenderNode; } diff --git a/core/java/android/widget/Magnifier.java b/core/java/android/widget/Magnifier.java index 16ddd0fc8247..6a3fc0fad4dd 100644 --- a/core/java/android/widget/Magnifier.java +++ b/core/java/android/widget/Magnifier.java @@ -33,15 +33,15 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Point; import android.graphics.PointF; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.RenderNode; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.view.ContextThemeWrapper; import android.view.Display; -import android.view.DisplayListCanvas; import android.view.PixelCopy; -import android.view.RenderNode; import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceHolder; @@ -704,7 +704,7 @@ public final class Magnifier { cornerRadius ); - final DisplayListCanvas canvas = mRenderer.getRootNode().start(width, height); + final RecordingCanvas canvas = mRenderer.getRootNode().start(width, height); try { canvas.insertReorderBarrier(); canvas.drawRenderNode(mBitmapRenderNode); @@ -736,7 +736,7 @@ public final class Magnifier { bitmapRenderNode.setClipToOutline(true); // Create a dummy draw, which will be replaced later with real drawing. - final DisplayListCanvas canvas = bitmapRenderNode.start(mContentWidth, mContentHeight); + final RecordingCanvas canvas = bitmapRenderNode.start(mContentWidth, mContentHeight); try { canvas.drawColor(0xFF00FF00); } finally { @@ -817,7 +817,7 @@ public final class Magnifier { return; } - final DisplayListCanvas canvas = + final RecordingCanvas canvas = mBitmapRenderNode.start(mContentWidth, mContentHeight); try { canvas.drawColor(Color.WHITE); diff --git a/core/java/com/android/internal/policy/BackdropFrameRenderer.java b/core/java/com/android/internal/policy/BackdropFrameRenderer.java index a70209c705c0..f14007bd7ac6 100644 --- a/core/java/com/android/internal/policy/BackdropFrameRenderer.java +++ b/core/java/com/android/internal/policy/BackdropFrameRenderer.java @@ -16,13 +16,13 @@ package com.android.internal.policy; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.RenderNode; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Looper; import android.view.Choreographer; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import android.view.ThreadedRenderer; /** @@ -339,7 +339,7 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame mFrameAndBackdropNode.setLeftTopRightBottom(left, top, left + width, top + height); // Draw the caption and content backdrops in to our render node. - DisplayListCanvas canvas = mFrameAndBackdropNode.start(width, height); + RecordingCanvas canvas = mFrameAndBackdropNode.start(width, height); final Drawable drawable = mUserCaptionBackgroundDrawable != null ? mUserCaptionBackgroundDrawable : mCaptionBackgroundDrawable; @@ -368,7 +368,7 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame if (mSystemBarBackgroundNode == null) { return; } - DisplayListCanvas canvas = mSystemBarBackgroundNode.start(width, height); + RecordingCanvas canvas = mSystemBarBackgroundNode.start(width, height); mSystemBarBackgroundNode.setLeftTopRightBottom(left, top, left + width, top + height); final int topInset = DecorView.getColorViewTopInset(mStableInsets.top, mSystemInsets.top); if (mStatusBarColor != null) { diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index 469726613513..94140ab7f440 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -16,52 +16,60 @@ package com.android.internal.policy; -import android.annotation.Nullable; -import android.annotation.TestApi; -import android.app.WindowConfiguration; -import android.graphics.Outline; -import android.graphics.drawable.InsetDrawable; -import android.graphics.drawable.LayerDrawable; -import android.util.Pair; -import android.view.ViewOutlineProvider; -import android.view.accessibility.AccessibilityNodeInfo; -import com.android.internal.R; -import com.android.internal.policy.PhoneWindow.PanelFeatureState; -import com.android.internal.policy.PhoneWindow.PhoneWindowMenuCallback; -import com.android.internal.view.FloatingActionMode; -import com.android.internal.view.RootViewSurfaceTaker; -import com.android.internal.view.StandaloneActionMode; -import com.android.internal.view.menu.ContextMenuBuilder; -import com.android.internal.view.menu.MenuHelper; -import com.android.internal.widget.ActionBarContextView; -import com.android.internal.widget.BackgroundFallback; -import com.android.internal.widget.DecorCaptionView; -import com.android.internal.widget.FloatingToolbar; +import static android.app.WindowConfiguration.PINNED_WINDOWING_MODE_ELEVATION_IN_DIP; +import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; +import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import static android.content.res.Configuration.ORIENTATION_PORTRAIT; +import static android.os.Build.VERSION_CODES.M; +import static android.os.Build.VERSION_CODES.N; +import static android.view.View.MeasureSpec.AT_MOST; +import static android.view.View.MeasureSpec.EXACTLY; +import static android.view.View.MeasureSpec.getMode; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; +import static android.view.Window.DECOR_CAPTION_SHADE_DARK; +import static android.view.Window.DECOR_CAPTION_SHADE_LIGHT; +import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; +import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; +import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; +import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; +import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; +import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; +import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION; -import java.util.List; +import static com.android.internal.policy.PhoneWindow.FEATURE_OPTIONS_PANEL; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; +import android.annotation.Nullable; +import android.annotation.TestApi; +import android.app.WindowConfiguration; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; +import android.graphics.Outline; import android.graphics.Paint; import android.graphics.PixelFormat; +import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.Region; import android.graphics.Shader; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.InsetDrawable; +import android.graphics.drawable.LayerDrawable; import android.util.DisplayMetrics; import android.util.Log; +import android.util.Pair; import android.util.TypedValue; import android.view.ActionMode; import android.view.ContextThemeWrapper; -import android.view.DisplayListCanvas; import android.view.Gravity; import android.view.InputQueue; import android.view.KeyEvent; @@ -73,6 +81,7 @@ import android.view.MotionEvent; import android.view.ThreadedRenderer; import android.view.View; import android.view.ViewGroup; +import android.view.ViewOutlineProvider; import android.view.ViewStub; import android.view.ViewTreeObserver; import android.view.Window; @@ -81,34 +90,26 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.FrameLayout; import android.widget.PopupWindow; -import static android.app.WindowConfiguration.PINNED_WINDOWING_MODE_ELEVATION_IN_DIP; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; -import static android.content.res.Configuration.ORIENTATION_PORTRAIT; -import static android.os.Build.VERSION_CODES.M; -import static android.os.Build.VERSION_CODES.N; -import static android.view.View.MeasureSpec.AT_MOST; -import static android.view.View.MeasureSpec.EXACTLY; -import static android.view.View.MeasureSpec.getMode; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; -import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; -import static android.view.Window.DECOR_CAPTION_SHADE_DARK; -import static android.view.Window.DECOR_CAPTION_SHADE_LIGHT; -import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; -import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; -import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; -import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; -import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; -import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; -import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; -import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; -import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION; -import static com.android.internal.policy.PhoneWindow.FEATURE_OPTIONS_PANEL; +import com.android.internal.R; +import com.android.internal.policy.PhoneWindow.PanelFeatureState; +import com.android.internal.policy.PhoneWindow.PhoneWindowMenuCallback; +import com.android.internal.view.FloatingActionMode; +import com.android.internal.view.RootViewSurfaceTaker; +import com.android.internal.view.StandaloneActionMode; +import com.android.internal.view.menu.ContextMenuBuilder; +import com.android.internal.view.menu.MenuHelper; +import com.android.internal.widget.ActionBarContextView; +import com.android.internal.widget.BackgroundFallback; +import com.android.internal.widget.DecorCaptionView; +import com.android.internal.widget.FloatingToolbar; + +import java.util.List; /** @hide */ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, WindowCallbacks { @@ -2134,7 +2135,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind } @Override - public void onPostDraw(DisplayListCanvas canvas) { + public void onPostDraw(RecordingCanvas canvas) { drawResizingShadowIfNeeded(canvas); } @@ -2152,7 +2153,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind new float[] { 0f, 0.3f, 1f }, Shader.TileMode.CLAMP)); } - private void drawResizingShadowIfNeeded(DisplayListCanvas canvas) { + private void drawResizingShadowIfNeeded(RecordingCanvas canvas) { if (mResizeMode != RESIZE_MODE_DOCKED_DIVIDER || mWindow.mIsFloating || mWindow.isTranslucent() || mWindow.isShowingWallpaper()) { diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index 9263b579ee02..97896f0f6028 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -24,23 +24,21 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.CanvasProperty; -import android.graphics.drawable.Drawable; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.os.Bundle; import android.os.Debug; import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; -import android.os.UserHandle; -import android.provider.Settings; import android.util.AttributeSet; import android.util.IntArray; import android.util.Log; import android.util.SparseArray; -import android.view.DisplayListCanvas; import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.RenderNodeAnimator; @@ -1131,8 +1129,8 @@ public class LockPatternView extends View { drawCellDrawable(canvas, i, j, cellState.radius, drawLookup[i][j]); } else { if (isHardwareAccelerated() && cellState.hwAnimating) { - DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas; - displayListCanvas.drawCircle(cellState.hwCenterX, cellState.hwCenterY, + RecordingCanvas recordingCanvas = (RecordingCanvas) canvas; + recordingCanvas.drawCircle(cellState.hwCenterX, cellState.hwCenterY, cellState.hwRadius, cellState.hwPaint); } else { drawCircle(canvas, (int) centerX, (int) centerY + translationY, diff --git a/core/jni/android_view_DisplayListCanvas.cpp b/core/jni/android_view_DisplayListCanvas.cpp index 4fdd2bcd4f39..8998cd706dd8 100644 --- a/core/jni/android_view_DisplayListCanvas.cpp +++ b/core/jni/android_view_DisplayListCanvas.cpp @@ -183,7 +183,7 @@ static void android_view_DisplayListCanvas_drawCircleProps(jlong canvasPtr, // JNI Glue // ---------------------------------------------------------------------------- -const char* const kClassPathName = "android/view/DisplayListCanvas"; +const char* const kClassPathName = "android/graphics/RecordingCanvas"; static JNINativeMethod gMethods[] = { diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp index 63b004681df9..bb71a5d4accf 100644 --- a/core/jni/android_view_RenderNode.cpp +++ b/core/jni/android_view_RenderNode.cpp @@ -576,7 +576,7 @@ static void android_view_RenderNode_requestPositionUpdates(JNIEnv* env, jobject, // JNI Glue // ---------------------------------------------------------------------------- -const char* const kClassPathName = "android/view/RenderNode"; +const char* const kClassPathName = "android/graphics/RenderNode"; static const JNINativeMethod gMethods[] = { // ---------------------------------------------------------------------------- @@ -588,7 +588,7 @@ static const JNINativeMethod gMethods[] = { { "nGetDebugSize", "(J)I", (void*) android_view_RenderNode_getDebugSize }, { "nAddAnimator", "(JJ)V", (void*) android_view_RenderNode_addAnimator }, { "nEndAllAnimators", "(J)V", (void*) android_view_RenderNode_endAllAnimators }, - { "nRequestPositionUpdates", "(JLandroid/view/RenderNode$PositionUpdateListener;)V", (void*) android_view_RenderNode_requestPositionUpdates }, + { "nRequestPositionUpdates", "(JLandroid/graphics/RenderNode$PositionUpdateListener;)V", (void*) android_view_RenderNode_requestPositionUpdates }, { "nSetDisplayList", "(JJ)V", (void*) android_view_RenderNode_setDisplayList }, @@ -677,7 +677,7 @@ static const JNINativeMethod gMethods[] = { }; int register_android_view_RenderNode(JNIEnv* env) { - jclass clazz = FindClassOrDie(env, "android/view/RenderNode$PositionUpdateListener"); + jclass clazz = FindClassOrDie(env, "android/graphics/RenderNode$PositionUpdateListener"); gPositionListener_PositionChangedMethod = GetMethodIDOrDie(env, clazz, "positionChanged", "(JIIII)V"); gPositionListener_PositionLostMethod = GetMethodIDOrDie(env, clazz, diff --git a/graphics/java/android/graphics/BaseCanvas.java b/graphics/java/android/graphics/BaseCanvas.java index 0885a05c74f3..a377cc70fb7c 100644 --- a/graphics/java/android/graphics/BaseCanvas.java +++ b/graphics/java/android/graphics/BaseCanvas.java @@ -83,7 +83,7 @@ public abstract class BaseCanvas { // --------------------------------------------------------------------------- // Drawing methods - // These are also implemented in DisplayListCanvas so that we can + // These are also implemented in RecordingCanvas so that we can // selectively apply on them // Everything below here is copy/pasted from Canvas.java // The JNI registration is handled by android_view_Canvas.cpp diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index 9cbbf4ef366f..8760ab6f046d 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -30,8 +30,6 @@ import android.os.StrictMode; import android.os.Trace; import android.util.DisplayMetrics; import android.util.Log; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import android.view.ThreadedRenderer; import dalvik.annotation.optimization.CriticalNative; @@ -1254,7 +1252,7 @@ public final class Bitmap implements Parcelable { node.setLeftTopRightBottom(0, 0, width, height); node.setClipToBounds(false); node.setAllowForceDark(false); - final DisplayListCanvas canvas = node.start(width, height); + final RecordingCanvas canvas = node.start(width, height); if (source.getWidth() != width || source.getHeight() != height) { canvas.scale(width / (float) source.getWidth(), height / (float) source.getHeight()); diff --git a/graphics/java/android/graphics/Picture.java b/graphics/java/android/graphics/Picture.java index f7acb11c8811..f6d801b3ba43 100644 --- a/graphics/java/android/graphics/Picture.java +++ b/graphics/java/android/graphics/Picture.java @@ -17,6 +17,7 @@ package android.graphics; import android.annotation.UnsupportedAppUsage; + import java.io.InputStream; import java.io.OutputStream; @@ -216,7 +217,7 @@ public class Picture { public PictureCanvas(Picture pict, long nativeCanvas) { super(nativeCanvas); mPicture = pict; - // Disable bitmap density scaling. This matches DisplayListCanvas. + // Disable bitmap density scaling. This matches RecordingCanvas. mDensity = 0; } diff --git a/core/java/android/view/DisplayListCanvas.java b/graphics/java/android/graphics/RecordingCanvas.java index 667fab5537c9..7af006b4bdf0 100644 --- a/core/java/android/view/DisplayListCanvas.java +++ b/graphics/java/android/graphics/RecordingCanvas.java @@ -14,47 +14,47 @@ * limitations under the License. */ -package android.view; +package android.graphics; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; -import android.graphics.BaseRecordingCanvas; -import android.graphics.Bitmap; -import android.graphics.CanvasProperty; -import android.graphics.Paint; import android.util.Pools.SynchronizedPool; +import android.view.TextureLayer; import dalvik.annotation.optimization.CriticalNative; import dalvik.annotation.optimization.FastNative; /** * A Canvas implementation that records view system drawing operations for deferred rendering. - * This is intended for use with a DisplayList. This class keeps a list of all the Paint and + * This is intended for use with RenderNode. This class keeps a list of all the Paint and * Bitmap objects that it draws, preventing the backing memory of Bitmaps from being freed while - * the DisplayList is still holding a native reference to the memory. + * the RecordingCanvas is still holding a native reference to the memory. * * @hide */ -public final class DisplayListCanvas extends BaseRecordingCanvas { +public final class RecordingCanvas extends BaseRecordingCanvas { // The recording canvas pool should be large enough to handle a deeply nested // view hierarchy because display lists are generated recursively. private static final int POOL_LIMIT = 25; public static final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 100 MB - private static final SynchronizedPool<DisplayListCanvas> sPool = + private static final SynchronizedPool<RecordingCanvas> sPool = new SynchronizedPool<>(POOL_LIMIT); - RenderNode mNode; + /** + * TODO: Temporarily exposed for RenderNodeAnimator(Set) + * @hide */ + public RenderNode mNode; private int mWidth; private int mHeight; - static DisplayListCanvas obtain(@NonNull RenderNode node, int width, int height) { + static RecordingCanvas obtain(@NonNull RenderNode node, int width, int height) { if (node == null) throw new IllegalArgumentException("node cannot be null"); - DisplayListCanvas canvas = sPool.acquire(); + RecordingCanvas canvas = sPool.acquire(); if (canvas == null) { - canvas = new DisplayListCanvas(node, width, height); + canvas = new RecordingCanvas(node, width, height); } else { nResetDisplayListCanvas(canvas.mNativeCanvasWrapper, node.mNativeRenderNode, width, height); @@ -83,7 +83,7 @@ public final class DisplayListCanvas extends BaseRecordingCanvas { // Constructors /////////////////////////////////////////////////////////////////////////// - private DisplayListCanvas(@NonNull RenderNode node, int width, int height) { + private RecordingCanvas(@NonNull RenderNode node, int width, int height) { super(nCreateDisplayListCanvas(node.mNativeRenderNode, width, height)); mDensity = 0; // disable bitmap density scaling } @@ -95,7 +95,7 @@ public final class DisplayListCanvas extends BaseRecordingCanvas { @Override public void setDensity(int density) { - // drop silently, since DisplayListCanvas doesn't perform density scaling + // drop silently, since RecordingCanvas doesn't perform density scaling } @Override @@ -156,6 +156,8 @@ public final class DisplayListCanvas extends BaseRecordingCanvas { * functionality used by webview for calling into their renderer from our display lists. * * @param drawGLFunction A native function pointer + * + * @hide */ @UnsupportedAppUsage public void callDrawGLFunction2(long drawGLFunction) { @@ -166,13 +168,15 @@ public final class DisplayListCanvas extends BaseRecordingCanvas { * Records the functor specified with the drawGLFunction function pointer. This is * functionality used by webview for calling into their renderer from our display lists. * - * @param drawGLFunction A native function pointer + * @param drawGLFunctor A native function pointer * @param releasedCallback Called when the display list is destroyed, and thus * the functor is no longer referenced by this canvas's display list. * * NOTE: The callback does *not* necessarily mean that there are no longer * any references to the functor, just that the reference from this specific * canvas's display list has been released. + * + * @hide */ @UnsupportedAppUsage public void drawGLFunctor2(long drawGLFunctor, @Nullable Runnable releasedCallback) { @@ -201,8 +205,9 @@ public final class DisplayListCanvas extends BaseRecordingCanvas { * Draws the specified layer onto this canvas. * * @param layer The layer to composite on this canvas + * @hide */ - void drawTextureLayer(TextureLayer layer) { + public void drawTextureLayer(TextureLayer layer) { nDrawTextureLayer(mNativeCanvasWrapper, layer.getLayerHandle()); } @@ -210,6 +215,16 @@ public final class DisplayListCanvas extends BaseRecordingCanvas { // Drawing /////////////////////////////////////////////////////////////////////////// + /** + * Draws a circle + * + * @param cx + * @param cy + * @param radius + * @param paint + * + * @hide + */ @UnsupportedAppUsage public void drawCircle(CanvasProperty<Float> cx, CanvasProperty<Float> cy, CanvasProperty<Float> radius, CanvasProperty<Paint> paint) { @@ -217,6 +232,19 @@ public final class DisplayListCanvas extends BaseRecordingCanvas { radius.getNativeContainer(), paint.getNativeContainer()); } + /** + * Draws a round rect + * + * @param left + * @param top + * @param right + * @param bottom + * @param rx + * @param ry + * @param paint + * + * @hide + */ public void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx, CanvasProperty<Float> ry, CanvasProperty<Paint> paint) { diff --git a/core/java/android/view/RenderNode.java b/graphics/java/android/graphics/RenderNode.java index 8ae912762fdb..60641d82cb65 100644 --- a/core/java/android/view/RenderNode.java +++ b/graphics/java/android/graphics/RenderNode.java @@ -14,16 +14,15 @@ * limitations under the License. */ -package android.view; +package android.graphics; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; -import android.graphics.Matrix; -import android.graphics.Outline; -import android.graphics.Paint; -import android.graphics.Rect; +import android.view.NativeVectorDrawableAnimator; +import android.view.RenderNodeAnimator; +import android.view.View; import dalvik.annotation.optimization.CriticalNative; import dalvik.annotation.optimization.FastNative; @@ -36,7 +35,7 @@ import java.lang.annotation.RetentionPolicy; /** * <p>A display list records a series of graphics related operations and can replay * them later. Display lists are usually built by recording operations on a - * {@link DisplayListCanvas}. Replaying the operations from a display list avoids + * {@link RecordingCanvas}. Replaying the operations from a display list avoids * executing application code on every frame, and is thus much more efficient.</p> * * <p>Display lists are used internally for all views by default, and are not @@ -53,7 +52,7 @@ import java.lang.annotation.RetentionPolicy; * affected paragraph needs to be recorded again.</p> * * <h3>Hardware acceleration</h3> - * <p>Display lists can only be replayed using a {@link DisplayListCanvas}. They are not + * <p>Display lists can only be replayed using a {@link RecordingCanvas}. They are not * supported in software. Always make sure that the {@link android.graphics.Canvas} * you are using to render a display list is hardware accelerated using * {@link android.graphics.Canvas#isHardwareAccelerated()}.</p> @@ -63,7 +62,7 @@ import java.lang.annotation.RetentionPolicy; * ThreadedRenderer renderer = myView.getThreadedRenderer(); * if (renderer != null) { * DisplayList displayList = renderer.createDisplayList(); - * DisplayListCanvas canvas = displayList.start(width, height); + * RecordingCanvas canvas = displayList.start(width, height); * try { * // Draw onto the canvas * // For instance: canvas.drawBitmap(...); @@ -77,7 +76,7 @@ import java.lang.annotation.RetentionPolicy; * <pre class="prettyprint"> * protected void onDraw(Canvas canvas) { * if (canvas.isHardwareAccelerated()) { - * DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas; + * RecordingCanvas displayListCanvas = (RecordingCanvas) canvas; * displayListCanvas.drawDisplayList(mDisplayList); * } * } @@ -102,7 +101,7 @@ import java.lang.annotation.RetentionPolicy; * <pre class="prettyprint"> * private void createDisplayList() { * mDisplayList = DisplayList.create("MyDisplayList"); - * DisplayListCanvas canvas = mDisplayList.start(width, height); + * RecordingCanvas canvas = mDisplayList.start(width, height); * try { * for (Bitmap b : mBitmaps) { * canvas.drawBitmap(b, 0.0f, 0.0f, null); @@ -115,7 +114,7 @@ import java.lang.annotation.RetentionPolicy; * * protected void onDraw(Canvas canvas) { * if (canvas.isHardwareAccelerated()) { - * DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas; + * RecordingCanvas displayListCanvas = (RecordingCanvas) canvas; * displayListCanvas.drawDisplayList(mDisplayList); * } * } @@ -143,10 +142,10 @@ public class RenderNode { RenderNode.class.getClassLoader(), nGetNativeFinalizer(), 1024); } - /** Not for general use; use only if you are ThreadedRenderer or DisplayListCanvas. + /** Not for general use; use only if you are ThreadedRenderer or RecordingCanvas. * @hide */ - final long mNativeRenderNode; + public final long mNativeRenderNode; private final AnimationHost mAnimationHost; private RenderNode(String name, AnimationHost animationHost) { @@ -195,7 +194,7 @@ public class RenderNode { * * @hide */ - interface PositionUpdateListener { + public interface PositionUpdateListener { /** * Called by native by a Rendering Worker thread to update window position @@ -228,7 +227,7 @@ public class RenderNode { * stored in this display list. * * Calling this method will mark the render node invalid until - * {@link #end(DisplayListCanvas)} is called. + * {@link #end(RecordingCanvas)} is called. * Only valid render nodes can be replayed. * * @param width The width of the recording viewport @@ -236,19 +235,19 @@ public class RenderNode { * * @return A canvas to record drawing operations. * - * @see #end(DisplayListCanvas) + * @see #end(RecordingCanvas) * @see #isValid() */ @UnsupportedAppUsage - public DisplayListCanvas start(int width, int height) { - return DisplayListCanvas.obtain(this, width, height); + public RecordingCanvas start(int width, int height) { + return RecordingCanvas.obtain(this, width, height); } /** * Same as {@link #start(int, int)} but with the RenderNode's width & height */ - public DisplayListCanvas start() { - return DisplayListCanvas.obtain(this, + public RecordingCanvas start() { + return RecordingCanvas.obtain(this, nGetWidth(mNativeRenderNode), nGetHeight(mNativeRenderNode)); } @@ -261,7 +260,7 @@ public class RenderNode { * @see #isValid() */ @UnsupportedAppUsage - public void end(DisplayListCanvas canvas) { + public void end(RecordingCanvas canvas) { long displayList = canvas.finishRecording(); nSetDisplayList(mNativeRenderNode, displayList); canvas.recycle(); @@ -292,14 +291,32 @@ public class RenderNode { // Matrix manipulation /////////////////////////////////////////////////////////////////////////// + /** + * Whether or not the RenderNode has an identity transform. This is a faster + * way to do the otherwise equivalent {@link #getMatrix(Matrix)} {@link Matrix#isIdentity()} + * as it doesn't require copying the Matrix first, thus minimizing overhead. + * + * @return true if the RenderNode has an identity transform, false otherwise + */ public boolean hasIdentityMatrix() { return nHasIdentityMatrix(mNativeRenderNode); } + /** + * Gets the current transform matrix + * + * @param outMatrix The matrix to store the transform of the RenderNode + */ public void getMatrix(@NonNull Matrix outMatrix) { nGetTransformMatrix(mNativeRenderNode, outMatrix.native_instance); } + /** + * Gets the current transform inverted. This is a faster way to do the otherwise + * equivalent {@link #getMatrix(Matrix)} followed by {@link Matrix#invert(Matrix)} + * + * @param outMatrix The matrix to store the inverse transform of the RenderNode + */ public void getInverseMatrix(@NonNull Matrix outMatrix) { nGetInverseTransformMatrix(mNativeRenderNode, outMatrix.native_instance); } @@ -308,14 +325,25 @@ public class RenderNode { // RenderProperty Setters /////////////////////////////////////////////////////////////////////////// + /** + * TODO + */ public boolean setLayerType(int layerType) { return nSetLayerType(mNativeRenderNode, layerType); } + /** + * TODO + */ public boolean setLayerPaint(@Nullable Paint paint) { return nSetLayerPaint(mNativeRenderNode, paint != null ? paint.getNativeInstance() : 0); } + /** + * Sets the clip bounds of the RenderNode. + * @param rect the bounds to clip to. If null, the clip bounds are reset + * @return True if the clip bounds changed, false otherwise + */ public boolean setClipBounds(@Nullable Rect rect) { if (rect == null) { return nSetClipBoundsEmpty(mNativeRenderNode); @@ -371,8 +399,10 @@ public class RenderNode { case Outline.MODE_EMPTY: return nSetOutlineEmpty(mNativeRenderNode); case Outline.MODE_ROUND_RECT: - return nSetOutlineRoundRect(mNativeRenderNode, outline.mRect.left, outline.mRect.top, - outline.mRect.right, outline.mRect.bottom, outline.mRadius, outline.mAlpha); + return nSetOutlineRoundRect(mNativeRenderNode, + outline.mRect.left, outline.mRect.top, + outline.mRect.right, outline.mRect.bottom, + outline.mRadius, outline.mAlpha); case Outline.MODE_CONVEX_PATH: return nSetOutlineConvexPath(mNativeRenderNode, outline.mPath.mNativePath, outline.mAlpha); @@ -381,6 +411,9 @@ public class RenderNode { throw new IllegalArgumentException("Unrecognized outline?"); } + /** + * @return True if this RenderNode has a shadow, false otherwise + */ public boolean hasShadow() { return nHasShadow(mNativeRenderNode); } @@ -414,6 +447,11 @@ public class RenderNode { return nSetClipToOutline(mNativeRenderNode, clipToOutline); } + /** + * See {@link #setClipToOutline(boolean)} + * + * @return True if this RenderNode clips to its outline, false otherwise + */ public boolean getClipToOutline() { return nGetClipToOutline(mNativeRenderNode); } @@ -518,10 +556,21 @@ public class RenderNode { return nHasOverlappingRendering(mNativeRenderNode); } + /** + * Sets the base elevation of this RenderNode in pixels + * + * @param lift the elevation in pixels + * @return true if the elevation changed, false if it was the same + */ public boolean setElevation(float lift) { return nSetElevation(mNativeRenderNode, lift); } + /** + * See {@link #setElevation(float)} + * + * @return The RenderNode's current elevation + */ public float getElevation() { return nGetElevation(mNativeRenderNode); } @@ -906,9 +955,12 @@ public class RenderNode { * bit of a kludge. * * @hide */ - interface AnimationHost { + public interface AnimationHost { + /** checkstyle */ void registerAnimatingRenderNode(RenderNode animator); + /** checkstyle */ void registerVectorDrawableAnimator(NativeVectorDrawableAnimator animator); + /** checkstyle */ boolean isAttached(); } diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java index 6c1372ff25b4..789e38c4e650 100644 --- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java @@ -39,7 +39,9 @@ import android.graphics.Insets; import android.graphics.Outline; import android.graphics.PixelFormat; import android.graphics.PorterDuff; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.RenderNode; import android.os.Build; import android.util.ArrayMap; import android.util.AttributeSet; @@ -50,9 +52,7 @@ import android.util.PathParser; import android.util.Property; import android.util.TimeUtils; import android.view.Choreographer; -import android.view.DisplayListCanvas; import android.view.NativeVectorDrawableAnimator; -import android.view.RenderNode; import android.view.RenderNodeAnimatorSetHelper; import android.view.View; @@ -1542,11 +1542,11 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } /** - * Holds a weak reference to the target that was last seen (through the DisplayListCanvas + * Holds a weak reference to the target that was last seen (through the RecordingCanvas * in the last draw call), so that when animator set needs to start, we can add the animator * to the last seen RenderNode target and start right away. */ - protected void recordLastSeenTarget(DisplayListCanvas canvas) { + protected void recordLastSeenTarget(RecordingCanvas canvas) { final RenderNode node = RenderNodeAnimatorSetHelper.getTarget(canvas); mLastSeenTarget = new WeakReference<RenderNode>(node); // Add the animator to the list of animators on every draw @@ -1742,7 +1742,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { @Override public void onDraw(Canvas canvas) { if (canvas.isHardwareAccelerated()) { - recordLastSeenTarget((DisplayListCanvas) canvas); + recordLastSeenTarget((RecordingCanvas) canvas); } } diff --git a/graphics/java/android/graphics/drawable/RippleComponent.java b/graphics/java/android/graphics/drawable/RippleComponent.java index 626bcee9454b..c1f8798faaeb 100644 --- a/graphics/java/android/graphics/drawable/RippleComponent.java +++ b/graphics/java/android/graphics/drawable/RippleComponent.java @@ -16,15 +16,8 @@ package android.graphics.drawable; -import android.animation.Animator; -import android.graphics.Canvas; -import android.graphics.Paint; import android.graphics.Rect; import android.util.DisplayMetrics; -import android.view.DisplayListCanvas; -import android.view.RenderNodeAnimator; - -import java.util.ArrayList; /** * Abstract class that handles size & positioning common to the ripple & focus states. diff --git a/graphics/java/android/graphics/drawable/RippleForeground.java b/graphics/java/android/graphics/drawable/RippleForeground.java index a8dc34af292b..cce9ba31929f 100644 --- a/graphics/java/android/graphics/drawable/RippleForeground.java +++ b/graphics/java/android/graphics/drawable/RippleForeground.java @@ -23,10 +23,10 @@ import android.animation.TimeInterpolator; import android.graphics.Canvas; import android.graphics.CanvasProperty; import android.graphics.Paint; +import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.util.FloatProperty; import android.util.MathUtils; -import android.view.DisplayListCanvas; import android.view.RenderNodeAnimator; import android.view.animation.AnimationUtils; import android.view.animation.LinearInterpolator; @@ -132,7 +132,7 @@ class RippleForeground extends RippleComponent { } } - private void startPending(DisplayListCanvas c) { + private void startPending(RecordingCanvas c) { if (!mPendingHwAnimators.isEmpty()) { for (int i = 0; i < mPendingHwAnimators.size(); i++) { RenderNodeAnimator animator = mPendingHwAnimators.get(i); @@ -164,7 +164,7 @@ class RippleForeground extends RippleComponent { } } - private void drawHardware(DisplayListCanvas c, Paint p) { + private void drawHardware(RecordingCanvas c, Paint p) { startPending(c); pruneHwFinished(); if (mPropPaint != null) { @@ -332,11 +332,11 @@ class RippleForeground extends RippleComponent { * @param p the paint used to draw the ripple */ public void draw(Canvas c, Paint p) { - final boolean hasDisplayListCanvas = !mForceSoftware && c instanceof DisplayListCanvas; + final boolean hasDisplayListCanvas = !mForceSoftware && c instanceof RecordingCanvas; pruneSwFinished(); if (hasDisplayListCanvas) { - final DisplayListCanvas hw = (DisplayListCanvas) c; + final RecordingCanvas hw = (RecordingCanvas) c; drawHardware(hw, p); } else { drawSoftware(c, p); diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowCallbacksCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowCallbacksCompat.java index b2b140e4b0a9..de2a3e44841e 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowCallbacksCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowCallbacksCompat.java @@ -17,7 +17,7 @@ package com.android.systemui.shared.system; import android.graphics.Canvas; import android.graphics.Rect; -import android.view.DisplayListCanvas; +import android.graphics.RecordingCanvas; import android.view.View; import android.view.ViewRootImpl; import android.view.WindowCallbacks; @@ -55,7 +55,7 @@ public class WindowCallbacksCompat { } @Override - public void onPostDraw(DisplayListCanvas canvas) { + public void onPostDraw(RecordingCanvas canvas) { WindowCallbacksCompat.this.onPostDraw(canvas); } }; diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 77f4bf529f21..d8eb96504e79 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -30,7 +30,7 @@ import android.service.wallpaper.WallpaperService; import android.util.Log; import android.view.Display; import android.view.DisplayInfo; -import android.view.DisplayListCanvas; +import android.graphics.RecordingCanvas; import android.view.Surface; import android.view.SurfaceHolder; import android.view.WindowManager; @@ -381,7 +381,7 @@ public class ImageWallpaper extends WallpaperService { try { Bitmap wallpaper = mWallpaperManager.getBitmap(true /* hardware */); if (wallpaper != null - && wallpaper.getByteCount() > DisplayListCanvas.MAX_BITMAP_SIZE) { + && wallpaper.getByteCount() > RecordingCanvas.MAX_BITMAP_SIZE) { throw new RuntimeException("Wallpaper is too large to draw!"); } return wallpaper; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java index e12b57444993..feaf193214c7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardAffordanceView.java @@ -29,9 +29,9 @@ import android.graphics.CanvasProperty; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; +import android.graphics.RecordingCanvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.view.DisplayListCanvas; import android.view.RenderNodeAnimator; import android.view.View; import android.view.ViewAnimationUtils; @@ -192,8 +192,8 @@ public class KeyguardAffordanceView extends ImageView { // Our hardware drawing proparties can be null if the finishing started but we have // never drawn before. In that case we are not doing a render thread animation // anyway, so we need to use the normal drawing. - DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas; - displayListCanvas.drawCircle(mHwCenterX, mHwCenterY, mHwCircleRadius, + RecordingCanvas recordingCanvas = (RecordingCanvas) canvas; + recordingCanvas.drawCircle(mHwCenterX, mHwCenterY, mHwCircleRadius, mHwCirclePaint); } else { updateCircleColor(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java index 8e32a0b44c28..59bd85eaabd4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonRipple.java @@ -27,8 +27,7 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; import android.os.Handler; -import android.os.SystemProperties; -import android.view.DisplayListCanvas; +import android.graphics.RecordingCanvas; import android.view.RenderNodeAnimator; import android.view.View; import android.view.ViewConfiguration; @@ -122,7 +121,7 @@ public class KeyButtonRipple extends Drawable { public void draw(Canvas canvas) { mSupportHardware = canvas.isHardwareAccelerated(); if (mSupportHardware) { - drawHardware((DisplayListCanvas) canvas); + drawHardware((RecordingCanvas) canvas); } else { drawSoftware(canvas); } @@ -147,7 +146,7 @@ public class KeyButtonRipple extends Drawable { return getBounds().width() > getBounds().height(); } - private void drawHardware(DisplayListCanvas c) { + private void drawHardware(RecordingCanvas c) { if (mDrawingHardwareGlow) { c.drawRoundRect(mLeftProp, mTopProp, mRightProp, mBottomProp, mRxProp, mRyProp, mPaintProp); diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index b7507a42485c..ef63b9b70b3b 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -29,13 +29,13 @@ import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.GraphicBuffer; import android.graphics.PixelFormat; +import android.graphics.RecordingCanvas; import android.graphics.Rect; +import android.graphics.RenderNode; import android.os.Environment; import android.os.Handler; import android.util.ArraySet; import android.util.Slog; -import android.view.DisplayListCanvas; -import android.view.RenderNode; import android.view.SurfaceControl; import android.view.ThreadedRenderer; import android.view.WindowManager.LayoutParams; @@ -371,7 +371,7 @@ class TaskSnapshotController { final RenderNode node = RenderNode.create("TaskSnapshotController", null); node.setLeftTopRightBottom(0, 0, width, height); node.setClipToBounds(false); - final DisplayListCanvas c = node.start(width, height); + final RecordingCanvas c = node.start(width, height); c.drawColor(color); decorPainter.setInsets(mainWindow.getContentInsets(), mainWindow.getStableInsets()); decorPainter.drawDecors(c, null /* statusBarExcludeFrame */); diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java index 5bc8934279d6..571f623aea99 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/CirclePropActivity.java @@ -22,9 +22,9 @@ import android.graphics.Canvas; import android.graphics.CanvasProperty; import android.graphics.Paint; import android.graphics.Paint.Style; +import android.graphics.RecordingCanvas; import android.os.Bundle; import android.os.Trace; -import android.view.DisplayListCanvas; import android.view.RenderNodeAnimator; import android.view.View; import android.widget.LinearLayout; @@ -88,8 +88,8 @@ public class CirclePropActivity extends Activity { super.onDraw(canvas); if (canvas.isHardwareAccelerated()) { - DisplayListCanvas displayListCanvas = (DisplayListCanvas) canvas; - displayListCanvas.drawCircle(mX, mY, mRadius, mPaint); + RecordingCanvas recordingCanvas = (RecordingCanvas) canvas; + recordingCanvas.drawCircle(mX, mY, mRadius, mPaint); } } diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/DrawIntoHwBitmapActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/DrawIntoHwBitmapActivity.java index af8e10bc07ae..220016aa8ab7 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/DrawIntoHwBitmapActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/DrawIntoHwBitmapActivity.java @@ -16,25 +16,13 @@ package com.android.test.hwui; -import static android.graphics.GraphicBuffer.USAGE_HW_TEXTURE; -import static android.graphics.GraphicBuffer.USAGE_SW_READ_NEVER; -import static android.graphics.GraphicBuffer.USAGE_SW_WRITE_NEVER; -import static android.graphics.GraphicBuffer.USAGE_SW_WRITE_RARELY; - import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.GraphicBuffer; import android.graphics.Paint; import android.graphics.Picture; -import android.graphics.PixelFormat; -import android.graphics.SurfaceTexture; import android.os.Bundle; -import android.view.DisplayListCanvas; -import android.view.RenderNode; -import android.view.Surface; -import android.view.ThreadedRenderer; import android.widget.ImageView; public class DrawIntoHwBitmapActivity extends Activity { diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java index 7713f5da36ed..e7d7f2b11801 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java @@ -21,12 +21,12 @@ import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; +import android.graphics.RecordingCanvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.view.DisplayListCanvas; import android.view.ThreadedRenderer; -import android.view.RenderNode; +import android.graphics.RenderNode; import android.view.View; import android.view.View.OnClickListener; import android.widget.AbsoluteLayout; @@ -206,7 +206,7 @@ public class MultiProducerActivity extends Activity implements OnClickListener { } // Draw frame - DisplayListCanvas canvas = nodeFrame.start(currentFrameBounds.width(), + RecordingCanvas canvas = nodeFrame.start(currentFrameBounds.width(), currentFrameBounds.height()); mFrameContent.draw(canvas); nodeFrame.end(canvas); @@ -228,7 +228,7 @@ public class MultiProducerActivity extends Activity implements OnClickListener { } // Draw Backdrop - DisplayListCanvas canvas = nodeBack.start(currentBackBounds.width(), + RecordingCanvas canvas = nodeBack.start(currentBackBounds.width(), currentBackBounds.height()); mBackContent.draw(canvas); nodeBack.end(canvas); diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java index be5d7f98783d..4eb40722f6dd 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java @@ -8,9 +8,8 @@ import android.os.Bundle; import android.app.Activity; import android.util.AttributeSet; -import android.view.RenderNode; +import android.graphics.RenderNode; import android.view.View; -import android.widget.LinearLayout; public class ProjectionActivity extends Activity { /** diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java index 2ae960bd08db..9abd7ea5f361 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java @@ -1,13 +1,7 @@ package com.android.test.hwui; import android.app.Activity; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.RectF; import android.os.Bundle; -import android.util.AttributeSet; -import android.view.RenderNode; import android.view.View; public class ProjectionClippingActivity extends Activity { |