Wire up surface width/height to lockHardwareCanvas DO NOT MERGE

Bug: 18338026
Change-Id: I6c37774ef1312278ae81280561060662fef923fb
(cherry picked from commit b35c9602cf)
This commit is contained in:
John Reck
2014-11-13 16:15:08 -08:00
committed by Chris Craik
parent 3d110b2391
commit 2b36a86b8e
2 changed files with 26 additions and 3 deletions

View File

@@ -53,6 +53,9 @@ public class Surface implements Parcelable {
private static native void nativeAllocateBuffers(long nativeObject); private static native void nativeAllocateBuffers(long nativeObject);
private static native int nativeGetWidth(long nativeObject);
private static native int nativeGetHeight(long nativeObject);
public static final Parcelable.Creator<Surface> CREATOR = public static final Parcelable.Creator<Surface> CREATOR =
new Parcelable.Creator<Surface>() { new Parcelable.Creator<Surface>() {
@Override @Override
@@ -324,7 +327,9 @@ public class Surface implements Parcelable {
if (mHwuiContext == null) { if (mHwuiContext == null) {
mHwuiContext = new HwuiContext(); mHwuiContext = new HwuiContext();
} }
return mHwuiContext.lockCanvas(); return mHwuiContext.lockCanvas(
nativeGetWidth(mNativeObject),
nativeGetHeight(mNativeObject));
} }
} }
@@ -573,11 +578,11 @@ public class Surface implements Parcelable {
mHwuiRenderer = nHwuiCreate(mRenderNode.mNativeRenderNode, mNativeObject); mHwuiRenderer = nHwuiCreate(mRenderNode.mNativeRenderNode, mNativeObject);
} }
Canvas lockCanvas() { Canvas lockCanvas(int width, int height) {
if (mCanvas != null) { if (mCanvas != null) {
throw new IllegalStateException("Surface was already locked!"); throw new IllegalStateException("Surface was already locked!");
} }
mCanvas = mRenderNode.start(0, 0); mCanvas = mRenderNode.start(width, height);
return mCanvas; return mCanvas;
} }

View File

@@ -357,6 +357,22 @@ static void nativeWriteToParcel(JNIEnv* env, jclass clazz,
parcel->writeStrongBinder( self != 0 ? self->getIGraphicBufferProducer()->asBinder() : NULL); parcel->writeStrongBinder( self != 0 ? self->getIGraphicBufferProducer()->asBinder() : NULL);
} }
static jint nativeGetWidth(JNIEnv* env, jclass clazz, jlong nativeObject) {
Surface* surface = reinterpret_cast<Surface*>(nativeObject);
ANativeWindow* anw = static_cast<ANativeWindow*>(surface);
int value = 0;
anw->query(anw, NATIVE_WINDOW_WIDTH, &value);
return value;
}
static jint nativeGetHeight(JNIEnv* env, jclass clazz, jlong nativeObject) {
Surface* surface = reinterpret_cast<Surface*>(nativeObject);
ANativeWindow* anw = static_cast<ANativeWindow*>(surface);
int value = 0;
anw->query(anw, NATIVE_WINDOW_HEIGHT, &value);
return value;
}
namespace uirenderer { namespace uirenderer {
using namespace android::uirenderer::renderthread; using namespace android::uirenderer::renderthread;
@@ -425,6 +441,8 @@ static JNINativeMethod gSurfaceMethods[] = {
(void*)nativeReadFromParcel }, (void*)nativeReadFromParcel },
{"nativeWriteToParcel", "(JLandroid/os/Parcel;)V", {"nativeWriteToParcel", "(JLandroid/os/Parcel;)V",
(void*)nativeWriteToParcel }, (void*)nativeWriteToParcel },
{"nativeGetWidth", "(J)I", (void*)nativeGetWidth },
{"nativeGetHeight", "(J)I", (void*)nativeGetHeight },
// HWUI context // HWUI context
{"nHwuiCreate", "(JJ)J", (void*) hwui::create }, {"nHwuiCreate", "(JJ)J", (void*) hwui::create },