aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorPo Lu2023-09-18 10:59:55 +0800
committerPo Lu2023-09-18 10:59:55 +0800
commit4e46df96510335c086a3764e002c99348e0e9624 (patch)
tree329373ead49ac6ff2a25e54dec65a70ca3297cb1 /java
parent514b70d5a0c73f5c0698494b323dc31dbc854d3a (diff)
downloademacs-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.java4
-rw-r--r--java/org/gnu/emacs/EmacsDrawRectangle.java3
-rw-r--r--java/org/gnu/emacs/EmacsDrawable.java1
-rw-r--r--java/org/gnu/emacs/EmacsPixmap.java7
-rw-r--r--java/org/gnu/emacs/EmacsView.java10
-rw-r--r--java/org/gnu/emacs/EmacsWindow.java12
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