Loading services/surfaceflinger/Layer.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -1533,6 +1533,12 @@ void Layer::miniDump(String8& result, int32_t displayId) const { 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("- - - - - - - - - - - - - - - -\n"); std::string compositionInfoStr; getBE().compositionInfo.dump(compositionInfoStr, "compositionInfo"); result.append(compositionInfoStr.c_str()); result.append("- - - - - - - - - - - - - - - -"); result.append("- - - - - - - - - - - - - - - -"); result.append("- - - - - - - - - - - - - - -\n"); Loading services/surfaceflinger/LayerBE.cpp +82 −33 Original line number Diff line number Diff line Loading @@ -20,6 +20,11 @@ #define ATRACE_TAG ATRACE_TAG_GRAPHICS #include "Layer.h" #include "RenderEngine/RenderEngine.h" #include "android-base/stringprintf.h" #include <string> namespace android { Loading @@ -41,50 +46,94 @@ void LayerBE::onLayerDisplayed(const sp<Fence>& releaseFence) { mLayer->onLayerDisplayed(releaseFence); } void CompositionInfo::dumpHwc(const char* tag) const { ALOGV("[%s]\thwcLayer=%p", tag, hwc.hwcLayer.get()); ALOGV("[%s]\tfence=%p", tag, hwc.fence.get()); ALOGV("[%s]\ttransform=%d", tag, hwc.transform); ALOGV("[%s]\tz=%d", tag, hwc.z); ALOGV("[%s]\ttype=%d", tag, hwc.type); ALOGV("[%s]\tappId=%d", tag, hwc.appId); ALOGV("[%s]\tdisplayFrame=%4d %4d %4d %4d", tag, hwc.displayFrame.left, hwc.displayFrame.top, hwc.displayFrame.right, hwc.displayFrame.bottom); ALOGV("[%s]\talpha=%.3f", tag, hwc.alpha); ALOGV("[%s]\tsourceCrop=%6.1f %6.1f %6.1f %6.1f", tag, hwc.sourceCrop.left, hwc.sourceCrop.top, hwc.sourceCrop.right, hwc.sourceCrop.bottom); std::string label = tag; label+=":visibleRegion"; hwc.visibleRegion.dump(label.c_str()); label = tag; label+=":surfaceDamage"; hwc.surfaceDamage.dump(label.c_str()); void CompositionInfo::dump(const char* tag) const { std::string logString; dump(logString, tag); ALOGV("%s", logString.c_str()); } void CompositionInfo::dumpHwc(std::string& result, const char* tag) const { if (tag == nullptr) { result += base::StringPrintf("HWC parameters\n"); } else { result += base::StringPrintf("[%s]HWC parameters\n", tag); } result += base::StringPrintf("\thwcLayer=%p\n", static_cast<HWC2::Layer*>(&*hwc.hwcLayer)); result += base::StringPrintf("\tfence=%p\n", hwc.fence.get()); result += base::StringPrintf("\tblendMode=%d\n", hwc.blendMode); result += base::StringPrintf("\ttransform=%d\n", hwc.transform); result += base::StringPrintf("\tz=%d\n", hwc.z); result += base::StringPrintf("\ttype=%d\n", hwc.type); result += base::StringPrintf("\tappId=%d\n", hwc.appId); result += base::StringPrintf("\tdisplayFrame=%4d %4d %4d %4d\n", hwc.displayFrame.left, hwc.displayFrame.top, hwc.displayFrame.right, hwc.displayFrame.bottom); result += base::StringPrintf("\talpha=%.3f", hwc.alpha); result += base::StringPrintf("\tsourceCrop=%6.1f %6.1f %6.1f %6.1f\n", hwc.sourceCrop.left, hwc.sourceCrop.top, hwc.sourceCrop.right, hwc.sourceCrop.bottom); { // // Keep a conversion from std::string to String8 and back until Region can use std::string // String8 regionString; hwc.visibleRegion.dump(regionString, "visibleRegion"); hwc.surfaceDamage.dump(regionString, "surfaceDamage"); result += regionString.string(); } } void CompositionInfo::dumpRe(const char* tag) const { ALOGV("[%s]\tblackoutLayer=%d", tag, re.blackoutLayer); ALOGV("[%s]\tclearArea=%d", tag, re.clearArea); ALOGV("[%s]\tpreMultipliedAlpha=%d", tag, re.preMultipliedAlpha); ALOGV("[%s]\topaque=%d", tag, re.opaque); ALOGV("[%s]\tdisableTexture=%d", tag, re.disableTexture); ALOGV("[%s]\ttexture:name(%d), target(%d), size(%d/%d)", tag, re.texture.getTextureName(), re.texture.getTextureTarget(), (unsigned int)re.texture.getWidth(), (unsigned int)re.texture.getHeight()); ALOGV("[%s]\tuseIdentityTransform=%d\n", tag, re.useIdentityTransform); void CompositionInfo::dumpRe(std::string& result, const char* tag) const { if (tag == nullptr) { result += base::StringPrintf("RenderEngine parameters:\n"); } else { result += base::StringPrintf("[%s]RenderEngine parameters:\n", tag); } void CompositionInfo::dump(const char* tag) const { ALOGV("[%s] CompositionInfo", tag); ALOGV("[%s]\tLayerName: %s", tag, layerName.c_str()); ALOGV("[%s]\tCompositionType: %d", tag, compositionType); ALOGV("[%s]\tmBuffer = %p", tag, mBuffer.get()); ALOGV("[%s]\tmBufferSlot=%d", tag, mBufferSlot); Mesh& mesh = layer->getMesh(); result += base::StringPrintf("\tblackoutLayer=%d\n", re.blackoutLayer); result += base::StringPrintf("\tclearArea=%d\n", re.clearArea); result += base::StringPrintf("\tpreMultipliedAlpha=%d\n", re.preMultipliedAlpha); result += base::StringPrintf("\topaque=%d\n", re.opaque); result += base::StringPrintf("\tdisableTexture=%d\n", re.disableTexture); result += base::StringPrintf("\ttexture:name(%d), target(%d), size(%d/%d)\n", re.texture.getTextureName(), re.texture.getTextureTarget(), (unsigned int)re.texture.getWidth(), (unsigned int)re.texture.getHeight()); result += base::StringPrintf("\tuseIdentityTransform=%d\n", re.useIdentityTransform); Mesh::VertexArray<vec2> positions(mesh.getPositionArray<vec2>()); result += base::StringPrintf("\tpositions[(%6.1f,%6.1f), (%6.1f,%6.1f), (%6.1f,%6.1f), (%6.1f,%6.1f)]\n", positions[0][0], positions[0][1], positions[1][0], positions[1][1], positions[2][0], positions[2][1], positions[3][0], positions[3][1]); Mesh::VertexArray<vec2> texCoords(mesh.getTexCoordArray<vec2>()); result += base::StringPrintf("\ttexCoords[(%6.1f,%6.1f), (%6.1f,%6.1f),(%6.1f,%6.1f),(%6.1f,%6.1f)]\n", texCoords[0][0], texCoords[0][1], texCoords[1][0], texCoords[1][1], texCoords[2][0], texCoords[2][1], texCoords[3][0], texCoords[3][1]); } void CompositionInfo::dump(std::string& result, const char* tag) const { if (tag == nullptr) { result += base::StringPrintf("CompositionInfo\n"); } else { result += base::StringPrintf("[%s]CompositionInfo\n", tag); } result += base::StringPrintf("\tLayerName: %s\n", layerName.c_str()); result += base::StringPrintf("\tCompositionType: %d\n", compositionType); result += base::StringPrintf("\tmBuffer = %p\n", mBuffer.get()); result += base::StringPrintf("\tmBufferSlot=%d\n", mBufferSlot); result += base::StringPrintf("\tdisplayFrame=%4d %4d %4d %4d\n", hwc.displayFrame.left, hwc.displayFrame.top, hwc.displayFrame.right, hwc.displayFrame.bottom); result += base::StringPrintf("\talpha=%f\n", hwc.alpha); result += base::StringPrintf("\tsourceCrop=%6.1f %6.1f %6.1f %6.1f\n", hwc.sourceCrop.left, hwc.sourceCrop.top, hwc.sourceCrop.right, hwc.sourceCrop.bottom); switch (compositionType) { case HWC2::Composition::Device: dumpHwc(tag); dumpHwc(result, tag); break; case HWC2::Composition::Client: dumpRe(tag); dumpRe(result, tag); break; default: break; } } }; // namespace android services/surfaceflinger/LayerBE.h +3 −2 Original line number Diff line number Diff line Loading @@ -73,8 +73,9 @@ struct CompositionInfo { } re; void dump(const char* tag) const; void dumpHwc(const char* tag) const; void dumpRe(const char* tag) const; void dump(std::string& result, const char* tag = nullptr) const; void dumpHwc(std::string& result, const char* tag = nullptr) const; void dumpRe(std::string& result, const char* tag = nullptr) const; }; class LayerBE { Loading services/surfaceflinger/SurfaceFlinger.cpp +42 −2 Original line number Diff line number Diff line Loading @@ -91,6 +91,8 @@ #include <cutils/compiler.h> #include "android-base/stringprintf.h" #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h> #include <android/hardware/configstore/1.1/ISurfaceFlingerConfigs.h> #include <android/hardware/configstore/1.2/ISurfaceFlingerConfigs.h> Loading Loading @@ -1481,13 +1483,15 @@ void SurfaceFlinger::handleMessageRefresh() { mVsyncModulator.onRefreshed(mHadClientComposition); mLayersWithQueuedFrames.clear(); getBE().mEndOfFrameCompositionInfo = std::move(getBE().mCompositionInfo); for (const auto& [token, display] : mDisplays) { const auto displayId = display->getId(); for (auto& compositionInfo : getBE().mCompositionInfo[displayId]) { for (auto& compositionInfo : getBE().mEndOfFrameCompositionInfo[displayId]) { compositionInfo.hwc.hwcLayer = nullptr; } } mLayersWithQueuedFrames.clear(); } Loading Loading @@ -3923,6 +3927,13 @@ status_t SurfaceFlinger::doDump(int fd, const Vector<String16>& args, bool asPro dumpAll = false; } if ((index < numArgs) && (args[index] == String16("--frame-composition"))) { index++; dumpFrameCompositionInfo(result); dumpAll = false; } if ((index < numArgs) && (args[index] == String16("--display-identification"))) { index++; Loading Loading @@ -4181,6 +4192,31 @@ void SurfaceFlinger::dumpWideColorInfo(String8& result) const { result.append("\n"); } void SurfaceFlinger::dumpFrameCompositionInfo(String8& result) const { std::string stringResult; for (const auto& [token, display] : mDisplays) { const auto displayId = display->getId(); if (displayId == DisplayDevice::DISPLAY_ID_INVALID) { continue; } const auto& compositionInfoIt = getBE().mEndOfFrameCompositionInfo.find(displayId); if (compositionInfoIt == getBE().mEndOfFrameCompositionInfo.end()) { break; } const auto& compositionInfoList = compositionInfoIt->second; stringResult += base::StringPrintf("Display: %d\n", displayId); stringResult += base::StringPrintf("numComponents: %zu\n", compositionInfoList.size()); for (const auto& compositionInfo : compositionInfoList) { compositionInfo.dump(stringResult, nullptr); stringResult += base::StringPrintf("\n"); } } result.append(stringResult.c_str()); } LayersProto SurfaceFlinger::dumpProtoInfo(LayerVector::StateSet stateSet) const { LayersProto layersProto; const bool useDrawing = stateSet == LayerVector::StateSet::Drawing; Loading Loading @@ -4307,6 +4343,10 @@ void SurfaceFlinger::dumpAllLocked(const Vector<String16>& args, size_t& index, result.append(LayerProtoParser::layersToString(std::move(layerTree)).c_str()); result.append("\n"); result.append("\nFrame-Composition information:\n"); dumpFrameCompositionInfo(result); result.append("\n"); /* * Dump Display state */ Loading services/surfaceflinger/SurfaceFlinger.h +2 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ public: int32_t mComposerSequenceId; std::unordered_map<int32_t, std::vector<CompositionInfo>> mCompositionInfo; std::unordered_map<int32_t, std::vector<CompositionInfo>> mEndOfFrameCompositionInfo; }; Loading Loading @@ -754,6 +755,7 @@ private: void dumpBufferingStats(String8& result) const; void dumpDisplayIdentificationData(String8& result) const; void dumpWideColorInfo(String8& result) const; void dumpFrameCompositionInfo(String8& result) const; LayersProto dumpProtoInfo(LayerVector::StateSet stateSet) const; LayersProto dumpVisibleLayersProtoInfo(const DisplayDevice& display) const; Loading Loading
services/surfaceflinger/Layer.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -1533,6 +1533,12 @@ void Layer::miniDump(String8& result, int32_t displayId) const { 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("- - - - - - - - - - - - - - - -\n"); std::string compositionInfoStr; getBE().compositionInfo.dump(compositionInfoStr, "compositionInfo"); result.append(compositionInfoStr.c_str()); result.append("- - - - - - - - - - - - - - - -"); result.append("- - - - - - - - - - - - - - - -"); result.append("- - - - - - - - - - - - - - -\n"); Loading
services/surfaceflinger/LayerBE.cpp +82 −33 Original line number Diff line number Diff line Loading @@ -20,6 +20,11 @@ #define ATRACE_TAG ATRACE_TAG_GRAPHICS #include "Layer.h" #include "RenderEngine/RenderEngine.h" #include "android-base/stringprintf.h" #include <string> namespace android { Loading @@ -41,50 +46,94 @@ void LayerBE::onLayerDisplayed(const sp<Fence>& releaseFence) { mLayer->onLayerDisplayed(releaseFence); } void CompositionInfo::dumpHwc(const char* tag) const { ALOGV("[%s]\thwcLayer=%p", tag, hwc.hwcLayer.get()); ALOGV("[%s]\tfence=%p", tag, hwc.fence.get()); ALOGV("[%s]\ttransform=%d", tag, hwc.transform); ALOGV("[%s]\tz=%d", tag, hwc.z); ALOGV("[%s]\ttype=%d", tag, hwc.type); ALOGV("[%s]\tappId=%d", tag, hwc.appId); ALOGV("[%s]\tdisplayFrame=%4d %4d %4d %4d", tag, hwc.displayFrame.left, hwc.displayFrame.top, hwc.displayFrame.right, hwc.displayFrame.bottom); ALOGV("[%s]\talpha=%.3f", tag, hwc.alpha); ALOGV("[%s]\tsourceCrop=%6.1f %6.1f %6.1f %6.1f", tag, hwc.sourceCrop.left, hwc.sourceCrop.top, hwc.sourceCrop.right, hwc.sourceCrop.bottom); std::string label = tag; label+=":visibleRegion"; hwc.visibleRegion.dump(label.c_str()); label = tag; label+=":surfaceDamage"; hwc.surfaceDamage.dump(label.c_str()); void CompositionInfo::dump(const char* tag) const { std::string logString; dump(logString, tag); ALOGV("%s", logString.c_str()); } void CompositionInfo::dumpHwc(std::string& result, const char* tag) const { if (tag == nullptr) { result += base::StringPrintf("HWC parameters\n"); } else { result += base::StringPrintf("[%s]HWC parameters\n", tag); } result += base::StringPrintf("\thwcLayer=%p\n", static_cast<HWC2::Layer*>(&*hwc.hwcLayer)); result += base::StringPrintf("\tfence=%p\n", hwc.fence.get()); result += base::StringPrintf("\tblendMode=%d\n", hwc.blendMode); result += base::StringPrintf("\ttransform=%d\n", hwc.transform); result += base::StringPrintf("\tz=%d\n", hwc.z); result += base::StringPrintf("\ttype=%d\n", hwc.type); result += base::StringPrintf("\tappId=%d\n", hwc.appId); result += base::StringPrintf("\tdisplayFrame=%4d %4d %4d %4d\n", hwc.displayFrame.left, hwc.displayFrame.top, hwc.displayFrame.right, hwc.displayFrame.bottom); result += base::StringPrintf("\talpha=%.3f", hwc.alpha); result += base::StringPrintf("\tsourceCrop=%6.1f %6.1f %6.1f %6.1f\n", hwc.sourceCrop.left, hwc.sourceCrop.top, hwc.sourceCrop.right, hwc.sourceCrop.bottom); { // // Keep a conversion from std::string to String8 and back until Region can use std::string // String8 regionString; hwc.visibleRegion.dump(regionString, "visibleRegion"); hwc.surfaceDamage.dump(regionString, "surfaceDamage"); result += regionString.string(); } } void CompositionInfo::dumpRe(const char* tag) const { ALOGV("[%s]\tblackoutLayer=%d", tag, re.blackoutLayer); ALOGV("[%s]\tclearArea=%d", tag, re.clearArea); ALOGV("[%s]\tpreMultipliedAlpha=%d", tag, re.preMultipliedAlpha); ALOGV("[%s]\topaque=%d", tag, re.opaque); ALOGV("[%s]\tdisableTexture=%d", tag, re.disableTexture); ALOGV("[%s]\ttexture:name(%d), target(%d), size(%d/%d)", tag, re.texture.getTextureName(), re.texture.getTextureTarget(), (unsigned int)re.texture.getWidth(), (unsigned int)re.texture.getHeight()); ALOGV("[%s]\tuseIdentityTransform=%d\n", tag, re.useIdentityTransform); void CompositionInfo::dumpRe(std::string& result, const char* tag) const { if (tag == nullptr) { result += base::StringPrintf("RenderEngine parameters:\n"); } else { result += base::StringPrintf("[%s]RenderEngine parameters:\n", tag); } void CompositionInfo::dump(const char* tag) const { ALOGV("[%s] CompositionInfo", tag); ALOGV("[%s]\tLayerName: %s", tag, layerName.c_str()); ALOGV("[%s]\tCompositionType: %d", tag, compositionType); ALOGV("[%s]\tmBuffer = %p", tag, mBuffer.get()); ALOGV("[%s]\tmBufferSlot=%d", tag, mBufferSlot); Mesh& mesh = layer->getMesh(); result += base::StringPrintf("\tblackoutLayer=%d\n", re.blackoutLayer); result += base::StringPrintf("\tclearArea=%d\n", re.clearArea); result += base::StringPrintf("\tpreMultipliedAlpha=%d\n", re.preMultipliedAlpha); result += base::StringPrintf("\topaque=%d\n", re.opaque); result += base::StringPrintf("\tdisableTexture=%d\n", re.disableTexture); result += base::StringPrintf("\ttexture:name(%d), target(%d), size(%d/%d)\n", re.texture.getTextureName(), re.texture.getTextureTarget(), (unsigned int)re.texture.getWidth(), (unsigned int)re.texture.getHeight()); result += base::StringPrintf("\tuseIdentityTransform=%d\n", re.useIdentityTransform); Mesh::VertexArray<vec2> positions(mesh.getPositionArray<vec2>()); result += base::StringPrintf("\tpositions[(%6.1f,%6.1f), (%6.1f,%6.1f), (%6.1f,%6.1f), (%6.1f,%6.1f)]\n", positions[0][0], positions[0][1], positions[1][0], positions[1][1], positions[2][0], positions[2][1], positions[3][0], positions[3][1]); Mesh::VertexArray<vec2> texCoords(mesh.getTexCoordArray<vec2>()); result += base::StringPrintf("\ttexCoords[(%6.1f,%6.1f), (%6.1f,%6.1f),(%6.1f,%6.1f),(%6.1f,%6.1f)]\n", texCoords[0][0], texCoords[0][1], texCoords[1][0], texCoords[1][1], texCoords[2][0], texCoords[2][1], texCoords[3][0], texCoords[3][1]); } void CompositionInfo::dump(std::string& result, const char* tag) const { if (tag == nullptr) { result += base::StringPrintf("CompositionInfo\n"); } else { result += base::StringPrintf("[%s]CompositionInfo\n", tag); } result += base::StringPrintf("\tLayerName: %s\n", layerName.c_str()); result += base::StringPrintf("\tCompositionType: %d\n", compositionType); result += base::StringPrintf("\tmBuffer = %p\n", mBuffer.get()); result += base::StringPrintf("\tmBufferSlot=%d\n", mBufferSlot); result += base::StringPrintf("\tdisplayFrame=%4d %4d %4d %4d\n", hwc.displayFrame.left, hwc.displayFrame.top, hwc.displayFrame.right, hwc.displayFrame.bottom); result += base::StringPrintf("\talpha=%f\n", hwc.alpha); result += base::StringPrintf("\tsourceCrop=%6.1f %6.1f %6.1f %6.1f\n", hwc.sourceCrop.left, hwc.sourceCrop.top, hwc.sourceCrop.right, hwc.sourceCrop.bottom); switch (compositionType) { case HWC2::Composition::Device: dumpHwc(tag); dumpHwc(result, tag); break; case HWC2::Composition::Client: dumpRe(tag); dumpRe(result, tag); break; default: break; } } }; // namespace android
services/surfaceflinger/LayerBE.h +3 −2 Original line number Diff line number Diff line Loading @@ -73,8 +73,9 @@ struct CompositionInfo { } re; void dump(const char* tag) const; void dumpHwc(const char* tag) const; void dumpRe(const char* tag) const; void dump(std::string& result, const char* tag = nullptr) const; void dumpHwc(std::string& result, const char* tag = nullptr) const; void dumpRe(std::string& result, const char* tag = nullptr) const; }; class LayerBE { Loading
services/surfaceflinger/SurfaceFlinger.cpp +42 −2 Original line number Diff line number Diff line Loading @@ -91,6 +91,8 @@ #include <cutils/compiler.h> #include "android-base/stringprintf.h" #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h> #include <android/hardware/configstore/1.1/ISurfaceFlingerConfigs.h> #include <android/hardware/configstore/1.2/ISurfaceFlingerConfigs.h> Loading Loading @@ -1481,13 +1483,15 @@ void SurfaceFlinger::handleMessageRefresh() { mVsyncModulator.onRefreshed(mHadClientComposition); mLayersWithQueuedFrames.clear(); getBE().mEndOfFrameCompositionInfo = std::move(getBE().mCompositionInfo); for (const auto& [token, display] : mDisplays) { const auto displayId = display->getId(); for (auto& compositionInfo : getBE().mCompositionInfo[displayId]) { for (auto& compositionInfo : getBE().mEndOfFrameCompositionInfo[displayId]) { compositionInfo.hwc.hwcLayer = nullptr; } } mLayersWithQueuedFrames.clear(); } Loading Loading @@ -3923,6 +3927,13 @@ status_t SurfaceFlinger::doDump(int fd, const Vector<String16>& args, bool asPro dumpAll = false; } if ((index < numArgs) && (args[index] == String16("--frame-composition"))) { index++; dumpFrameCompositionInfo(result); dumpAll = false; } if ((index < numArgs) && (args[index] == String16("--display-identification"))) { index++; Loading Loading @@ -4181,6 +4192,31 @@ void SurfaceFlinger::dumpWideColorInfo(String8& result) const { result.append("\n"); } void SurfaceFlinger::dumpFrameCompositionInfo(String8& result) const { std::string stringResult; for (const auto& [token, display] : mDisplays) { const auto displayId = display->getId(); if (displayId == DisplayDevice::DISPLAY_ID_INVALID) { continue; } const auto& compositionInfoIt = getBE().mEndOfFrameCompositionInfo.find(displayId); if (compositionInfoIt == getBE().mEndOfFrameCompositionInfo.end()) { break; } const auto& compositionInfoList = compositionInfoIt->second; stringResult += base::StringPrintf("Display: %d\n", displayId); stringResult += base::StringPrintf("numComponents: %zu\n", compositionInfoList.size()); for (const auto& compositionInfo : compositionInfoList) { compositionInfo.dump(stringResult, nullptr); stringResult += base::StringPrintf("\n"); } } result.append(stringResult.c_str()); } LayersProto SurfaceFlinger::dumpProtoInfo(LayerVector::StateSet stateSet) const { LayersProto layersProto; const bool useDrawing = stateSet == LayerVector::StateSet::Drawing; Loading Loading @@ -4307,6 +4343,10 @@ void SurfaceFlinger::dumpAllLocked(const Vector<String16>& args, size_t& index, result.append(LayerProtoParser::layersToString(std::move(layerTree)).c_str()); result.append("\n"); result.append("\nFrame-Composition information:\n"); dumpFrameCompositionInfo(result); result.append("\n"); /* * Dump Display state */ Loading
services/surfaceflinger/SurfaceFlinger.h +2 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ public: int32_t mComposerSequenceId; std::unordered_map<int32_t, std::vector<CompositionInfo>> mCompositionInfo; std::unordered_map<int32_t, std::vector<CompositionInfo>> mEndOfFrameCompositionInfo; }; Loading Loading @@ -754,6 +755,7 @@ private: void dumpBufferingStats(String8& result) const; void dumpDisplayIdentificationData(String8& result) const; void dumpWideColorInfo(String8& result) const; void dumpFrameCompositionInfo(String8& result) const; LayersProto dumpProtoInfo(LayerVector::StateSet stateSet) const; LayersProto dumpVisibleLayersProtoInfo(const DisplayDevice& display) const; Loading