Loading services/surfaceflinger/DisplayDevice.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -613,3 +613,17 @@ void DisplayDevice::dump(String8& result) const { mDisplaySurface->dumpAsString(surfaceDump); result.append(surfaceDump); } std::atomic<int32_t> DisplayDeviceState::nextDisplayId(1); DisplayDeviceState::DisplayDeviceState(DisplayDevice::DisplayType type, bool isSecure) : type(type), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(isSecure) { viewport.makeInvalid(); frame.makeInvalid(); } services/surfaceflinger/DisplayDevice.h +22 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,28 @@ private: #endif }; struct DisplayDeviceState { DisplayDeviceState() = default; DisplayDeviceState(DisplayDevice::DisplayType type, bool isSecure); bool isValid() const { return type >= 0; } bool isMainDisplay() const { return type == DisplayDevice::DISPLAY_PRIMARY; } bool isVirtualDisplay() const { return type >= DisplayDevice::DISPLAY_VIRTUAL; } static std::atomic<int32_t> nextDisplayId; int32_t displayId = nextDisplayId++; DisplayDevice::DisplayType type = DisplayDevice::DISPLAY_ID_INVALID; sp<IGraphicBufferProducer> surface; uint32_t layerStack = DisplayDevice::NO_LAYER_STACK; Rect viewport; Rect frame; uint8_t orientation = 0; uint32_t width = 0; uint32_t height = 0; String8 displayName; bool isSecure = false; }; }; // namespace android #endif // ANDROID_DISPLAY_DEVICE_H services/surfaceflinger/SurfaceFlinger.cpp +19 −31 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ sp<IBinder> SurfaceFlinger::createDisplay(const String8& displayName, DisplayDeviceState info(DisplayDevice::DISPLAY_VIRTUAL, secure); info.displayName = displayName; mCurrentState.displays.add(token, info); mInterceptor.saveDisplayCreation(info); return token; } Loading @@ -279,7 +279,7 @@ void SurfaceFlinger::destroyDisplay(const sp<IBinder>& display) { ALOGE("destroyDisplay called for non-virtual display"); return; } mInterceptor.saveDisplayDeletion(info.displayId); mCurrentState.displays.removeItemsAt(idx); setTransactionFlags(eDisplayTransactionNeeded); } Loading @@ -292,6 +292,7 @@ void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type) // All non-virtual displays are currently considered secure. DisplayDeviceState info(type, true); mCurrentState.displays.add(mBuiltinDisplays[type], info); mInterceptor.saveDisplayCreation(info); } sp<IBinder> SurfaceFlinger::getBuiltInDisplay(int32_t id) { Loading Loading @@ -2371,7 +2372,9 @@ void SurfaceFlinger::setTransactionState( } if (transactionFlags) { mInterceptor.saveLayerUpdates(state, flags); if (mInterceptor.isEnabled()) { mInterceptor.saveTransaction(state, mCurrentState.displays, displays, flags); } // this triggers the transaction setTransactionFlags(transactionFlags); Loading Loading @@ -2567,7 +2570,7 @@ status_t SurfaceFlinger::createLayer( if (result != NO_ERROR) { return result; } mInterceptor.saveLayerCreate(layer); mInterceptor.saveSurfaceCreation(layer); setTransactionFlags(eTransactionNeeded); return result; Loading Loading @@ -2615,7 +2618,7 @@ status_t SurfaceFlinger::onLayerRemoved(const sp<Client>& client, const sp<IBind status_t err = NO_ERROR; sp<Layer> l(client->getLayerUser(handle)); if (l != NULL) { mInterceptor.saveLayerDelete(l); mInterceptor.saveSurfaceDeletion(l); err = removeLayer(l); ALOGE_IF(err<0 && err != NAME_NOT_FOUND, "error removing layer=%p (%s)", l.get(), strerror(-err)); Loading Loading @@ -2694,6 +2697,16 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& hw, return; } if (mInterceptor.isEnabled()) { Mutex::Autolock _l(mStateLock); ssize_t idx = mCurrentState.displays.indexOfKey(hw->getDisplayToken()); if (idx < 0) { ALOGW("Surface Interceptor SavePowerMode: invalid display token"); return; } mInterceptor.savePowerModeUpdate(mCurrentState.displays.valueAt(idx).displayId, mode); } if (currentMode == HWC_POWER_MODE_OFF) { // Turn on the display getHwComposer().setPowerMode(type, mode); Loading Loading @@ -3363,7 +3376,7 @@ status_t SurfaceFlinger::onTransact( n = data.readInt32(); if (n) { ALOGV("Interceptor enabled"); mInterceptor.enable(mDrawingState.layersSortedByZ); mInterceptor.enable(mDrawingState.layersSortedByZ, mDrawingState.displays); } else{ ALOGV("Interceptor disabled"); Loading Loading @@ -3896,31 +3909,6 @@ int SurfaceFlinger::LayerVector::do_compare(const void* lhs, return l->sequence - r->sequence; } // --------------------------------------------------------------------------- SurfaceFlinger::DisplayDeviceState::DisplayDeviceState() : type(DisplayDevice::DISPLAY_ID_INVALID), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(false) { } SurfaceFlinger::DisplayDeviceState::DisplayDeviceState( DisplayDevice::DisplayType type, bool isSecure) : type(type), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(isSecure) { viewport.makeInvalid(); frame.makeInvalid(); } // --------------------------------------------------------------------------- }; // namespace android Loading services/surfaceflinger/SurfaceFlinger.h +0 −17 Original line number Diff line number Diff line Loading @@ -175,23 +175,6 @@ private: virtual int do_compare(const void* lhs, const void* rhs) const; }; struct DisplayDeviceState { DisplayDeviceState(); DisplayDeviceState(DisplayDevice::DisplayType type, bool isSecure); bool isValid() const { return type >= 0; } bool isMainDisplay() const { return type == DisplayDevice::DISPLAY_PRIMARY; } bool isVirtualDisplay() const { return type >= DisplayDevice::DISPLAY_VIRTUAL; } DisplayDevice::DisplayType type; sp<IGraphicBufferProducer> surface; uint32_t layerStack; Rect viewport; Rect frame; uint8_t orientation; uint32_t width, height; String8 displayName; bool isSecure; }; struct State { LayerVector layersSortedByZ; DefaultKeyedVector< wp<IBinder>, DisplayDeviceState> displays; Loading services/surfaceflinger/SurfaceFlinger_hwc1.cpp +19 −31 Original line number Diff line number Diff line Loading @@ -259,7 +259,7 @@ sp<IBinder> SurfaceFlinger::createDisplay(const String8& displayName, DisplayDeviceState info(DisplayDevice::DISPLAY_VIRTUAL, secure); info.displayName = displayName; mCurrentState.displays.add(token, info); mInterceptor.saveDisplayCreation(info); return token; } Loading @@ -277,7 +277,7 @@ void SurfaceFlinger::destroyDisplay(const sp<IBinder>& display) { ALOGE("destroyDisplay called for non-virtual display"); return; } mInterceptor.saveDisplayDeletion(info.displayId); mCurrentState.displays.removeItemsAt(idx); setTransactionFlags(eDisplayTransactionNeeded); } Loading @@ -289,6 +289,7 @@ void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type) // All non-virtual displays are currently considered secure. DisplayDeviceState info(type, true); mCurrentState.displays.add(mBuiltinDisplays[type], info); mInterceptor.saveDisplayCreation(info); } sp<IBinder> SurfaceFlinger::getBuiltInDisplay(int32_t id) { Loading Loading @@ -2287,7 +2288,9 @@ void SurfaceFlinger::setTransactionState( } if (transactionFlags) { mInterceptor.saveLayerUpdates(state, flags); if (mInterceptor.isEnabled()) { mInterceptor.saveTransaction(state, mCurrentState.displays, displays, flags); } // this triggers the transaction setTransactionFlags(transactionFlags); Loading Loading @@ -2483,7 +2486,7 @@ status_t SurfaceFlinger::createLayer( if (result != NO_ERROR) { return result; } mInterceptor.saveLayerCreate(layer); mInterceptor.saveSurfaceCreation(layer); setTransactionFlags(eTransactionNeeded); return result; Loading Loading @@ -2531,7 +2534,7 @@ status_t SurfaceFlinger::onLayerRemoved(const sp<Client>& client, const sp<IBind status_t err = NO_ERROR; sp<Layer> l(client->getLayerUser(handle)); if (l != NULL) { mInterceptor.saveLayerDelete(l); mInterceptor.saveSurfaceDeletion(l); err = removeLayer(l); ALOGE_IF(err<0 && err != NAME_NOT_FOUND, "error removing layer=%p (%s)", l.get(), strerror(-err)); Loading Loading @@ -2610,6 +2613,16 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& hw, return; } if (mInterceptor.isEnabled()) { Mutex::Autolock _l(mStateLock); ssize_t idx = mCurrentState.displays.indexOfKey(hw->getDisplayToken()); if (idx < 0) { ALOGW("Surface Interceptor SavePowerMode: invalid display token"); return; } mInterceptor.savePowerModeUpdate(mCurrentState.displays.valueAt(idx).displayId, mode); } if (currentMode == HWC_POWER_MODE_OFF) { // Turn on the display getHwComposer().setPowerMode(type, mode); Loading Loading @@ -3276,7 +3289,7 @@ status_t SurfaceFlinger::onTransact( n = data.readInt32(); if (n) { ALOGV("Interceptor enabled"); mInterceptor.enable(mDrawingState.layersSortedByZ); mInterceptor.enable(mDrawingState.layersSortedByZ, mDrawingState.displays); } else{ ALOGV("Interceptor disabled"); Loading Loading @@ -3803,31 +3816,6 @@ int SurfaceFlinger::LayerVector::do_compare(const void* lhs, return l->sequence - r->sequence; } // --------------------------------------------------------------------------- SurfaceFlinger::DisplayDeviceState::DisplayDeviceState() : type(DisplayDevice::DISPLAY_ID_INVALID), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(false) { } SurfaceFlinger::DisplayDeviceState::DisplayDeviceState( DisplayDevice::DisplayType type, bool isSecure) : type(type), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(isSecure) { viewport.makeInvalid(); frame.makeInvalid(); } // --------------------------------------------------------------------------- }; // namespace android Loading Loading
services/surfaceflinger/DisplayDevice.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -613,3 +613,17 @@ void DisplayDevice::dump(String8& result) const { mDisplaySurface->dumpAsString(surfaceDump); result.append(surfaceDump); } std::atomic<int32_t> DisplayDeviceState::nextDisplayId(1); DisplayDeviceState::DisplayDeviceState(DisplayDevice::DisplayType type, bool isSecure) : type(type), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(isSecure) { viewport.makeInvalid(); frame.makeInvalid(); }
services/surfaceflinger/DisplayDevice.h +22 −0 Original line number Diff line number Diff line Loading @@ -263,6 +263,28 @@ private: #endif }; struct DisplayDeviceState { DisplayDeviceState() = default; DisplayDeviceState(DisplayDevice::DisplayType type, bool isSecure); bool isValid() const { return type >= 0; } bool isMainDisplay() const { return type == DisplayDevice::DISPLAY_PRIMARY; } bool isVirtualDisplay() const { return type >= DisplayDevice::DISPLAY_VIRTUAL; } static std::atomic<int32_t> nextDisplayId; int32_t displayId = nextDisplayId++; DisplayDevice::DisplayType type = DisplayDevice::DISPLAY_ID_INVALID; sp<IGraphicBufferProducer> surface; uint32_t layerStack = DisplayDevice::NO_LAYER_STACK; Rect viewport; Rect frame; uint8_t orientation = 0; uint32_t width = 0; uint32_t height = 0; String8 displayName; bool isSecure = false; }; }; // namespace android #endif // ANDROID_DISPLAY_DEVICE_H
services/surfaceflinger/SurfaceFlinger.cpp +19 −31 Original line number Diff line number Diff line Loading @@ -261,7 +261,7 @@ sp<IBinder> SurfaceFlinger::createDisplay(const String8& displayName, DisplayDeviceState info(DisplayDevice::DISPLAY_VIRTUAL, secure); info.displayName = displayName; mCurrentState.displays.add(token, info); mInterceptor.saveDisplayCreation(info); return token; } Loading @@ -279,7 +279,7 @@ void SurfaceFlinger::destroyDisplay(const sp<IBinder>& display) { ALOGE("destroyDisplay called for non-virtual display"); return; } mInterceptor.saveDisplayDeletion(info.displayId); mCurrentState.displays.removeItemsAt(idx); setTransactionFlags(eDisplayTransactionNeeded); } Loading @@ -292,6 +292,7 @@ void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type) // All non-virtual displays are currently considered secure. DisplayDeviceState info(type, true); mCurrentState.displays.add(mBuiltinDisplays[type], info); mInterceptor.saveDisplayCreation(info); } sp<IBinder> SurfaceFlinger::getBuiltInDisplay(int32_t id) { Loading Loading @@ -2371,7 +2372,9 @@ void SurfaceFlinger::setTransactionState( } if (transactionFlags) { mInterceptor.saveLayerUpdates(state, flags); if (mInterceptor.isEnabled()) { mInterceptor.saveTransaction(state, mCurrentState.displays, displays, flags); } // this triggers the transaction setTransactionFlags(transactionFlags); Loading Loading @@ -2567,7 +2570,7 @@ status_t SurfaceFlinger::createLayer( if (result != NO_ERROR) { return result; } mInterceptor.saveLayerCreate(layer); mInterceptor.saveSurfaceCreation(layer); setTransactionFlags(eTransactionNeeded); return result; Loading Loading @@ -2615,7 +2618,7 @@ status_t SurfaceFlinger::onLayerRemoved(const sp<Client>& client, const sp<IBind status_t err = NO_ERROR; sp<Layer> l(client->getLayerUser(handle)); if (l != NULL) { mInterceptor.saveLayerDelete(l); mInterceptor.saveSurfaceDeletion(l); err = removeLayer(l); ALOGE_IF(err<0 && err != NAME_NOT_FOUND, "error removing layer=%p (%s)", l.get(), strerror(-err)); Loading Loading @@ -2694,6 +2697,16 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& hw, return; } if (mInterceptor.isEnabled()) { Mutex::Autolock _l(mStateLock); ssize_t idx = mCurrentState.displays.indexOfKey(hw->getDisplayToken()); if (idx < 0) { ALOGW("Surface Interceptor SavePowerMode: invalid display token"); return; } mInterceptor.savePowerModeUpdate(mCurrentState.displays.valueAt(idx).displayId, mode); } if (currentMode == HWC_POWER_MODE_OFF) { // Turn on the display getHwComposer().setPowerMode(type, mode); Loading Loading @@ -3363,7 +3376,7 @@ status_t SurfaceFlinger::onTransact( n = data.readInt32(); if (n) { ALOGV("Interceptor enabled"); mInterceptor.enable(mDrawingState.layersSortedByZ); mInterceptor.enable(mDrawingState.layersSortedByZ, mDrawingState.displays); } else{ ALOGV("Interceptor disabled"); Loading Loading @@ -3896,31 +3909,6 @@ int SurfaceFlinger::LayerVector::do_compare(const void* lhs, return l->sequence - r->sequence; } // --------------------------------------------------------------------------- SurfaceFlinger::DisplayDeviceState::DisplayDeviceState() : type(DisplayDevice::DISPLAY_ID_INVALID), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(false) { } SurfaceFlinger::DisplayDeviceState::DisplayDeviceState( DisplayDevice::DisplayType type, bool isSecure) : type(type), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(isSecure) { viewport.makeInvalid(); frame.makeInvalid(); } // --------------------------------------------------------------------------- }; // namespace android Loading
services/surfaceflinger/SurfaceFlinger.h +0 −17 Original line number Diff line number Diff line Loading @@ -175,23 +175,6 @@ private: virtual int do_compare(const void* lhs, const void* rhs) const; }; struct DisplayDeviceState { DisplayDeviceState(); DisplayDeviceState(DisplayDevice::DisplayType type, bool isSecure); bool isValid() const { return type >= 0; } bool isMainDisplay() const { return type == DisplayDevice::DISPLAY_PRIMARY; } bool isVirtualDisplay() const { return type >= DisplayDevice::DISPLAY_VIRTUAL; } DisplayDevice::DisplayType type; sp<IGraphicBufferProducer> surface; uint32_t layerStack; Rect viewport; Rect frame; uint8_t orientation; uint32_t width, height; String8 displayName; bool isSecure; }; struct State { LayerVector layersSortedByZ; DefaultKeyedVector< wp<IBinder>, DisplayDeviceState> displays; Loading
services/surfaceflinger/SurfaceFlinger_hwc1.cpp +19 −31 Original line number Diff line number Diff line Loading @@ -259,7 +259,7 @@ sp<IBinder> SurfaceFlinger::createDisplay(const String8& displayName, DisplayDeviceState info(DisplayDevice::DISPLAY_VIRTUAL, secure); info.displayName = displayName; mCurrentState.displays.add(token, info); mInterceptor.saveDisplayCreation(info); return token; } Loading @@ -277,7 +277,7 @@ void SurfaceFlinger::destroyDisplay(const sp<IBinder>& display) { ALOGE("destroyDisplay called for non-virtual display"); return; } mInterceptor.saveDisplayDeletion(info.displayId); mCurrentState.displays.removeItemsAt(idx); setTransactionFlags(eDisplayTransactionNeeded); } Loading @@ -289,6 +289,7 @@ void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type) // All non-virtual displays are currently considered secure. DisplayDeviceState info(type, true); mCurrentState.displays.add(mBuiltinDisplays[type], info); mInterceptor.saveDisplayCreation(info); } sp<IBinder> SurfaceFlinger::getBuiltInDisplay(int32_t id) { Loading Loading @@ -2287,7 +2288,9 @@ void SurfaceFlinger::setTransactionState( } if (transactionFlags) { mInterceptor.saveLayerUpdates(state, flags); if (mInterceptor.isEnabled()) { mInterceptor.saveTransaction(state, mCurrentState.displays, displays, flags); } // this triggers the transaction setTransactionFlags(transactionFlags); Loading Loading @@ -2483,7 +2486,7 @@ status_t SurfaceFlinger::createLayer( if (result != NO_ERROR) { return result; } mInterceptor.saveLayerCreate(layer); mInterceptor.saveSurfaceCreation(layer); setTransactionFlags(eTransactionNeeded); return result; Loading Loading @@ -2531,7 +2534,7 @@ status_t SurfaceFlinger::onLayerRemoved(const sp<Client>& client, const sp<IBind status_t err = NO_ERROR; sp<Layer> l(client->getLayerUser(handle)); if (l != NULL) { mInterceptor.saveLayerDelete(l); mInterceptor.saveSurfaceDeletion(l); err = removeLayer(l); ALOGE_IF(err<0 && err != NAME_NOT_FOUND, "error removing layer=%p (%s)", l.get(), strerror(-err)); Loading Loading @@ -2610,6 +2613,16 @@ void SurfaceFlinger::setPowerModeInternal(const sp<DisplayDevice>& hw, return; } if (mInterceptor.isEnabled()) { Mutex::Autolock _l(mStateLock); ssize_t idx = mCurrentState.displays.indexOfKey(hw->getDisplayToken()); if (idx < 0) { ALOGW("Surface Interceptor SavePowerMode: invalid display token"); return; } mInterceptor.savePowerModeUpdate(mCurrentState.displays.valueAt(idx).displayId, mode); } if (currentMode == HWC_POWER_MODE_OFF) { // Turn on the display getHwComposer().setPowerMode(type, mode); Loading Loading @@ -3276,7 +3289,7 @@ status_t SurfaceFlinger::onTransact( n = data.readInt32(); if (n) { ALOGV("Interceptor enabled"); mInterceptor.enable(mDrawingState.layersSortedByZ); mInterceptor.enable(mDrawingState.layersSortedByZ, mDrawingState.displays); } else{ ALOGV("Interceptor disabled"); Loading Loading @@ -3803,31 +3816,6 @@ int SurfaceFlinger::LayerVector::do_compare(const void* lhs, return l->sequence - r->sequence; } // --------------------------------------------------------------------------- SurfaceFlinger::DisplayDeviceState::DisplayDeviceState() : type(DisplayDevice::DISPLAY_ID_INVALID), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(false) { } SurfaceFlinger::DisplayDeviceState::DisplayDeviceState( DisplayDevice::DisplayType type, bool isSecure) : type(type), layerStack(DisplayDevice::NO_LAYER_STACK), orientation(0), width(0), height(0), isSecure(isSecure) { viewport.makeInvalid(); frame.makeInvalid(); } // --------------------------------------------------------------------------- }; // namespace android Loading