am 075e4c3d: Merge "SurfaceFlinger: update orientation via transactions" into ics-mr0
* commit '075e4c3d2e6a8a9eb3506dfedc8da938fb65fb65': SurfaceFlinger: update orientation via transactions
This commit is contained in:
commit
951491f897
@ -80,6 +80,7 @@ public:
|
|||||||
eOrientation90 = 1,
|
eOrientation90 = 1,
|
||||||
eOrientation180 = 2,
|
eOrientation180 = 2,
|
||||||
eOrientation270 = 3,
|
eOrientation270 = 3,
|
||||||
|
eOrientationUnchanged = 4,
|
||||||
eOrientationSwapMask = 0x01
|
eOrientationSwapMask = 0x01
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -101,15 +102,8 @@ public:
|
|||||||
virtual sp<IMemoryHeap> getCblk() const = 0;
|
virtual sp<IMemoryHeap> getCblk() const = 0;
|
||||||
|
|
||||||
/* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
|
/* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
|
||||||
virtual void setTransactionState(const Vector<ComposerState>& state) = 0;
|
virtual void setTransactionState(const Vector<ComposerState>& state,
|
||||||
|
int orientation) = 0;
|
||||||
/* [un]freeze display. requires ACCESS_SURFACE_FLINGER permission */
|
|
||||||
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) = 0;
|
|
||||||
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) = 0;
|
|
||||||
|
|
||||||
/* Set display orientation. requires ACCESS_SURFACE_FLINGER permission
|
|
||||||
* No flags are currently defined. Set flags to 0. */
|
|
||||||
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags) = 0;
|
|
||||||
|
|
||||||
/* signal that we're done booting.
|
/* signal that we're done booting.
|
||||||
* Requires ACCESS_SURFACE_FLINGER permission
|
* Requires ACCESS_SURFACE_FLINGER permission
|
||||||
|
@ -195,4 +195,3 @@ public:
|
|||||||
}; // namespace android
|
}; // namespace android
|
||||||
|
|
||||||
#endif // ANDROID_SF_SURFACE_COMPOSER_CLIENT_H
|
#endif // ANDROID_SF_SURFACE_COMPOSER_CLIENT_H
|
||||||
|
|
||||||
|
@ -78,7 +78,8 @@ public:
|
|||||||
return interface_cast<IMemoryHeap>(reply.readStrongBinder());
|
return interface_cast<IMemoryHeap>(reply.readStrongBinder());
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void setTransactionState(const Vector<ComposerState>& state)
|
virtual void setTransactionState(const Vector<ComposerState>& state,
|
||||||
|
int orientation)
|
||||||
{
|
{
|
||||||
Parcel data, reply;
|
Parcel data, reply;
|
||||||
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
|
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
|
||||||
@ -88,38 +89,8 @@ public:
|
|||||||
for ( ; b != e ; ++b ) {
|
for ( ; b != e ; ++b ) {
|
||||||
b->write(data);
|
b->write(data);
|
||||||
}
|
}
|
||||||
remote()->transact(BnSurfaceComposer::SET_TRANSACTION_STATE, data, &reply);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags)
|
|
||||||
{
|
|
||||||
Parcel data, reply;
|
|
||||||
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
|
|
||||||
data.writeInt32(dpy);
|
|
||||||
data.writeInt32(flags);
|
|
||||||
remote()->transact(BnSurfaceComposer::FREEZE_DISPLAY, data, &reply);
|
|
||||||
return reply.readInt32();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags)
|
|
||||||
{
|
|
||||||
Parcel data, reply;
|
|
||||||
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
|
|
||||||
data.writeInt32(dpy);
|
|
||||||
data.writeInt32(flags);
|
|
||||||
remote()->transact(BnSurfaceComposer::UNFREEZE_DISPLAY, data, &reply);
|
|
||||||
return reply.readInt32();
|
|
||||||
}
|
|
||||||
|
|
||||||
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(orientation);
|
||||||
data.writeInt32(flags);
|
remote()->transact(BnSurfaceComposer::SET_TRANSACTION_STATE, data, &reply);
|
||||||
remote()->transact(BnSurfaceComposer::SET_ORIENTATION, data, &reply);
|
|
||||||
return reply.readInt32();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void bootFinished()
|
virtual void bootFinished()
|
||||||
@ -232,26 +203,8 @@ status_t BnSurfaceComposer::onTransact(
|
|||||||
s.read(data);
|
s.read(data);
|
||||||
state.add(s);
|
state.add(s);
|
||||||
}
|
}
|
||||||
setTransactionState(state);
|
|
||||||
} break;
|
|
||||||
case SET_ORIENTATION: {
|
|
||||||
CHECK_INTERFACE(ISurfaceComposer, data, reply);
|
|
||||||
DisplayID dpy = data.readInt32();
|
|
||||||
int orientation = data.readInt32();
|
int orientation = data.readInt32();
|
||||||
uint32_t flags = data.readInt32();
|
setTransactionState(state, orientation);
|
||||||
reply->writeInt32( setOrientation(dpy, orientation, flags) );
|
|
||||||
} break;
|
|
||||||
case FREEZE_DISPLAY: {
|
|
||||||
CHECK_INTERFACE(ISurfaceComposer, data, reply);
|
|
||||||
DisplayID dpy = data.readInt32();
|
|
||||||
uint32_t flags = data.readInt32();
|
|
||||||
reply->writeInt32( freezeDisplay(dpy, flags) );
|
|
||||||
} break;
|
|
||||||
case UNFREEZE_DISPLAY: {
|
|
||||||
CHECK_INTERFACE(ISurfaceComposer, data, reply);
|
|
||||||
DisplayID dpy = data.readInt32();
|
|
||||||
uint32_t flags = data.readInt32();
|
|
||||||
reply->writeInt32( unfreezeDisplay(dpy, flags) );
|
|
||||||
} break;
|
} break;
|
||||||
case BOOT_FINISHED: {
|
case BOOT_FINISHED: {
|
||||||
CHECK_INTERFACE(ISurfaceComposer, data, reply);
|
CHECK_INTERFACE(ISurfaceComposer, data, reply);
|
||||||
|
@ -91,8 +91,10 @@ class Composer : public Singleton<Composer>
|
|||||||
|
|
||||||
mutable Mutex mLock;
|
mutable Mutex mLock;
|
||||||
SortedVector<ComposerState> mStates;
|
SortedVector<ComposerState> mStates;
|
||||||
|
int mOrientation;
|
||||||
|
|
||||||
Composer() : Singleton<Composer>() { }
|
Composer() : Singleton<Composer>(),
|
||||||
|
mOrientation(ISurfaceComposer::eOrientationUnchanged) { }
|
||||||
|
|
||||||
void closeGlobalTransactionImpl();
|
void closeGlobalTransactionImpl();
|
||||||
|
|
||||||
@ -119,6 +121,7 @@ public:
|
|||||||
status_t setFreezeTint(
|
status_t setFreezeTint(
|
||||||
const sp<SurfaceComposerClient>& client, SurfaceID id,
|
const sp<SurfaceComposerClient>& client, SurfaceID id,
|
||||||
uint32_t tint);
|
uint32_t tint);
|
||||||
|
status_t setOrientation(int orientation);
|
||||||
|
|
||||||
static void closeGlobalTransaction() {
|
static void closeGlobalTransaction() {
|
||||||
Composer::getInstance().closeGlobalTransactionImpl();
|
Composer::getInstance().closeGlobalTransactionImpl();
|
||||||
@ -133,14 +136,18 @@ void Composer::closeGlobalTransactionImpl() {
|
|||||||
sp<ISurfaceComposer> sm(getComposerService());
|
sp<ISurfaceComposer> sm(getComposerService());
|
||||||
|
|
||||||
Vector<ComposerState> transaction;
|
Vector<ComposerState> transaction;
|
||||||
|
int orientation;
|
||||||
|
|
||||||
{ // scope for the lock
|
{ // scope for the lock
|
||||||
Mutex::Autolock _l(mLock);
|
Mutex::Autolock _l(mLock);
|
||||||
transaction = mStates;
|
transaction = mStates;
|
||||||
mStates.clear();
|
mStates.clear();
|
||||||
|
|
||||||
|
orientation = mOrientation;
|
||||||
|
mOrientation = ISurfaceComposer::eOrientationUnchanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
sm->setTransactionState(transaction);
|
sm->setTransactionState(transaction, orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
layer_state_t* Composer::getLayerStateLocked(
|
layer_state_t* Composer::getLayerStateLocked(
|
||||||
@ -260,6 +267,12 @@ status_t Composer::setFreezeTint(const sp<SurfaceComposerClient>& client,
|
|||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status_t Composer::setOrientation(int orientation) {
|
||||||
|
Mutex::Autolock _l(mLock);
|
||||||
|
mOrientation = orientation;
|
||||||
|
return NO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
SurfaceComposerClient::SurfaceComposerClient()
|
SurfaceComposerClient::SurfaceComposerClient()
|
||||||
@ -427,6 +440,12 @@ status_t SurfaceComposerClient::setMatrix(SurfaceID id, float dsdx, float dtdx,
|
|||||||
return getComposer().setMatrix(this, id, dsdx, dtdx, dsdy, dtdy);
|
return getComposer().setMatrix(this, id, dsdx, dtdx, dsdy, dtdy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status_t SurfaceComposerClient::setOrientation(DisplayID dpy,
|
||||||
|
int orientation, uint32_t flags)
|
||||||
|
{
|
||||||
|
return Composer::getInstance().setOrientation(orientation);
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
status_t SurfaceComposerClient::getDisplayInfo(
|
status_t SurfaceComposerClient::getDisplayInfo(
|
||||||
@ -491,21 +510,14 @@ ssize_t SurfaceComposerClient::getNumberOfDisplays()
|
|||||||
|
|
||||||
status_t SurfaceComposerClient::freezeDisplay(DisplayID dpy, uint32_t flags)
|
status_t SurfaceComposerClient::freezeDisplay(DisplayID dpy, uint32_t flags)
|
||||||
{
|
{
|
||||||
sp<ISurfaceComposer> sm(getComposerService());
|
// This has been made a no-op because it can cause Gralloc buffer deadlocks.
|
||||||
return sm->freezeDisplay(dpy, flags);
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t SurfaceComposerClient::unfreezeDisplay(DisplayID dpy, uint32_t flags)
|
status_t SurfaceComposerClient::unfreezeDisplay(DisplayID dpy, uint32_t flags)
|
||||||
{
|
{
|
||||||
sp<ISurfaceComposer> sm(getComposerService());
|
// This has been made a no-op because it can cause Gralloc buffer deadlocks.
|
||||||
return sm->unfreezeDisplay(dpy, flags);
|
return NO_ERROR;
|
||||||
}
|
|
||||||
|
|
||||||
int SurfaceComposerClient::setOrientation(DisplayID dpy,
|
|
||||||
int orientation, uint32_t flags)
|
|
||||||
{
|
|
||||||
sp<ISurfaceComposer> sm(getComposerService());
|
|
||||||
return sm->setOrientation(dpy, orientation, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -572,4 +584,3 @@ size_t ScreenshotClient::getSize() const {
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
}; // namespace android
|
}; // namespace android
|
||||||
|
|
||||||
|
@ -1234,10 +1234,22 @@ uint32_t SurfaceFlinger::setTransactionFlags(uint32_t flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SurfaceFlinger::setTransactionState(const Vector<ComposerState>& state) {
|
void SurfaceFlinger::setTransactionState(const Vector<ComposerState>& state,
|
||||||
|
int orientation) {
|
||||||
Mutex::Autolock _l(mStateLock);
|
Mutex::Autolock _l(mStateLock);
|
||||||
|
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
|
if (mCurrentState.orientation != orientation) {
|
||||||
|
if (uint32_t(orientation)<=eOrientation270 || orientation==42) {
|
||||||
|
mCurrentState.orientation = orientation;
|
||||||
|
flags |= eTransactionNeeded;
|
||||||
|
mResizeTransationPending = true;
|
||||||
|
} else if (orientation != eOrientationUnchanged) {
|
||||||
|
LOGW("setTransactionState: ignoring unrecognized orientation: %d",
|
||||||
|
orientation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const size_t count = state.size();
|
const size_t count = state.size();
|
||||||
for (size_t i=0 ; i<count ; i++) {
|
for (size_t i=0 ; i<count ; i++) {
|
||||||
const ComposerState& s(state[i]);
|
const ComposerState& s(state[i]);
|
||||||
|
@ -167,7 +167,8 @@ public:
|
|||||||
virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc();
|
virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc();
|
||||||
virtual sp<IMemoryHeap> getCblk() const;
|
virtual sp<IMemoryHeap> getCblk() const;
|
||||||
virtual void bootFinished();
|
virtual void bootFinished();
|
||||||
virtual void setTransactionState(const Vector<ComposerState>& state);
|
virtual void setTransactionState(const Vector<ComposerState>& state,
|
||||||
|
int orientation);
|
||||||
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags);
|
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags);
|
||||||
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags);
|
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags);
|
||||||
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags);
|
virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags);
|
||||||
|
Loading…
Reference in New Issue
Block a user