sf: Fix incorrect state reporting in dumpsys
Dumpsys utility accesses layer compositionType variable
with out proper protection. These variables are modified
during hwc_prepare call. Existing HAL lock protection is not
sufficient to address this issue. Failure to do this will
result in incorrect state reporting in dumpsys.
A new displayLock mutex in HWComposer will be used in both
dumpsys and draw calls to ensure correct state is accessed.
Change-Id: I8a57de59525adc0e089b3bed95c067c01e42b666
(cherry picked from commit e54506b81a
)
This commit is contained in:
parent
23e16bb5da
commit
e04e4edcd1
@ -635,6 +635,7 @@ status_t HWComposer::setFramebufferTarget(int32_t id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
status_t HWComposer::prepare() {
|
status_t HWComposer::prepare() {
|
||||||
|
Mutex::Autolock _l(mDisplayLock);
|
||||||
for (size_t i=0 ; i<mNumDisplays ; i++) {
|
for (size_t i=0 ; i<mNumDisplays ; i++) {
|
||||||
DisplayData& disp(mDisplayData[i]);
|
DisplayData& disp(mDisplayData[i]);
|
||||||
if (disp.framebufferTarget) {
|
if (disp.framebufferTarget) {
|
||||||
@ -1145,6 +1146,7 @@ static String8 getFormatStr(PixelFormat format) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void HWComposer::dump(String8& result) const {
|
void HWComposer::dump(String8& result) const {
|
||||||
|
Mutex::Autolock _l(mDisplayLock);
|
||||||
if (mHwc) {
|
if (mHwc) {
|
||||||
result.appendFormat("Hardware Composer state (version %08x):\n", hwcApiVersion(mHwc));
|
result.appendFormat("Hardware Composer state (version %08x):\n", hwcApiVersion(mHwc));
|
||||||
result.appendFormat(" mDebugForceFakeVSync=%d\n", mDebugForceFakeVSync);
|
result.appendFormat(" mDebugForceFakeVSync=%d\n", mDebugForceFakeVSync);
|
||||||
|
@ -354,6 +354,8 @@ private:
|
|||||||
// mLists[i>0] can be NULL. that display is to be ignored
|
// mLists[i>0] can be NULL. that display is to be ignored
|
||||||
struct hwc_display_contents_1* mLists[MAX_HWC_DISPLAYS];
|
struct hwc_display_contents_1* mLists[MAX_HWC_DISPLAYS];
|
||||||
DisplayData mDisplayData[MAX_HWC_DISPLAYS];
|
DisplayData mDisplayData[MAX_HWC_DISPLAYS];
|
||||||
|
// protect mDisplayData from races between prepare and dump
|
||||||
|
mutable Mutex mDisplayLock;
|
||||||
size_t mNumDisplays;
|
size_t mNumDisplays;
|
||||||
|
|
||||||
cb_context* mCBContext;
|
cb_context* mCBContext;
|
||||||
|
Loading…
Reference in New Issue
Block a user