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

Commit a3ff0061 authored by Jeykumar Sankaran's avatar Jeykumar Sankaran Committed by Linux Build Service Account
Browse files

frameworks/base: Call setDirtyRect to update dirty rectangle.

This change updates dirty rectangle instead of dirty region of a
surface.

Change-Id: Ic5c6e68ff644911a596a2432fd14868edbff9b17
parent 4a7d7801
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ public class Surface implements Parcelable {
    private static native void nativeWriteToParcel(long nativeObject, Parcel dest);

    private static native void nativeAllocateBuffers(long nativeObject);
    private static native void nativeSetDirtyRegion(long nativeObject, Rect dirty);
    private static native void nativeSetDirtyRect(long nativeObject, Rect dirty);

    public static final Parcelable.Creator<Surface> CREATOR =
            new Parcelable.Creator<Surface>() {
@@ -165,9 +165,9 @@ public class Surface implements Parcelable {
     * Set dirty region passed from HW renderer.
     * @hide
     */
    public void setDirtyRegion(Rect dirty) {
    public void setDirtyRect(Rect dirty) {
        if (mNativeObject != 0) {
            nativeSetDirtyRegion(mNativeObject,dirty);
            nativeSetDirtyRect(mNativeObject,dirty);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -2490,7 +2490,7 @@ public final class ViewRootImpl implements ViewParent,
                // and also its better to check the surface
                // validity to avoid any crash.
                if(mSurface.isValid() && dirty != null) {
                    mSurface.setDirtyRegion(dirty);
                    mSurface.setDirtyRect(dirty);
                }

                dirty.setEmpty();
+9 −19
Original line number Diff line number Diff line
@@ -187,7 +187,7 @@ static inline SkColorType convertPixelFormat(PixelFormat format) {
    }
}

static void nativeSetDirtyRegion(JNIEnv* env, jclass clazz,
static void nativeSetDirtyRect(JNIEnv* env, jclass clazz,
        jlong nativeObject, jobject dirtyRect) {

    sp<Surface> surface(reinterpret_cast<Surface *>(nativeObject));
@@ -197,23 +197,13 @@ static void nativeSetDirtyRegion(JNIEnv* env, jclass clazz,
        return;
    }

    // get dirty region
    Region dirtyRegion;
    Rect dirty;
    Rect rect;
    rect.left = env->GetIntField(dirtyRect, gRectClassInfo.left);
    rect.top = env->GetIntField(dirtyRect, gRectClassInfo.top);
    rect.right = env->GetIntField(dirtyRect, gRectClassInfo.right);
    rect.bottom = env->GetIntField(dirtyRect, gRectClassInfo.bottom);

    dirty.left = env->GetIntField(dirtyRect, gRectClassInfo.left);
    dirty.top = env->GetIntField(dirtyRect, gRectClassInfo.top);
    dirty.right = env->GetIntField(dirtyRect, gRectClassInfo.right);
    dirty.bottom = env->GetIntField(dirtyRect, gRectClassInfo.bottom);

    if (!dirty.isEmpty()) {
       dirtyRegion.set(dirty);
    }

    status_t err = surface->setDirtyRegion(&dirtyRegion);
    if (err < 0) {
        doThrowIAE(env);
    }
    surface->setDirtyRect(&rect);
}

static jlong nativeLockCanvas(JNIEnv* env, jclass clazz,
@@ -404,8 +394,8 @@ static JNINativeMethod gSurfaceMethods[] = {
            (void*)nativeReadFromParcel },
    {"nativeWriteToParcel", "(JLandroid/os/Parcel;)V",
            (void*)nativeWriteToParcel },
    {"nativeSetDirtyRegion", "(JLandroid/graphics/Rect;)V",
           (void*)nativeSetDirtyRegion },
    {"nativeSetDirtyRect", "(JLandroid/graphics/Rect;)V",
           (void*)nativeSetDirtyRect },
};

int register_android_view_Surface(JNIEnv* env)