JRE-690 Recent bundled JDK VCS Log UI slowdowns
Optimized nativeGetCursorPosition to avoid creating temporary Point2D object
diff --git a/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java b/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java
index e4abc5f..2289899 100644
--- a/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java
+++ b/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java
@@ -29,11 +29,10 @@
import java.awt.Cursor;
import java.awt.Point;
-import java.awt.geom.Point2D;
final class CCursorManager extends LWCursorManager {
- private static native Point2D nativeGetCursorPosition();
+ private static native void nativeGetCursorPosition(int[] pos);
private static native void nativeSetBuiltInCursor(final int type, final String name);
private static native void nativeSetCustomCursor(final long imgPtr, final double x, final double y);
public static native void nativeSetAllowsCursorSetInBackground(final boolean allows);
@@ -51,8 +50,9 @@
@Override
protected Point getCursorPosition() {
- final Point2D nativePosition = nativeGetCursorPosition();
- return new Point((int)nativePosition.getX(), (int)nativePosition.getY());
+ final int [] pos = new int[2];
+ nativeGetCursorPosition(pos);
+ return new Point(pos[0], pos[1]);
}
@Override
diff --git a/src/macosx/native/sun/awt/CCursorManager.m b/src/macosx/native/sun/awt/CCursorManager.m
index 9581b93..732f7ed 100644
--- a/src/macosx/native/sun/awt/CCursorManager.m
+++ b/src/macosx/native/sun/awt/CCursorManager.m
@@ -110,23 +110,23 @@
JNF_COCOA_EXIT(env);
}
-JNIEXPORT jobject JNICALL
+JNIEXPORT void JNICALL
Java_sun_lwawt_macosx_CCursorManager_nativeGetCursorPosition
-(JNIEnv *env, jclass class)
+(JNIEnv *env, jclass class, jintArray jPos)
{
- jobject jpt = NULL;
+ jint *pos = (*env)->GetPrimitiveArrayCritical(env, jPos, 0);
+ if (pos == NULL) return;
JNF_COCOA_ENTER(env);
CGEventRef event = CGEventCreate(NULL);
CGPoint globalPos = CGEventGetLocation(event);
CFRelease(event);
-
- jpt = NSToJavaPoint(env, globalPos);
+ pos[0] = (jint)globalPos.x;
+ pos[1] = (jint)globalPos.y;
JNF_COCOA_EXIT(env);
-
- return jpt;
+ (*env)->ReleasePrimitiveArrayCritical(env, jPos, pos, 0);
}