diff options
| author | Po Lu | 2023-09-18 10:59:55 +0800 |
|---|---|---|
| committer | Po Lu | 2023-09-18 10:59:55 +0800 |
| commit | 4e46df96510335c086a3764e002c99348e0e9624 (patch) | |
| tree | 329373ead49ac6ff2a25e54dec65a70ca3297cb1 /java | |
| parent | 514b70d5a0c73f5c0698494b323dc31dbc854d3a (diff) | |
| download | emacs-4e46df96510335c086a3764e002c99348e0e9624.tar.gz emacs-4e46df96510335c086a3764e002c99348e0e9624.zip | |
Optimize damage region tracking under Android
* java/org/gnu/emacs/EmacsDrawLine.java (perform):
* java/org/gnu/emacs/EmacsDrawRectangle.java (perform): Call
damageRect with integer coordinates in lieu of consing a new
Rect.
* java/org/gnu/emacs/EmacsDrawable.java (damageRect) <IIII>:
Declare a new variant of damageRect, accepting four integers
designating the extents of the damage rectangle.
* java/org/gnu/emacs/EmacsPixmap.java (damageRect) <IIII>: New
stub.
* java/org/gnu/emacs/EmacsView.java (damageRect) <IIII>:
Implement this overloaded variant of damageRect.
* java/org/gnu/emacs/EmacsWindow.java (damageRect): Ditto.
* src/android.c (android_init_emacs_drawable)
(android_init_emacs_window): Move search for `damageRect' to
android_init_emacs_window.
(android_damage_window): Call IIII variant of `damageRect' to
avoid consing a new rectangle. Ameliorate dynamic method
dispatch overhead.
Diffstat (limited to 'java')
| -rw-r--r-- | java/org/gnu/emacs/EmacsDrawLine.java | 4 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsDrawRectangle.java | 3 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsDrawable.java | 1 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsPixmap.java | 7 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsView.java | 10 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsWindow.java | 12 |
6 files changed, 31 insertions, 6 deletions
diff --git a/java/org/gnu/emacs/EmacsDrawLine.java b/java/org/gnu/emacs/EmacsDrawLine.java index d367ccff9c4..be4da54c075 100644 --- a/java/org/gnu/emacs/EmacsDrawLine.java +++ b/java/org/gnu/emacs/EmacsDrawLine.java | |||
| @@ -29,7 +29,6 @@ public final class EmacsDrawLine | |||
| 29 | perform (EmacsDrawable drawable, EmacsGC gc, | 29 | perform (EmacsDrawable drawable, EmacsGC gc, |
| 30 | int x, int y, int x2, int y2) | 30 | int x, int y, int x2, int y2) |
| 31 | { | 31 | { |
| 32 | Rect rect; | ||
| 33 | Canvas canvas; | 32 | Canvas canvas; |
| 34 | Paint paint; | 33 | Paint paint; |
| 35 | int x0, x1, y0, y1; | 34 | int x0, x1, y0, y1; |
| @@ -48,7 +47,6 @@ public final class EmacsDrawLine | |||
| 48 | /* And the clip rectangle. */ | 47 | /* And the clip rectangle. */ |
| 49 | 48 | ||
| 50 | paint = gc.gcPaint; | 49 | paint = gc.gcPaint; |
| 51 | rect = new Rect (x0, y0, x1, y1); | ||
| 52 | canvas = drawable.lockCanvas (gc); | 50 | canvas = drawable.lockCanvas (gc); |
| 53 | 51 | ||
| 54 | if (canvas == null) | 52 | if (canvas == null) |
| @@ -74,6 +72,6 @@ public final class EmacsDrawLine | |||
| 74 | 72 | ||
| 75 | /* DrawLine with clip mask not implemented; it is not used by | 73 | /* DrawLine with clip mask not implemented; it is not used by |
| 76 | Emacs. */ | 74 | Emacs. */ |
| 77 | drawable.damageRect (rect); | 75 | drawable.damageRect (x0, y0, x1, y1); |
| 78 | } | 76 | } |
| 79 | } | 77 | } |
diff --git a/java/org/gnu/emacs/EmacsDrawRectangle.java b/java/org/gnu/emacs/EmacsDrawRectangle.java index e1261b4a2d2..ee9110daaaf 100644 --- a/java/org/gnu/emacs/EmacsDrawRectangle.java +++ b/java/org/gnu/emacs/EmacsDrawRectangle.java | |||
| @@ -114,7 +114,6 @@ public final class EmacsDrawRectangle | |||
| 114 | maskBitmap.recycle (); | 114 | maskBitmap.recycle (); |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | drawable.damageRect (new Rect (x, y, x + width + 1, | 117 | drawable.damageRect (x, y, x + width + 1, y + height + 1); |
| 118 | y + height + 1)); | ||
| 119 | } | 118 | } |
| 120 | } | 119 | } |
diff --git a/java/org/gnu/emacs/EmacsDrawable.java b/java/org/gnu/emacs/EmacsDrawable.java index f2f8885e976..3ed72a836e5 100644 --- a/java/org/gnu/emacs/EmacsDrawable.java +++ b/java/org/gnu/emacs/EmacsDrawable.java | |||
| @@ -27,6 +27,7 @@ public interface EmacsDrawable | |||
| 27 | { | 27 | { |
| 28 | public Canvas lockCanvas (EmacsGC gc); | 28 | public Canvas lockCanvas (EmacsGC gc); |
| 29 | public void damageRect (Rect damageRect); | 29 | public void damageRect (Rect damageRect); |
| 30 | public void damageRect (int left, int top, int right, int bottom); | ||
| 30 | public Bitmap getBitmap (); | 31 | public Bitmap getBitmap (); |
| 31 | public boolean isDestroyed (); | 32 | public boolean isDestroyed (); |
| 32 | }; | 33 | }; |
diff --git a/java/org/gnu/emacs/EmacsPixmap.java b/java/org/gnu/emacs/EmacsPixmap.java index 2cbf7a430cf..e02699ecba7 100644 --- a/java/org/gnu/emacs/EmacsPixmap.java +++ b/java/org/gnu/emacs/EmacsPixmap.java | |||
| @@ -176,6 +176,13 @@ public final class EmacsPixmap extends EmacsHandleObject | |||
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | @Override | 178 | @Override |
| 179 | public void | ||
| 180 | damageRect (int left, int top, int right, int bottom) | ||
| 181 | { | ||
| 182 | |||
| 183 | } | ||
| 184 | |||
| 185 | @Override | ||
| 179 | public Bitmap | 186 | public Bitmap |
| 180 | getBitmap () | 187 | getBitmap () |
| 181 | { | 188 | { |
diff --git a/java/org/gnu/emacs/EmacsView.java b/java/org/gnu/emacs/EmacsView.java index 0f83af882ae..d09dcc7e50d 100644 --- a/java/org/gnu/emacs/EmacsView.java +++ b/java/org/gnu/emacs/EmacsView.java | |||
| @@ -437,6 +437,16 @@ public final class EmacsView extends ViewGroup | |||
| 437 | damageRegion.union (damageRect); | 437 | damageRegion.union (damageRect); |
| 438 | } | 438 | } |
| 439 | 439 | ||
| 440 | /* This function enables damage to be recorded without consing a new | ||
| 441 | Rect object. */ | ||
| 442 | |||
| 443 | public void | ||
| 444 | damageRect (int left, int top, int right, int bottom) | ||
| 445 | { | ||
| 446 | EmacsService.checkEmacsThread (); | ||
| 447 | damageRegion.op (left, top, right, bottom, Region.Op.UNION); | ||
| 448 | } | ||
| 449 | |||
| 440 | /* This method is called from both the UI thread and the Emacs | 450 | /* This method is called from both the UI thread and the Emacs |
| 441 | thread. */ | 451 | thread. */ |
| 442 | 452 | ||
diff --git a/java/org/gnu/emacs/EmacsWindow.java b/java/org/gnu/emacs/EmacsWindow.java index 3738376a6f4..1f28d5f4f53 100644 --- a/java/org/gnu/emacs/EmacsWindow.java +++ b/java/org/gnu/emacs/EmacsWindow.java | |||
| @@ -514,7 +514,17 @@ public final class EmacsWindow extends EmacsHandleObject | |||
| 514 | public void | 514 | public void |
| 515 | damageRect (Rect damageRect) | 515 | damageRect (Rect damageRect) |
| 516 | { | 516 | { |
| 517 | view.damageRect (damageRect); | 517 | view.damageRect (damageRect.left, |
| 518 | damageRect.top, | ||
| 519 | damageRect.right, | ||
| 520 | damageRect.bottom); | ||
| 521 | } | ||
| 522 | |||
| 523 | @Override | ||
| 524 | public void | ||
| 525 | damageRect (int left, int top, int right, int bottom) | ||
| 526 | { | ||
| 527 | view.damageRect (left, top, right, bottom); | ||
| 518 | } | 528 | } |
| 519 | 529 | ||
| 520 | public void | 530 | public void |