Merge "Switch Java calls to enableZ and disableZ; remove isRecordingFor"

This commit is contained in:
Leon Scroggins
2020-05-07 18:07:22 +00:00
committed by Android (Google) Code Review
21 changed files with 52 additions and 79 deletions

View File

@@ -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);
}

View File

@@ -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
}
}
}

View File

@@ -4130,13 +4130,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) {
@@ -4177,12 +4175,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();
@@ -4229,7 +4227,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);

View File

@@ -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);

View File

@@ -58,9 +58,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;
@@ -189,22 +186,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

View File

@@ -79,12 +79,6 @@ public final class RecordingCanvas extends BaseRecordingCanvas {
return nFinishRecording(mNativeCanvasWrapper);
}
/** @hide */
@Override
public boolean isRecordingFor(Object o) {
return o == mNode;
}
///////////////////////////////////////////////////////////////////////////
// Constructors
///////////////////////////////////////////////////////////////////////////
@@ -145,12 +139,12 @@ public final class RecordingCanvas extends BaseRecordingCanvas {
@Override
public void enableZ() {
nInsertReorderBarrier(mNativeCanvasWrapper, true);
nEnableZ(mNativeCanvasWrapper, true);
}
@Override
public void disableZ() {
nInsertReorderBarrier(mNativeCanvasWrapper, false);
nEnableZ(mNativeCanvasWrapper, false);
}
///////////////////////////////////////////////////////////////////////////
@@ -300,7 +294,7 @@ public final class RecordingCanvas extends BaseRecordingCanvas {
@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

View File

@@ -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;

View File

@@ -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; }

View File

@@ -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 },

View File

@@ -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);

View File

@@ -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,

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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();

View File

@@ -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