Loading services/surfaceflinger/Layer.cpp +64 −10 Original line number Diff line number Diff line Loading @@ -573,19 +573,25 @@ void Layer::setGeometry( const Transform& tr(displayDevice->getTransform()); Rect transformedFrame = tr.transform(frame); auto error = hwcLayer->setDisplayFrame(transformedFrame); ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set display frame " "[%d, %d, %d, %d]: %s (%d)", mName.string(), transformedFrame.left, transformedFrame.top, transformedFrame.right, transformedFrame.bottom, to_string(error).c_str(), static_cast<int32_t>(error)); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set display frame [%d, %d, %d, %d]: %s (%d)", mName.string(), transformedFrame.left, transformedFrame.top, transformedFrame.right, transformedFrame.bottom, to_string(error).c_str(), static_cast<int32_t>(error)); } else { hwcInfo.displayFrame = transformedFrame; } FloatRect sourceCrop = computeCrop(displayDevice); error = hwcLayer->setSourceCrop(sourceCrop); ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set source crop " "[%.3f, %.3f, %.3f, %.3f]: %s (%d)", mName.string(), sourceCrop.left, sourceCrop.top, sourceCrop.right, sourceCrop.bottom, to_string(error).c_str(), if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set source crop [%.3f, %.3f, %.3f, %.3f]: " "%s (%d)", mName.string(), sourceCrop.left, sourceCrop.top, sourceCrop.right, sourceCrop.bottom, to_string(error).c_str(), static_cast<int32_t>(error)); } else { hwcInfo.sourceCrop = sourceCrop; } error = hwcLayer->setPlaneAlpha(s.alpha); ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set plane alpha %.3f: " Loading Loading @@ -2217,6 +2223,54 @@ void Layer::dump(String8& result, Colorizer& colorizer) const } } #ifdef USE_HWC2 void Layer::miniDumpHeader(String8& result) { result.append("----------------------------------------"); result.append("---------------------------------------\n"); result.append(" Layer name\n"); result.append(" Z | "); result.append(" Comp Type | "); result.append(" Disp Frame (LTRB) | "); result.append(" Source Crop (LTRB)\n"); result.append("----------------------------------------"); result.append("---------------------------------------\n"); } void Layer::miniDump(String8& result, int32_t hwcId) const { if (mHwcLayers.count(hwcId) == 0) { return; } String8 name; if (mName.length() > 77) { std::string shortened; shortened.append(mName.string(), 36); shortened.append("[...]"); shortened.append(mName.string() + (mName.length() - 36), 36); name = shortened.c_str(); } else { name = mName; } result.appendFormat(" %s\n", name.string()); const Layer::State& layerState(getDrawingState()); const HWCInfo& hwcInfo = mHwcLayers.at(hwcId); result.appendFormat(" %10u | ", layerState.z); result.appendFormat("%10s | ", to_string(getCompositionType(hwcId)).c_str()); const Rect& frame = hwcInfo.displayFrame; result.appendFormat("%4d %4d %4d %4d | ", frame.left, frame.top, frame.right, frame.bottom); const FloatRect& crop = hwcInfo.sourceCrop; result.appendFormat("%6.1f %6.1f %6.1f %6.1f\n", crop.left, crop.top, crop.right, crop.bottom); result.append("- - - - - - - - - - - - - - - - - - - - "); result.append("- - - - - - - - - - - - - - - - - - - -\n"); } #endif void Layer::dumpFrameStats(String8& result) const { mFrameTracker.dumpStats(result); } Loading services/surfaceflinger/Layer.h +6 −0 Original line number Diff line number Diff line Loading @@ -397,6 +397,10 @@ public: /* always call base class first */ void dump(String8& result, Colorizer& colorizer) const; #ifdef USE_HWC2 static void miniDumpHeader(String8& result); void miniDump(String8& result, int32_t hwcId) const; #endif void dumpFrameStats(String8& result) const; void clearFrameStats(); void logFrameStats(); Loading Loading @@ -610,6 +614,8 @@ private: bool forceClientComposition; HWC2::Composition compositionType; bool clearClientTarget; Rect displayFrame; FloatRect sourceCrop; }; std::unordered_map<int32_t, HWCInfo> mHwcLayers; #else Loading services/surfaceflinger/SurfaceFlinger.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -3146,6 +3146,26 @@ void SurfaceFlinger::dumpAllLocked(const Vector<String16>& args, size_t& index, * VSYNC state */ mEventThread->dump(result); result.append("\n"); /* * HWC layer minidump */ for (size_t d = 0; d < mDisplays.size(); d++) { const sp<const DisplayDevice>& displayDevice(mDisplays[d]); int32_t hwcId = displayDevice->getHwcDisplayId(); if (hwcId == DisplayDevice::DISPLAY_ID_INVALID) { continue; } result.appendFormat("Display %d HWC layers:\n", hwcId); Layer::miniDumpHeader(result); for (size_t l = 0; l < count; l++) { const sp<Layer>& layer(currentLayers[l]); layer->miniDump(result, hwcId); } result.append("\n"); } /* * Dump HWComposer state Loading Loading
services/surfaceflinger/Layer.cpp +64 −10 Original line number Diff line number Diff line Loading @@ -573,19 +573,25 @@ void Layer::setGeometry( const Transform& tr(displayDevice->getTransform()); Rect transformedFrame = tr.transform(frame); auto error = hwcLayer->setDisplayFrame(transformedFrame); ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set display frame " "[%d, %d, %d, %d]: %s (%d)", mName.string(), transformedFrame.left, transformedFrame.top, transformedFrame.right, transformedFrame.bottom, to_string(error).c_str(), static_cast<int32_t>(error)); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set display frame [%d, %d, %d, %d]: %s (%d)", mName.string(), transformedFrame.left, transformedFrame.top, transformedFrame.right, transformedFrame.bottom, to_string(error).c_str(), static_cast<int32_t>(error)); } else { hwcInfo.displayFrame = transformedFrame; } FloatRect sourceCrop = computeCrop(displayDevice); error = hwcLayer->setSourceCrop(sourceCrop); ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set source crop " "[%.3f, %.3f, %.3f, %.3f]: %s (%d)", mName.string(), sourceCrop.left, sourceCrop.top, sourceCrop.right, sourceCrop.bottom, to_string(error).c_str(), if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set source crop [%.3f, %.3f, %.3f, %.3f]: " "%s (%d)", mName.string(), sourceCrop.left, sourceCrop.top, sourceCrop.right, sourceCrop.bottom, to_string(error).c_str(), static_cast<int32_t>(error)); } else { hwcInfo.sourceCrop = sourceCrop; } error = hwcLayer->setPlaneAlpha(s.alpha); ALOGE_IF(error != HWC2::Error::None, "[%s] Failed to set plane alpha %.3f: " Loading Loading @@ -2217,6 +2223,54 @@ void Layer::dump(String8& result, Colorizer& colorizer) const } } #ifdef USE_HWC2 void Layer::miniDumpHeader(String8& result) { result.append("----------------------------------------"); result.append("---------------------------------------\n"); result.append(" Layer name\n"); result.append(" Z | "); result.append(" Comp Type | "); result.append(" Disp Frame (LTRB) | "); result.append(" Source Crop (LTRB)\n"); result.append("----------------------------------------"); result.append("---------------------------------------\n"); } void Layer::miniDump(String8& result, int32_t hwcId) const { if (mHwcLayers.count(hwcId) == 0) { return; } String8 name; if (mName.length() > 77) { std::string shortened; shortened.append(mName.string(), 36); shortened.append("[...]"); shortened.append(mName.string() + (mName.length() - 36), 36); name = shortened.c_str(); } else { name = mName; } result.appendFormat(" %s\n", name.string()); const Layer::State& layerState(getDrawingState()); const HWCInfo& hwcInfo = mHwcLayers.at(hwcId); result.appendFormat(" %10u | ", layerState.z); result.appendFormat("%10s | ", to_string(getCompositionType(hwcId)).c_str()); const Rect& frame = hwcInfo.displayFrame; result.appendFormat("%4d %4d %4d %4d | ", frame.left, frame.top, frame.right, frame.bottom); const FloatRect& crop = hwcInfo.sourceCrop; result.appendFormat("%6.1f %6.1f %6.1f %6.1f\n", crop.left, crop.top, crop.right, crop.bottom); result.append("- - - - - - - - - - - - - - - - - - - - "); result.append("- - - - - - - - - - - - - - - - - - - -\n"); } #endif void Layer::dumpFrameStats(String8& result) const { mFrameTracker.dumpStats(result); } Loading
services/surfaceflinger/Layer.h +6 −0 Original line number Diff line number Diff line Loading @@ -397,6 +397,10 @@ public: /* always call base class first */ void dump(String8& result, Colorizer& colorizer) const; #ifdef USE_HWC2 static void miniDumpHeader(String8& result); void miniDump(String8& result, int32_t hwcId) const; #endif void dumpFrameStats(String8& result) const; void clearFrameStats(); void logFrameStats(); Loading Loading @@ -610,6 +614,8 @@ private: bool forceClientComposition; HWC2::Composition compositionType; bool clearClientTarget; Rect displayFrame; FloatRect sourceCrop; }; std::unordered_map<int32_t, HWCInfo> mHwcLayers; #else Loading
services/surfaceflinger/SurfaceFlinger.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -3146,6 +3146,26 @@ void SurfaceFlinger::dumpAllLocked(const Vector<String16>& args, size_t& index, * VSYNC state */ mEventThread->dump(result); result.append("\n"); /* * HWC layer minidump */ for (size_t d = 0; d < mDisplays.size(); d++) { const sp<const DisplayDevice>& displayDevice(mDisplays[d]); int32_t hwcId = displayDevice->getHwcDisplayId(); if (hwcId == DisplayDevice::DISPLAY_ID_INVALID) { continue; } result.appendFormat("Display %d HWC layers:\n", hwcId); Layer::miniDumpHeader(result); for (size_t l = 0; l < count; l++) { const sp<Layer>& layer(currentLayers[l]); layer->miniDump(result, hwcId); } result.append("\n"); } /* * Dump HWComposer state Loading