Automated import from //branches/cupcake/...@142873,142873

This commit is contained in:
Mathias Agopian
2009-03-25 23:18:56 -07:00
committed by The Android Open Source Project
parent 02771bcb5d
commit c75c4364ea
10 changed files with 73 additions and 33 deletions

View File

@@ -118,6 +118,12 @@ public class Surface implements Parcelable {
public static final int ROTATION_180 = 2;
public static final int ROTATION_270 = 3;
/**
* Disable the orientation animation
* {@hide}
*/
public static final int FLAGS_ORIENTATION_ANIMATION_DISABLE = 0x000000001;
@SuppressWarnings("unused")
private int mSurface;
@SuppressWarnings("unused")
@@ -226,9 +232,20 @@ public class Surface implements Parcelable {
* set the orientation of the given display.
* @param display
* @param orientation
* @param flags
* {@hide}
*/
public static native void setOrientation(int display, int orientation);
public static native void setOrientation(int display, int orientation, int flags);
/**
* set the orientation of the given display.
* @param display
* @param orientation
*/
public static void setOrientation(int display, int orientation) {
setOrientation(display, orientation, 0);
}
/**
* set surface parameters.
* needs to be inside open/closeTransaction block

View File

@@ -324,9 +324,9 @@ static void Surface_closeTransaction(
}
static void Surface_setOrientation(
JNIEnv* env, jobject clazz, jint display, jint orientation)
JNIEnv* env, jobject clazz, jint display, jint orientation, jint flags)
{
int err = SurfaceComposerClient::setOrientation(display, orientation);
int err = SurfaceComposerClient::setOrientation(display, orientation, flags);
if (err < 0) {
doThrow(env, "java/lang/IllegalArgumentException", NULL);
}
@@ -565,7 +565,7 @@ static JNINativeMethod gSurfaceMethods[] = {
{"unlockCanvas", "(Landroid/graphics/Canvas;)V", (void*)Surface_unlockCanvas },
{"openTransaction", "()V", (void*)Surface_openTransaction },
{"closeTransaction", "()V", (void*)Surface_closeTransaction },
{"setOrientation", "(II)V", (void*)Surface_setOrientation },
{"setOrientation", "(III)V", (void*)Surface_setOrientation },
{"freezeDisplay", "(I)V", (void*)Surface_freezeDisplay },
{"unfreezeDisplay", "(I)V", (void*)Surface_unfreezeDisplay },
{"setLayer", "(I)V", (void*)Surface_setLayer },

View File

@@ -81,6 +81,11 @@ public:
eOrientation270 = 3,
eOrientationSwapMask = 0x01
};
// flags for setOrientation
enum {
eOrientationAnimationDisable = 0x00000001
};
/* create connection with surface flinger, requires
* ACCESS_SURFACE_FLINGER permission
@@ -100,7 +105,7 @@ public:
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) = 0;
/* Set display orientation. recquires ACCESS_SURFACE_FLINGER permission */
virtual int setOrientation(DisplayID dpy, int orientation) = 0;
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags) = 0;
/* signal that we're done booting.
* recquires ACCESS_SURFACE_FLINGER permission

View File

@@ -97,7 +97,7 @@ public:
static status_t unfreezeDisplay(DisplayID dpy, uint32_t flags = 0);
//! Set the orientation of the given display
static int setOrientation(DisplayID dpy, int orientation);
static int setOrientation(DisplayID dpy, int orientation, uint32_t flags);
// Query the number of displays
static ssize_t getNumberOfDisplays();

View File

@@ -44,10 +44,14 @@ OrientationAnimation::~OrientationAnimation()
{
}
void OrientationAnimation::onOrientationChanged()
void OrientationAnimation::onOrientationChanged(uint32_t type)
{
if (mState == DONE)
mState = PREPARE;
if (mState == DONE) {
mType = type;
if (!(type & ISurfaceComposer::eOrientationAnimationDisable)) {
mState = PREPARE;
}
}
}
void OrientationAnimation::onAnimationFinished()
@@ -82,14 +86,7 @@ bool OrientationAnimation::run_impl()
bool OrientationAnimation::done()
{
if (mFlinger->isFrozen()) {
// we are not allowed to draw, but pause a bit to make sure
// apps don't end up using the whole CPU, if they depend on
// surfaceflinger for synchronization.
usleep(8333); // 8.3ms ~ 120fps
return true;
}
return false;
return done_impl();
}
bool OrientationAnimation::prepare()
@@ -115,11 +112,13 @@ bool OrientationAnimation::prepare()
LayerOrientationAnimBase* l;
l = new LayerOrientationAnim(
mFlinger.get(), 0, this, bitmap, bitmapIn);
//l = new LayerOrientationAnimRotate(
// mFlinger.get(), 0, this, bitmap, bitmapIn);
if (mType & 0x80) {
l = new LayerOrientationAnimRotate(
mFlinger.get(), 0, this, bitmap, bitmapIn);
} else {
l = new LayerOrientationAnim(
mFlinger.get(), 0, this, bitmap, bitmapIn);
}
l->initStates(w, h, 0);
l->setLayer(INT_MAX-1);

View File

@@ -36,11 +36,11 @@ public:
OrientationAnimation(const sp<SurfaceFlinger>& flinger);
virtual ~OrientationAnimation();
void onOrientationChanged();
void onOrientationChanged(uint32_t type);
void onAnimationFinished();
inline bool run() {
if (LIKELY(mState == DONE))
return false;
return done_impl();
return run_impl();
}
@@ -54,7 +54,18 @@ private:
};
bool run_impl();
bool done();
inline bool done_impl() {
if (mFlinger->isFrozen()) {
// we are not allowed to draw, but pause a bit to make sure
// apps don't end up using the whole CPU, if they depend on
// surfaceflinger for synchronization.
usleep(8333); // 8.3ms ~ 120fps
return true;
}
return false;
}
bool done();
bool prepare();
bool phase1();
bool phase2();
@@ -64,6 +75,7 @@ private:
sp<MemoryDealer> mTemporaryDealer;
LayerOrientationAnimBase* mLayerOrientationAnim;
int mState;
uint32_t mType;
};
// ---------------------------------------------------------------------------

View File

@@ -655,6 +655,7 @@ void SurfaceFlinger::handleTransaction(uint32_t transactionFlags)
const int dpy = 0;
const int orientation = mCurrentState.orientation;
const uint32_t type = mCurrentState.orientationType;
GraphicPlane& plane(graphicPlane(dpy));
plane.setOrientation(orientation);
@@ -673,8 +674,8 @@ void SurfaceFlinger::handleTransaction(uint32_t transactionFlags)
mVisibleRegionsDirty = true;
mDirtyRegion.set(hw.bounds());
mOrientationAnimation->onOrientationChanged();
mFreezeDisplayTime = 0;
mOrientationAnimation->onOrientationChanged(type);
}
if (mCurrentState.freezeDisplay != mDrawingState.freezeDisplay) {
@@ -1201,7 +1202,8 @@ status_t SurfaceFlinger::unfreezeDisplay(DisplayID dpy, uint32_t flags)
return NO_ERROR;
}
int SurfaceFlinger::setOrientation(DisplayID dpy, int orientation)
int SurfaceFlinger::setOrientation(DisplayID dpy,
int orientation, uint32_t flags)
{
if (UNLIKELY(uint32_t(dpy) >= DISPLAY_COUNT))
return BAD_VALUE;
@@ -1209,6 +1211,7 @@ int SurfaceFlinger::setOrientation(DisplayID dpy, int orientation)
Mutex::Autolock _l(mStateLock);
if (mCurrentState.orientation != orientation) {
if (uint32_t(orientation)<=eOrientation270 || orientation==42) {
mCurrentState.orientationType = flags;
mCurrentState.orientation = orientation;
setTransactionFlags(eTransactionNeeded);
mTransactionCV.wait(mStateLock);

View File

@@ -167,7 +167,7 @@ public:
virtual void closeGlobalTransaction();
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags);
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags);
virtual int setOrientation(DisplayID dpy, int orientation);
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags);
virtual void signal() const;
virtual status_t requestGPU(const sp<IGPUCallback>& callback,
gpu_info_t* gpu);
@@ -244,6 +244,7 @@ private:
}
LayerVector layersSortedByZ;
uint8_t orientation;
uint8_t orientationType;
uint8_t freezeDisplay;
};

View File

@@ -96,12 +96,13 @@ public:
return reply.readInt32();
}
virtual int setOrientation(DisplayID dpy, int orientation)
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags)
{
Parcel data, reply;
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
data.writeInt32(dpy);
data.writeInt32(orientation);
data.writeInt32(flags);
remote()->transact(BnSurfaceComposer::SET_ORIENTATION, data, &reply);
return reply.readInt32();
}
@@ -184,7 +185,8 @@ status_t BnSurfaceComposer::onTransact(
case SET_ORIENTATION: {
DisplayID dpy = data.readInt32();
int orientation = data.readInt32();
reply->writeInt32( setOrientation(dpy, orientation) );
uint32_t flags = data.readInt32();
reply->writeInt32( setOrientation(dpy, orientation, flags) );
} break;
case FREEZE_DISPLAY: {
DisplayID dpy = data.readInt32();

View File

@@ -813,10 +813,11 @@ status_t SurfaceComposerClient::unfreezeDisplay(DisplayID dpy, uint32_t flags)
return sm->unfreezeDisplay(dpy, flags);
}
int SurfaceComposerClient::setOrientation(DisplayID dpy, int orientation)
int SurfaceComposerClient::setOrientation(DisplayID dpy,
int orientation, uint32_t flags)
{
const sp<ISurfaceComposer>& sm(_get_surface_manager());
return sm->setOrientation(dpy, orientation);
return sm->setOrientation(dpy, orientation, flags);
}
status_t SurfaceComposerClient::openTransaction()