am ff623a5a: Merge "Remove unused flags and dirty rects" into mnc-dev
* commit 'ff623a5ab3b26cd98790e355e316a65d76197cbd': Remove unused flags and dirty rects
This commit is contained in:
@@ -234,25 +234,13 @@ public class DisplayListCanvas extends Canvas {
|
||||
* Draws the specified display list onto this canvas. The display list can only
|
||||
* be drawn if {@link android.view.RenderNode#isValid()} returns true.
|
||||
*
|
||||
* @param renderNode The RenderNode to replay.
|
||||
* @param renderNode The RenderNode to draw.
|
||||
*/
|
||||
public void drawRenderNode(RenderNode renderNode) {
|
||||
drawRenderNode(renderNode, RenderNode.FLAG_CLIP_CHILDREN);
|
||||
nDrawRenderNode(mNativeCanvasWrapper, renderNode.getNativeDisplayList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the specified display list onto this canvas.
|
||||
*
|
||||
* @param renderNode The RenderNode to replay.
|
||||
* @param flags Optional flags about drawing, see {@link RenderNode} for
|
||||
* the possible flags.
|
||||
*/
|
||||
public void drawRenderNode(RenderNode renderNode, int flags) {
|
||||
nDrawRenderNode(mNativeCanvasWrapper, renderNode.getNativeDisplayList(), flags);
|
||||
}
|
||||
|
||||
private static native void nDrawRenderNode(long renderer, long renderNode,
|
||||
int flags);
|
||||
private static native void nDrawRenderNode(long renderer, long renderNode);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Hardware layer
|
||||
|
||||
@@ -15540,7 +15540,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
if (!drawingWithDrawingCache) {
|
||||
if (drawingWithRenderNode) {
|
||||
mPrivateFlags &= ~PFLAG_DIRTY_MASK;
|
||||
((DisplayListCanvas) canvas).drawRenderNode(renderNode, parentFlags);
|
||||
((DisplayListCanvas) canvas).drawRenderNode(renderNode);
|
||||
} else {
|
||||
// Fast path for layouts with no backgrounds
|
||||
if ((mPrivateFlags & PFLAG_SKIP_DRAW) == PFLAG_SKIP_DRAW) {
|
||||
|
||||
@@ -145,16 +145,16 @@ public class Editor {
|
||||
InputContentType mInputContentType;
|
||||
InputMethodState mInputMethodState;
|
||||
|
||||
private static class TextDisplayList {
|
||||
RenderNode displayList;
|
||||
private static class TextRenderNode {
|
||||
RenderNode renderNode;
|
||||
boolean isDirty;
|
||||
public TextDisplayList(String name) {
|
||||
public TextRenderNode(String name) {
|
||||
isDirty = true;
|
||||
displayList = RenderNode.create(name, null);
|
||||
renderNode = RenderNode.create(name, null);
|
||||
}
|
||||
boolean needsRecord() { return isDirty || !displayList.isValid(); }
|
||||
boolean needsRecord() { return isDirty || !renderNode.isValid(); }
|
||||
}
|
||||
TextDisplayList[] mTextDisplayLists;
|
||||
TextRenderNode[] mTextRenderNodes;
|
||||
|
||||
boolean mFrozenWithFocus;
|
||||
boolean mSelectionMoved;
|
||||
@@ -360,10 +360,10 @@ public class Editor {
|
||||
}
|
||||
|
||||
private void destroyDisplayListsData() {
|
||||
if (mTextDisplayLists != null) {
|
||||
for (int i = 0; i < mTextDisplayLists.length; i++) {
|
||||
RenderNode displayList = mTextDisplayLists[i] != null
|
||||
? mTextDisplayLists[i].displayList : null;
|
||||
if (mTextRenderNodes != null) {
|
||||
for (int i = 0; i < mTextRenderNodes.length; i++) {
|
||||
RenderNode displayList = mTextRenderNodes[i] != null
|
||||
? mTextRenderNodes[i].renderNode : null;
|
||||
if (displayList != null && displayList.isValid()) {
|
||||
displayList.destroyDisplayListData();
|
||||
}
|
||||
@@ -1467,8 +1467,8 @@ public class Editor {
|
||||
firstLine, lastLine);
|
||||
|
||||
if (layout instanceof DynamicLayout) {
|
||||
if (mTextDisplayLists == null) {
|
||||
mTextDisplayLists = ArrayUtils.emptyArray(TextDisplayList.class);
|
||||
if (mTextRenderNodes == null) {
|
||||
mTextRenderNodes = ArrayUtils.emptyArray(TextRenderNode.class);
|
||||
}
|
||||
|
||||
DynamicLayout dynamicLayout = (DynamicLayout) layout;
|
||||
@@ -1489,19 +1489,19 @@ public class Editor {
|
||||
searchStartIndex);
|
||||
// Note how dynamic layout's internal block indices get updated from Editor
|
||||
blockIndices[i] = blockIndex;
|
||||
if (mTextDisplayLists[blockIndex] != null) {
|
||||
mTextDisplayLists[blockIndex].isDirty = true;
|
||||
if (mTextRenderNodes[blockIndex] != null) {
|
||||
mTextRenderNodes[blockIndex].isDirty = true;
|
||||
}
|
||||
searchStartIndex = blockIndex + 1;
|
||||
}
|
||||
|
||||
if (mTextDisplayLists[blockIndex] == null) {
|
||||
mTextDisplayLists[blockIndex] =
|
||||
new TextDisplayList("Text " + blockIndex);
|
||||
if (mTextRenderNodes[blockIndex] == null) {
|
||||
mTextRenderNodes[blockIndex] =
|
||||
new TextRenderNode("Text " + blockIndex);
|
||||
}
|
||||
|
||||
final boolean blockDisplayListIsInvalid = mTextDisplayLists[blockIndex].needsRecord();
|
||||
RenderNode blockDisplayList = mTextDisplayLists[blockIndex].displayList;
|
||||
final boolean blockDisplayListIsInvalid = mTextRenderNodes[blockIndex].needsRecord();
|
||||
RenderNode blockDisplayList = mTextRenderNodes[blockIndex].renderNode;
|
||||
if (i >= indexFirstChangedBlock || blockDisplayListIsInvalid) {
|
||||
final int blockBeginLine = endOfPreviousBlock + 1;
|
||||
final int top = layout.getLineTop(blockBeginLine);
|
||||
@@ -1528,7 +1528,7 @@ public class Editor {
|
||||
// brings this range of text back to the top left corner of the viewport
|
||||
displayListCanvas.translate(-left, -top);
|
||||
layout.drawText(displayListCanvas, blockBeginLine, blockEndLine);
|
||||
mTextDisplayLists[blockIndex].isDirty = false;
|
||||
mTextRenderNodes[blockIndex].isDirty = false;
|
||||
// No need to untranslate, previous context is popped after
|
||||
// drawDisplayList
|
||||
} finally {
|
||||
@@ -1543,8 +1543,7 @@ public class Editor {
|
||||
blockDisplayList.setLeftTopRightBottom(left, top, right, bottom);
|
||||
}
|
||||
|
||||
((DisplayListCanvas) canvas).drawRenderNode(blockDisplayList,
|
||||
0 /* no child clipping, our TextView parent enforces it */);
|
||||
((DisplayListCanvas) canvas).drawRenderNode(blockDisplayList);
|
||||
|
||||
endOfPreviousBlock = blockEndLine;
|
||||
}
|
||||
@@ -1558,7 +1557,7 @@ public class Editor {
|
||||
|
||||
private int getAvailableDisplayListIndex(int[] blockIndices, int numberOfBlocks,
|
||||
int searchStartIndex) {
|
||||
int length = mTextDisplayLists.length;
|
||||
int length = mTextRenderNodes.length;
|
||||
for (int i = searchStartIndex; i < length; i++) {
|
||||
boolean blockIndexFound = false;
|
||||
for (int j = 0; j < numberOfBlocks; j++) {
|
||||
@@ -1572,7 +1571,7 @@ public class Editor {
|
||||
}
|
||||
|
||||
// No available index found, the pool has to grow
|
||||
mTextDisplayLists = GrowingArrayUtils.append(mTextDisplayLists, length, null);
|
||||
mTextRenderNodes = GrowingArrayUtils.append(mTextRenderNodes, length, null);
|
||||
return length;
|
||||
}
|
||||
|
||||
@@ -1589,7 +1588,7 @@ public class Editor {
|
||||
* Invalidates all the sub-display lists that overlap the specified character range
|
||||
*/
|
||||
void invalidateTextDisplayList(Layout layout, int start, int end) {
|
||||
if (mTextDisplayLists != null && layout instanceof DynamicLayout) {
|
||||
if (mTextRenderNodes != null && layout instanceof DynamicLayout) {
|
||||
final int firstLine = layout.getLineForOffset(start);
|
||||
final int lastLine = layout.getLineForOffset(end);
|
||||
|
||||
@@ -1609,7 +1608,7 @@ public class Editor {
|
||||
while (i < numberOfBlocks) {
|
||||
final int blockIndex = blockIndices[i];
|
||||
if (blockIndex != DynamicLayout.INVALID_BLOCK_INDEX) {
|
||||
mTextDisplayLists[blockIndex].isDirty = true;
|
||||
mTextRenderNodes[blockIndex].isDirty = true;
|
||||
}
|
||||
if (blockEndLines[i] >= lastLine) break;
|
||||
i++;
|
||||
@@ -1618,9 +1617,9 @@ public class Editor {
|
||||
}
|
||||
|
||||
void invalidateTextDisplayList() {
|
||||
if (mTextDisplayLists != null) {
|
||||
for (int i = 0; i < mTextDisplayLists.length; i++) {
|
||||
if (mTextDisplayLists[i] != null) mTextDisplayLists[i].isDirty = true;
|
||||
if (mTextRenderNodes != null) {
|
||||
for (int i = 0; i < mTextRenderNodes.length; i++) {
|
||||
if (mTextRenderNodes[i] != null) mTextRenderNodes[i].isDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,8 +112,7 @@ static void android_view_DisplayListCanvas_callDrawGLFunction(JNIEnv* env, jobje
|
||||
jlong rendererPtr, jlong functorPtr) {
|
||||
DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr);
|
||||
Functor* functor = reinterpret_cast<Functor*>(functorPtr);
|
||||
android::uirenderer::Rect dirty;
|
||||
renderer->callDrawGLFunction(functor, dirty);
|
||||
renderer->callDrawGLFunction(functor);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -212,12 +211,10 @@ static jlong android_view_DisplayListCanvas_createDisplayListCanvas(JNIEnv* env,
|
||||
}
|
||||
|
||||
static void android_view_DisplayListCanvas_drawRenderNode(JNIEnv* env,
|
||||
jobject clazz, jlong rendererPtr, jlong renderNodePtr,
|
||||
jint flags) {
|
||||
jobject clazz, jlong rendererPtr, jlong renderNodePtr) {
|
||||
DisplayListCanvas* renderer = reinterpret_cast<DisplayListCanvas*>(rendererPtr);
|
||||
RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
|
||||
android::uirenderer::Rect bounds;
|
||||
renderer->drawRenderNode(renderNode, bounds, flags);
|
||||
renderer->drawRenderNode(renderNode);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -283,7 +280,7 @@ static JNINativeMethod gMethods[] = {
|
||||
{ "nDrawCircle", "(JJJJJ)V", (void*) android_view_DisplayListCanvas_drawCircleProps },
|
||||
|
||||
{ "nFinishRecording", "(J)J", (void*) android_view_DisplayListCanvas_finishRecording },
|
||||
{ "nDrawRenderNode", "(JJI)V", (void*) android_view_DisplayListCanvas_drawRenderNode },
|
||||
{ "nDrawRenderNode", "(JJ)V", (void*) android_view_DisplayListCanvas_drawRenderNode },
|
||||
|
||||
{ "nCreateDisplayListCanvas", "()J", (void*) android_view_DisplayListCanvas_createDisplayListCanvas },
|
||||
|
||||
|
||||
@@ -88,8 +88,7 @@ void DisplayListCanvas::interrupt() {
|
||||
void DisplayListCanvas::resume() {
|
||||
}
|
||||
|
||||
void DisplayListCanvas::callDrawGLFunction(Functor *functor, Rect& dirty) {
|
||||
// Ignore dirty during recording, it matters only when we replay
|
||||
void DisplayListCanvas::callDrawGLFunction(Functor *functor) {
|
||||
addDrawOp(new (alloc()) DrawFunctorOp(functor));
|
||||
mDisplayListData->functors.add(functor);
|
||||
}
|
||||
@@ -202,12 +201,12 @@ bool DisplayListCanvas::clipRegion(const SkRegion* region, SkRegion::Op op) {
|
||||
return mState.clipRegion(region, op);
|
||||
}
|
||||
|
||||
void DisplayListCanvas::drawRenderNode(RenderNode* renderNode, Rect& dirty, int32_t flags) {
|
||||
void DisplayListCanvas::drawRenderNode(RenderNode* renderNode) {
|
||||
LOG_ALWAYS_FATAL_IF(!renderNode, "missing rendernode");
|
||||
|
||||
// dirty is an out parameter and should not be recorded,
|
||||
// it matters only when replaying the display list
|
||||
DrawRenderNodeOp* op = new (alloc()) DrawRenderNodeOp(renderNode, flags, *mState.currentTransform());
|
||||
DrawRenderNodeOp* op = new (alloc()) DrawRenderNodeOp(renderNode, *mState.currentTransform());
|
||||
addRenderNodeOp(op);
|
||||
}
|
||||
|
||||
|
||||
@@ -115,10 +115,10 @@ public:
|
||||
// HWUI Canvas draw operations - special
|
||||
// ----------------------------------------------------------------------------
|
||||
void drawLayer(DeferredLayerUpdater* layerHandle, float x, float y);
|
||||
void drawRenderNode(RenderNode* renderNode, Rect& dirty, int32_t replayFlags);
|
||||
void drawRenderNode(RenderNode* renderNode);
|
||||
|
||||
// TODO: rename for consistency
|
||||
void callDrawGLFunction(Functor* functor, Rect& dirty);
|
||||
void callDrawGLFunction(Functor* functor);
|
||||
|
||||
void setHighContrastText(bool highContrastText) {
|
||||
mHighContrastText = highContrastText;
|
||||
|
||||
@@ -1398,10 +1398,9 @@ class DrawRenderNodeOp : public DrawBoundedOp {
|
||||
friend class RenderNode; // grant RenderNode access to info of child
|
||||
friend class DisplayListData; // grant DisplayListData access to info of child
|
||||
public:
|
||||
DrawRenderNodeOp(RenderNode* renderNode, int flags, const mat4& transformFromParent)
|
||||
DrawRenderNodeOp(RenderNode* renderNode, const mat4& transformFromParent)
|
||||
: DrawBoundedOp(0, 0, renderNode->getWidth(), renderNode->getHeight(), nullptr)
|
||||
, mRenderNode(renderNode)
|
||||
, mFlags(flags)
|
||||
, mTransformFromParent(transformFromParent)
|
||||
, mSkipInOrderDraw(false) {}
|
||||
|
||||
@@ -1424,7 +1423,7 @@ public:
|
||||
}
|
||||
|
||||
virtual void output(int level, uint32_t logFlags) const override {
|
||||
OP_LOG("Draw RenderNode %p %s, flags %#x", mRenderNode, mRenderNode->getName(), mFlags);
|
||||
OP_LOG("Draw RenderNode %p %s, flags %#x", mRenderNode, mRenderNode->getName());
|
||||
if (mRenderNode && (logFlags & kOpLogFlag_Recurse)) {
|
||||
mRenderNode->output(level + 1);
|
||||
}
|
||||
@@ -1436,7 +1435,6 @@ public:
|
||||
|
||||
private:
|
||||
RenderNode* mRenderNode;
|
||||
const int mFlags;
|
||||
|
||||
///////////////////////////
|
||||
// Properties below are used by RenderNode::computeOrderingImpl() and issueOperations()
|
||||
|
||||
@@ -111,15 +111,13 @@ class ShadowGridAnimation : public TreeContentAnimation {
|
||||
public:
|
||||
std::vector< sp<RenderNode> > cards;
|
||||
void createContent(int width, int height, DisplayListCanvas* renderer) override {
|
||||
android::uirenderer::Rect DUMMY;
|
||||
|
||||
renderer->drawColor(0xFFFFFFFF, SkXfermode::kSrcOver_Mode);
|
||||
renderer->insertReorderBarrier(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)) {
|
||||
sp<RenderNode> card = createCard(x, y, dp(100), dp(100));
|
||||
renderer->drawRenderNode(card.get(), DUMMY, 0);
|
||||
renderer->drawRenderNode(card.get());
|
||||
cards.push_back(card);
|
||||
}
|
||||
}
|
||||
@@ -153,13 +151,11 @@ class RectGridAnimation : public TreeContentAnimation {
|
||||
public:
|
||||
sp<RenderNode> card;
|
||||
void createContent(int width, int height, DisplayListCanvas* renderer) override {
|
||||
android::uirenderer::Rect DUMMY;
|
||||
|
||||
renderer->drawColor(0xFFFFFFFF, SkXfermode::kSrcOver_Mode);
|
||||
renderer->insertReorderBarrier(true);
|
||||
|
||||
card = createCard(40, 40, 200, 200);
|
||||
renderer->drawRenderNode(card.get(), DUMMY, 0);
|
||||
renderer->drawRenderNode(card.get());
|
||||
|
||||
renderer->insertReorderBarrier(false);
|
||||
}
|
||||
@@ -202,13 +198,11 @@ class OvalAnimation : public TreeContentAnimation {
|
||||
public:
|
||||
sp<RenderNode> card;
|
||||
void createContent(int width, int height, DisplayListCanvas* renderer) override {
|
||||
android::uirenderer::Rect DUMMY;
|
||||
|
||||
renderer->drawColor(0xFFFFFFFF, SkXfermode::kSrcOver_Mode);
|
||||
renderer->insertReorderBarrier(true);
|
||||
|
||||
card = createCard(40, 40, 400, 400);
|
||||
renderer->drawRenderNode(card.get(), DUMMY, 0);
|
||||
renderer->drawRenderNode(card.get());
|
||||
|
||||
renderer->insertReorderBarrier(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user