Have VirtualDisplays send SF resize messages when resizing

Change-Id: I76d15b22099a659450ec875836c9bf2b6584838f
This commit is contained in:
Michael Wright 2014-06-26 16:01:02 -07:00 committed by Michael Lentine
parent 99c7dc596a
commit 1f6078aef7
4 changed files with 19 additions and 1 deletions

View File

@ -146,6 +146,7 @@ public:
const sp<IGraphicBufferProducer>& bufferProducer);
static void setDisplayLayerStack(const sp<IBinder>& token,
uint32_t layerStack);
static void setDisplaySize(const sp<IBinder>& token, uint32_t width, uint32_t height);
/* setDisplayProjection() defines the projection of layer stacks
* to a given display.

View File

@ -113,7 +113,8 @@ struct DisplayState {
enum {
eSurfaceChanged = 0x01,
eLayerStackChanged = 0x02,
eDisplayProjectionChanged = 0x04
eDisplayProjectionChanged = 0x04,
eDisplaySizeChanged = 0x08
};
uint32_t what;
@ -123,6 +124,7 @@ struct DisplayState {
uint32_t orientation;
Rect viewport;
Rect frame;
uint32_t width, height;
status_t write(Parcel& output) const;
status_t read(const Parcel& input);
};

View File

@ -166,6 +166,7 @@ public:
uint32_t orientation,
const Rect& layerStackRect,
const Rect& displayRect);
void setDisplaySize(const sp<IBinder>& token, uint32_t width, uint32_t height);
static void setAnimationTransaction() {
Composer::getInstance().setAnimationTransactionImpl();
@ -426,6 +427,14 @@ void Composer::setDisplayProjection(const sp<IBinder>& token,
mForceSynchronous = true; // TODO: do we actually still need this?
}
void Composer::setDisplaySize(const sp<IBinder>& token, uint32_t width, uint32_t height) {
Mutex::Autolock _l(mLock);
DisplayState& s(getDisplayStateLocked(token));
s.width = width;
s.height = height;
s.what |= DisplayState::eDisplaySizeChanged;
}
// ---------------------------------------------------------------------------
SurfaceComposerClient::SurfaceComposerClient()
@ -621,6 +630,11 @@ void SurfaceComposerClient::setDisplayProjection(const sp<IBinder>& token,
layerStackRect, displayRect);
}
void SurfaceComposerClient::setDisplaySize(const sp<IBinder>& token,
uint32_t width, uint32_t height) {
Composer::getInstance().setDisplaySize(token, width, height);
}
// ----------------------------------------------------------------------------
status_t SurfaceComposerClient::getDisplayConfigs(

View File

@ -170,6 +170,7 @@ private:
Rect viewport;
Rect frame;
uint8_t orientation;
uint32_t width, height;
String8 displayName;
bool isSecure;
};