Switch Java calls to enableZ and disableZ; remove isRecordingFor
Bug: 155422223 Test: make insertInOrderBarrier and insertReorderBarrier are @hide and deprecated. Remove them and update all callers to enableZ and disableZ, which are already public. Update native code to refer to enableZ instead of insertReorderBarrier. In addition, remove @hide Canvas#isRecordingFor. This method was originally used to prevent a single RenderNode from being in two display lists. This is now supported, so there's no reason to avoid it. The one caller used it to determine whether to reorder drawing its child Views (which, as the comment says, makes sense to determine based on whether the Canvas isHardwareAccelerated) and whether to call insertReorderBarrier/insertInOrderBarrier (now enableZ/disableZ). In the latter case, there is no need for a conditional, since enableZ/disableZ only work on a hardware Canvas. Change-Id: Ib216a19d6aeff40b2e23532bacd62d1795c2ab27
This commit is contained in:
@@ -54,11 +54,11 @@ public class CanvasPerfTest {
|
||||
canvas = node.start(200, 200);
|
||||
int save = canvas.save();
|
||||
canvas.clipRect(1, 1, 199, 199);
|
||||
canvas.insertReorderBarrier();
|
||||
canvas.enableZ();
|
||||
for (int i = 0; i < 5; i++) {
|
||||
canvas.drawRenderNode(child);
|
||||
}
|
||||
canvas.insertInorderBarrier();
|
||||
canvas.disableZ();
|
||||
canvas.restoreToCount(save);
|
||||
node.end(canvas);
|
||||
}
|
||||
|
||||
@@ -54,9 +54,9 @@ public class GhostView extends View {
|
||||
mView.mRecreateDisplayList = true;
|
||||
RenderNode renderNode = mView.updateDisplayListIfDirty();
|
||||
if (renderNode.hasDisplayList()) {
|
||||
dlCanvas.insertReorderBarrier(); // enable shadow for this rendernode
|
||||
dlCanvas.enableZ(); // enable shadow for this rendernode
|
||||
dlCanvas.drawRenderNode(renderNode);
|
||||
dlCanvas.insertInorderBarrier(); // re-disable reordering/shadows
|
||||
dlCanvas.disableZ(); // re-disable reordering/shadows
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4105,13 +4105,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
|
||||
@Override
|
||||
protected void dispatchDraw(Canvas canvas) {
|
||||
boolean usingRenderNodeProperties = canvas.isRecordingFor(mRenderNode);
|
||||
final int childrenCount = mChildrenCount;
|
||||
final View[] children = mChildren;
|
||||
int flags = mGroupFlags;
|
||||
|
||||
if ((flags & FLAG_RUN_ANIMATION) != 0 && canAnimate()) {
|
||||
final boolean buildCache = !isHardwareAccelerated();
|
||||
for (int i = 0; i < childrenCount; i++) {
|
||||
final View child = children[i];
|
||||
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE) {
|
||||
@@ -4152,12 +4150,12 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
boolean more = false;
|
||||
final long drawingTime = getDrawingTime();
|
||||
|
||||
if (usingRenderNodeProperties) canvas.insertReorderBarrier();
|
||||
canvas.enableZ();
|
||||
final int transientCount = mTransientIndices == null ? 0 : mTransientIndices.size();
|
||||
int transientIndex = transientCount != 0 ? 0 : -1;
|
||||
// Only use the preordered list if not HW accelerated, since the HW pipeline will do the
|
||||
// draw reordering internally
|
||||
final ArrayList<View> preorderedList = usingRenderNodeProperties
|
||||
final ArrayList<View> preorderedList = isHardwareAccelerated()
|
||||
? null : buildOrderedChildList();
|
||||
final boolean customOrder = preorderedList == null
|
||||
&& isChildrenDrawingOrderEnabled();
|
||||
@@ -4204,7 +4202,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
|
||||
more |= drawChild(canvas, child, drawingTime);
|
||||
}
|
||||
}
|
||||
if (usingRenderNodeProperties) canvas.insertInorderBarrier();
|
||||
canvas.disableZ();
|
||||
|
||||
if (isShowingLayoutBounds()) {
|
||||
onDebugDraw(canvas);
|
||||
|
||||
@@ -249,11 +249,11 @@ public class ViewOverlay {
|
||||
* This means that we need to insert reorder barriers manually though, so that children
|
||||
* of the OverlayViewGroup can cast shadows and Z reorder with each other.
|
||||
*/
|
||||
canvas.insertReorderBarrier();
|
||||
canvas.enableZ();
|
||||
|
||||
super.dispatchDraw(canvas);
|
||||
|
||||
canvas.insertInorderBarrier();
|
||||
canvas.disableZ();
|
||||
final int numDrawables = (mDrawables == null) ? 0 : mDrawables.size();
|
||||
for (int i = 0; i < numDrawables; ++i) {
|
||||
mDrawables.get(i).draw(canvas);
|
||||
|
||||
@@ -62,9 +62,6 @@ public class Canvas extends BaseCanvas {
|
||||
return mNativeCanvasWrapper;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public boolean isRecordingFor(Object o) { return false; }
|
||||
|
||||
// may be null
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 117521088)
|
||||
private Bitmap mBitmap;
|
||||
@@ -204,22 +201,6 @@ public class Canvas extends BaseCanvas {
|
||||
mBitmap = bitmap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #enableZ()} instead
|
||||
* @hide */
|
||||
@Deprecated
|
||||
public void insertReorderBarrier() {
|
||||
enableZ();
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use {@link #disableZ()} instead
|
||||
* @hide */
|
||||
@Deprecated
|
||||
public void insertInorderBarrier() {
|
||||
disableZ();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Enables Z support which defaults to disabled. This allows for RenderNodes drawn with
|
||||
* {@link #drawRenderNode(RenderNode)} to be re-arranged based off of their
|
||||
|
||||
@@ -80,12 +80,6 @@ public final class RecordingCanvas extends DisplayListCanvas {
|
||||
return nFinishRecording(mNativeCanvasWrapper);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public boolean isRecordingFor(Object o) {
|
||||
return o == mNode;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
@@ -147,12 +141,12 @@ public final class RecordingCanvas extends DisplayListCanvas {
|
||||
|
||||
@Override
|
||||
public void enableZ() {
|
||||
nInsertReorderBarrier(mNativeCanvasWrapper, true);
|
||||
nEnableZ(mNativeCanvasWrapper, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disableZ() {
|
||||
nInsertReorderBarrier(mNativeCanvasWrapper, false);
|
||||
nEnableZ(mNativeCanvasWrapper, false);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
@@ -302,7 +296,7 @@ public final class RecordingCanvas extends DisplayListCanvas {
|
||||
@CriticalNative
|
||||
private static native int nGetMaximumTextureHeight();
|
||||
@CriticalNative
|
||||
private static native void nInsertReorderBarrier(long renderer, boolean enableReorder);
|
||||
private static native void nEnableZ(long renderer, boolean enableZ);
|
||||
@CriticalNative
|
||||
private static native long nFinishRecording(long renderer);
|
||||
@CriticalNative
|
||||
|
||||
@@ -57,8 +57,8 @@ public:
|
||||
LOG_ALWAYS_FATAL("SkiaCanvas does not produce a DisplayList");
|
||||
return nullptr;
|
||||
}
|
||||
virtual void insertReorderBarrier(bool enableReorder) override {
|
||||
LOG_ALWAYS_FATAL("SkiaCanvas does not support reordering barriers");
|
||||
virtual void enableZ(bool enableZ) override {
|
||||
LOG_ALWAYS_FATAL("SkiaCanvas does not support enableZ");
|
||||
}
|
||||
|
||||
virtual void setBitmap(const SkBitmap& bitmap) override;
|
||||
|
||||
@@ -144,7 +144,7 @@ public:
|
||||
virtual void resetRecording(int width, int height,
|
||||
uirenderer::RenderNode* renderNode = nullptr) = 0;
|
||||
virtual uirenderer::DisplayList* finishRecording() = 0;
|
||||
virtual void insertReorderBarrier(bool enableReorder) = 0;
|
||||
virtual void enableZ(bool enableZ) = 0;
|
||||
|
||||
bool isHighContrastText() const { return uirenderer::Properties::enableHighContrastText; }
|
||||
|
||||
|
||||
@@ -124,10 +124,10 @@ static jint android_view_DisplayListCanvas_getMaxTextureSize(CRITICAL_JNI_PARAMS
|
||||
#endif
|
||||
}
|
||||
|
||||
static void android_view_DisplayListCanvas_insertReorderBarrier(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr,
|
||||
static void android_view_DisplayListCanvas_enableZ(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr,
|
||||
jboolean reorderEnable) {
|
||||
Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
|
||||
canvas->insertReorderBarrier(reorderEnable);
|
||||
canvas->enableZ(reorderEnable);
|
||||
}
|
||||
|
||||
static jlong android_view_DisplayListCanvas_finishRecording(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr) {
|
||||
@@ -194,7 +194,7 @@ static JNINativeMethod gMethods[] = {
|
||||
{ "nResetDisplayListCanvas", "(JJII)V", (void*) android_view_DisplayListCanvas_resetDisplayListCanvas },
|
||||
{ "nGetMaximumTextureWidth", "()I", (void*) android_view_DisplayListCanvas_getMaxTextureSize },
|
||||
{ "nGetMaximumTextureHeight", "()I", (void*) android_view_DisplayListCanvas_getMaxTextureSize },
|
||||
{ "nInsertReorderBarrier", "(JZ)V", (void*) android_view_DisplayListCanvas_insertReorderBarrier },
|
||||
{ "nEnableZ", "(JZ)V", (void*) android_view_DisplayListCanvas_enableZ },
|
||||
{ "nFinishRecording", "(J)J", (void*) android_view_DisplayListCanvas_finishRecording },
|
||||
{ "nDrawRenderNode", "(JJ)V", (void*) android_view_DisplayListCanvas_drawRenderNode },
|
||||
{ "nDrawTextureLayer", "(JJ)V", (void*) android_view_DisplayListCanvas_drawTextureLayer },
|
||||
|
||||
@@ -57,7 +57,7 @@ void SkiaRecordingCanvas::initDisplayList(uirenderer::RenderNode* renderNode, in
|
||||
|
||||
uirenderer::DisplayList* SkiaRecordingCanvas::finishRecording() {
|
||||
// close any existing chunks if necessary
|
||||
insertReorderBarrier(false);
|
||||
enableZ(false);
|
||||
mRecorder.restoreToCount(1);
|
||||
return mDisplayList.release();
|
||||
}
|
||||
@@ -85,8 +85,8 @@ void SkiaRecordingCanvas::drawCircle(uirenderer::CanvasPropertyPrimitive* x,
|
||||
drawDrawable(mDisplayList->allocateDrawable<AnimatedCircle>(x, y, radius, paint));
|
||||
}
|
||||
|
||||
void SkiaRecordingCanvas::insertReorderBarrier(bool enableReorder) {
|
||||
if (mCurrentBarrier && enableReorder) {
|
||||
void SkiaRecordingCanvas::enableZ(bool enableZ) {
|
||||
if (mCurrentBarrier && enableZ) {
|
||||
// Already in a re-order section, nothing to do
|
||||
return;
|
||||
}
|
||||
@@ -98,7 +98,7 @@ void SkiaRecordingCanvas::insertReorderBarrier(bool enableReorder) {
|
||||
mCurrentBarrier = nullptr;
|
||||
drawDrawable(drawable);
|
||||
}
|
||||
if (enableReorder) {
|
||||
if (enableZ) {
|
||||
mCurrentBarrier =
|
||||
mDisplayList->allocateDrawable<StartReorderBarrierDrawable>(mDisplayList.get());
|
||||
drawDrawable(mCurrentBarrier);
|
||||
|
||||
@@ -69,7 +69,7 @@ public:
|
||||
|
||||
virtual void drawVectorDrawable(VectorDrawableRoot* vectorDrawable) override;
|
||||
|
||||
virtual void insertReorderBarrier(bool enableReorder) override;
|
||||
virtual void enableZ(bool enableZ) override;
|
||||
virtual void drawLayer(uirenderer::DeferredLayerUpdater* layerHandle) override;
|
||||
virtual void drawRenderNode(uirenderer::RenderNode* renderNode) override;
|
||||
virtual void callDrawGLFunction(Functor* functor,
|
||||
|
||||
@@ -56,9 +56,9 @@ public:
|
||||
(float)magnifier->height(), 0, 0, (float)props.getWidth(),
|
||||
(float)props.getHeight(), nullptr);
|
||||
});
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
canvas.drawRenderNode(zoomImageView.get());
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
}
|
||||
|
||||
void doFrame(int frameNr) override {
|
||||
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
int cardsize = std::min(width, height) - dp(64);
|
||||
|
||||
renderer.drawColor(Color::White, SkBlendMode::kSrcOver);
|
||||
renderer.insertReorderBarrier(true);
|
||||
renderer.enableZ(true);
|
||||
|
||||
int x = dp(32);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
mCards.push_back(card);
|
||||
}
|
||||
|
||||
renderer.insertReorderBarrier(false);
|
||||
renderer.enableZ(false);
|
||||
}
|
||||
|
||||
void doFrame(int frameNr) override {
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
sp<RenderNode> card;
|
||||
void createContent(int width, int height, Canvas& canvas) override {
|
||||
canvas.drawColor(0xFFFFFFFF, SkBlendMode::kSrcOver);
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
|
||||
card = TestUtils::createNode(50, 50, 250, 250, [](RenderProperties& props, Canvas& canvas) {
|
||||
canvas.drawColor(0xFFFF00FF, SkBlendMode::kSrcOver);
|
||||
@@ -47,7 +47,7 @@ public:
|
||||
});
|
||||
canvas.drawRenderNode(card.get());
|
||||
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
}
|
||||
void doFrame(int frameNr) override {
|
||||
int curFrame = frameNr % 150;
|
||||
|
||||
@@ -27,7 +27,7 @@ public:
|
||||
std::vector<sp<RenderNode> > cards;
|
||||
void createContent(int width, int height, Canvas& canvas) override {
|
||||
canvas.drawColor(0xFFFFFFFF, SkBlendMode::kSrcOver);
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
int ci = 0;
|
||||
|
||||
for (int x = 0; x < width; x += mSpacing) {
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
}
|
||||
void doFrame(int frameNr) override {
|
||||
int curFrame = frameNr % 50;
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
std::vector<sp<RenderNode> > cards;
|
||||
void createContent(int width, int height, Canvas& canvas) override {
|
||||
canvas.drawColor(0xFFFFFFFF, SkBlendMode::kSrcOver);
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
|
||||
for (int x = dp(8); x < (width - dp(58)); x += dp(58)) {
|
||||
for (int y = dp(8); y < (height - dp(58)); y += dp(58)) {
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
}
|
||||
void doFrame(int frameNr) override {
|
||||
int curFrame = frameNr % 150;
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
std::vector<sp<RenderNode> > cards;
|
||||
void createContent(int width, int height, Canvas& canvas) override {
|
||||
canvas.drawColor(0xFFFFFFFF, SkBlendMode::kSrcOver);
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
|
||||
for (int x = dp(16); x < (width - dp(116)); x += dp(116)) {
|
||||
for (int y = dp(16); y < (height - dp(116)); y += dp(116)) {
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
}
|
||||
void doFrame(int frameNr) override {
|
||||
int curFrame = frameNr % 150;
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
std::vector<sp<RenderNode> > cards;
|
||||
void createContent(int width, int height, Canvas& canvas) override {
|
||||
canvas.drawColor(0xFFFFFFFF, SkBlendMode::kSrcOver);
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
|
||||
int outset = 50;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
cards.push_back(card);
|
||||
}
|
||||
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
}
|
||||
void doFrame(int frameNr) override {
|
||||
int curFrame = frameNr % 10;
|
||||
|
||||
@@ -67,7 +67,7 @@ public:
|
||||
mBg = createBitmapNode(canvas, 0xFF9C27B0, 0, 0, width, height);
|
||||
canvas.drawRenderNode(mBg.get());
|
||||
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
mSingleBitmap = mAllocator(dp(160), dp(120), kRGBA_8888_SkColorType,
|
||||
[](SkBitmap& skBitmap) { skBitmap.eraseColor(0xFF0000FF); });
|
||||
|
||||
@@ -80,7 +80,7 @@ public:
|
||||
mCards.push_back(card);
|
||||
}
|
||||
}
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
}
|
||||
|
||||
void doFrame(int frameNr) override {
|
||||
|
||||
@@ -133,14 +133,14 @@ void BM_DisplayListCanvas_basicViewGroupDraw(benchmark::State& benchState) {
|
||||
int clipRestoreCount = canvas->save(SaveFlags::MatrixClip);
|
||||
canvas->clipRect(1, 1, 199, 199, SkClipOp::kIntersect);
|
||||
|
||||
canvas->insertReorderBarrier(true);
|
||||
canvas->enableZ(true);
|
||||
|
||||
// Draw child loop
|
||||
for (int i = 0; i < benchState.range(0); i++) {
|
||||
canvas->drawRenderNode(child.get());
|
||||
}
|
||||
|
||||
canvas->insertReorderBarrier(false);
|
||||
canvas->enableZ(false);
|
||||
canvas->restoreToCount(clipRestoreCount);
|
||||
|
||||
delete canvas->finishRecording();
|
||||
|
||||
@@ -108,27 +108,27 @@ protected:
|
||||
TEST(RenderNodeDrawable, zReorder) {
|
||||
auto parent = TestUtils::createSkiaNode(0, 0, 100, 100, [](RenderProperties& props,
|
||||
SkiaRecordingCanvas& canvas) {
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(true);
|
||||
canvas.enableZ(false);
|
||||
drawOrderedNode(&canvas, 0, 10.0f); // in reorder=false at this point, so played inorder
|
||||
drawOrderedRect(&canvas, 1);
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
drawOrderedNode(&canvas, 6, 2.0f);
|
||||
drawOrderedRect(&canvas, 3);
|
||||
drawOrderedNode(&canvas, 4, 0.0f);
|
||||
drawOrderedRect(&canvas, 5);
|
||||
drawOrderedNode(&canvas, 2, -2.0f);
|
||||
drawOrderedNode(&canvas, 7, 2.0f);
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
drawOrderedRect(&canvas, 8);
|
||||
drawOrderedNode(&canvas, 9, -10.0f); // in reorder=false at this point, so played inorder
|
||||
canvas.insertReorderBarrier(true); // reorder a node ahead of drawrect op
|
||||
canvas.enableZ(true); // reorder a node ahead of drawrect op
|
||||
drawOrderedRect(&canvas, 11);
|
||||
drawOrderedNode(&canvas, 10, -1.0f);
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.insertReorderBarrier(true); // test with two empty reorder sections
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
canvas.enableZ(true); // test with two empty reorder sections
|
||||
canvas.enableZ(true);
|
||||
canvas.enableZ(false);
|
||||
drawOrderedRect(&canvas, 12);
|
||||
});
|
||||
|
||||
@@ -1142,7 +1142,7 @@ TEST(ReorderBarrierDrawable, testShadowMatrix) {
|
||||
0, 0, CANVAS_WIDTH, CANVAS_HEIGHT,
|
||||
[](RenderProperties& props, SkiaRecordingCanvas& canvas) {
|
||||
canvas.translate(TRANSLATE_X, TRANSLATE_Y);
|
||||
canvas.insertReorderBarrier(true);
|
||||
canvas.enableZ(true);
|
||||
|
||||
auto node = TestUtils::createSkiaNode(
|
||||
CASTER_X, CASTER_Y, CASTER_X + CASTER_WIDTH, CASTER_Y + CASTER_HEIGHT,
|
||||
@@ -1152,7 +1152,7 @@ TEST(ReorderBarrierDrawable, testShadowMatrix) {
|
||||
props.mutableOutline().setShouldClip(true);
|
||||
});
|
||||
canvas.drawRenderNode(node.get());
|
||||
canvas.insertReorderBarrier(false);
|
||||
canvas.enableZ(false);
|
||||
});
|
||||
|
||||
// create a canvas not backed by any device/pixels, but with dimensions to avoid quick rejection
|
||||
|
||||
Reference in New Issue
Block a user