Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb2397c5 authored by Raph Levien's avatar Raph Levien
Browse files

Fix EditText RenderNode invalidation bugs

EditText uses a TextDisplayList data structure to hold RenderNode
objects for optimized incremental drawing. This data structure uses an
isDirty flag to indicate when it has been invalidated and needs to be
re-rendered. This flag was not being computed correctly, leading to
excessive re-rendering.

This patch clears isDirty after rendering text into the RenderNode, so
that it can be reused until it is invalidated, and also explicitly sets
it when it is recycled.

Bug: 19371378
Change-Id: I70239cc30e43bb8631dfffc2ea2705e8d4c452f4
parent d7c020e9
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1352,6 +1352,9 @@ 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;
                    }
                    searchStartIndex = blockIndex + 1;
                }

@@ -1388,6 +1391,7 @@ public class Editor {
                            // brings this range of text back to the top left corner of the viewport
                            hardwareCanvas.translate(-left, -top);
                            layout.drawText(hardwareCanvas, blockBeginLine, blockEndLine);
                            mTextDisplayLists[blockIndex].isDirty = false;
                            // No need to untranslate, previous context is popped after
                            // drawDisplayList
                        } finally {