Loading libs/gui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -122,6 +122,7 @@ cc_library_shared { shared_libs: [ "android.hardware.graphics.common@1.1", "libbase", "libsync", "libbinder", "libbufferhub", Loading libs/gui/FrameTimestamps.cpp +27 −27 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ #define LOG_TAG "FrameEvents" #include <android-base/stringprintf.h> #include <cutils/compiler.h> // For CC_[UN]LIKELY #include <inttypes.h> #include <utils/Log.h> #include <utils/String8.h> #include <algorithm> #include <limits> Loading @@ -29,6 +29,7 @@ namespace android { using base::StringAppendF; // ============================================================================ // FrameEvents Loading Loading @@ -86,50 +87,49 @@ void FrameEvents::checkFencesForCompletion() { releaseFence->getSignalTime(); } static void dumpFenceTime(String8& outString, const char* name, bool pending, const FenceTime& fenceTime) { outString.appendFormat("--- %s", name); static void dumpFenceTime(std::string& outString, const char* name, bool pending, const FenceTime& fenceTime) { StringAppendF(&outString, "--- %s", name); nsecs_t signalTime = fenceTime.getCachedSignalTime(); if (Fence::isValidTimestamp(signalTime)) { outString.appendFormat("%" PRId64 "\n", signalTime); StringAppendF(&outString, "%" PRId64 "\n", signalTime); } else if (pending || signalTime == Fence::SIGNAL_TIME_PENDING) { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } else if (&fenceTime == FenceTime::NO_FENCE.get()){ outString.appendFormat("N/A\n"); outString.append("N/A\n"); } else { outString.appendFormat("Error\n"); outString.append("Error\n"); } } void FrameEvents::dump(String8& outString) const { void FrameEvents::dump(std::string& outString) const { if (!valid) { return; } outString.appendFormat("-- Frame %" PRIu64 "\n", frameNumber); outString.appendFormat("--- Posted \t%" PRId64 "\n", postedTime); outString.appendFormat("--- Req. Present\t%" PRId64 "\n", requestedPresentTime); StringAppendF(&outString, "-- Frame %" PRIu64 "\n", frameNumber); StringAppendF(&outString, "--- Posted \t%" PRId64 "\n", postedTime); StringAppendF(&outString, "--- Req. Present\t%" PRId64 "\n", requestedPresentTime); outString.appendFormat("--- Latched \t"); outString.append("--- Latched \t"); if (FrameEvents::isValidTimestamp(latchTime)) { outString.appendFormat("%" PRId64 "\n", latchTime); StringAppendF(&outString, "%" PRId64 "\n", latchTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } outString.appendFormat("--- Refresh (First)\t"); outString.append("--- Refresh (First)\t"); if (FrameEvents::isValidTimestamp(firstRefreshStartTime)) { outString.appendFormat("%" PRId64 "\n", firstRefreshStartTime); StringAppendF(&outString, "%" PRId64 "\n", firstRefreshStartTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } outString.appendFormat("--- Refresh (Last)\t"); outString.append("--- Refresh (Last)\t"); if (FrameEvents::isValidTimestamp(lastRefreshStartTime)) { outString.appendFormat("%" PRId64 "\n", lastRefreshStartTime); StringAppendF(&outString, "%" PRId64 "\n", lastRefreshStartTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } dumpFenceTime(outString, "Acquire \t", Loading @@ -139,11 +139,11 @@ void FrameEvents::dump(String8& outString) const dumpFenceTime(outString, "Display Present \t", !addPostCompositeCalled, *displayPresentFence); outString.appendFormat("--- DequeueReady \t"); outString.append("--- DequeueReady \t"); if (FrameEvents::isValidTimestamp(dequeueReadyTime)) { outString.appendFormat("%" PRId64 "\n", dequeueReadyTime); StringAppendF(&outString, "%" PRId64 "\n", dequeueReadyTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } dumpFenceTime(outString, "Release \t", Loading Loading @@ -206,11 +206,11 @@ static bool FrameNumberLessThan( return lhs.valid; } void FrameEventHistory::dump(String8& outString) const { void FrameEventHistory::dump(std::string& outString) const { auto earliestFrame = std::min_element( mFrames.begin(), mFrames.end(), &FrameNumberLessThan); if (!earliestFrame->valid) { outString.appendFormat("-- N/A\n"); outString.append("-- N/A\n"); return; } for (auto frame = earliestFrame; frame != mFrames.end(); ++frame) { Loading libs/gui/GuiConfig.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -18,8 +18,7 @@ namespace android { void appendGuiConfigString(String8& configStr) { void appendGuiConfigString(std::string& configStr) { static const char* config = " [libgui" #ifdef DONT_USE_FENCE_SYNC Loading libs/gui/LayerDebugInfo.cpp +26 −26 Original line number Diff line number Diff line Loading @@ -16,13 +16,14 @@ #include <gui/LayerDebugInfo.h> #include <android-base/stringprintf.h> #include <ui/DebugUtils.h> #include <binder/Parcel.h> #include <utils/String8.h> using namespace android; using android::base::StringAppendF; #define RETURN_ON_ERROR(X) do {status_t res = (X); if (res != NO_ERROR) return res;} while(false) Loading Loading @@ -108,38 +109,37 @@ status_t LayerDebugInfo::readFromParcel(const Parcel* parcel) { } std::string to_string(const LayerDebugInfo& info) { String8 result; std::string result; result.appendFormat("+ %s (%s)\n", info.mType.c_str(), info.mName.c_str()); StringAppendF(&result, "+ %s (%s)\n", info.mType.c_str(), info.mName.c_str()); info.mTransparentRegion.dump(result, "TransparentRegion"); info.mVisibleRegion.dump(result, "VisibleRegion"); info.mSurfaceDamageRegion.dump(result, "SurfaceDamageRegion"); result.appendFormat(" layerStack=%4d, z=%9d, pos=(%g,%g), size=(%4d,%4d), ", info.mLayerStack, info.mZ, static_cast<double>(info.mX), static_cast<double>(info.mY), info.mWidth, info.mHeight); StringAppendF(&result, " layerStack=%4d, z=%9d, pos=(%g,%g), size=(%4d,%4d), ", info.mLayerStack, info.mZ, static_cast<double>(info.mX), static_cast<double>(info.mY), info.mWidth, info.mHeight); result.appendFormat("crop=%s, ", to_string(info.mCrop).c_str()); result.appendFormat("isOpaque=%1d, invalidate=%1d, ", info.mIsOpaque, info.mContentDirty); result.appendFormat("dataspace=%s, ", dataspaceDetails(info.mDataSpace).c_str()); result.appendFormat("pixelformat=%s, ", decodePixelFormat(info.mPixelFormat).c_str()); result.appendFormat("color=(%.3f,%.3f,%.3f,%.3f), flags=0x%08x, ", StringAppendF(&result, "crop=%s, ", to_string(info.mCrop).c_str()); StringAppendF(&result, "isOpaque=%1d, invalidate=%1d, ", info.mIsOpaque, info.mContentDirty); StringAppendF(&result, "dataspace=%s, ", dataspaceDetails(info.mDataSpace).c_str()); StringAppendF(&result, "pixelformat=%s, ", decodePixelFormat(info.mPixelFormat).c_str()); StringAppendF(&result, "color=(%.3f,%.3f,%.3f,%.3f), flags=0x%08x, ", static_cast<double>(info.mColor.r), static_cast<double>(info.mColor.g), static_cast<double>(info.mColor.b), static_cast<double>(info.mColor.a), info.mFlags); result.appendFormat("tr=[%.2f, %.2f][%.2f, %.2f]", static_cast<double>(info.mMatrix[0][0]), static_cast<double>(info.mMatrix[0][1]), static_cast<double>(info.mMatrix[1][0]), static_cast<double>(info.mMatrix[1][1])); StringAppendF(&result, "tr=[%.2f, %.2f][%.2f, %.2f]", static_cast<double>(info.mMatrix[0][0]), static_cast<double>(info.mMatrix[0][1]), static_cast<double>(info.mMatrix[1][0]), static_cast<double>(info.mMatrix[1][1])); result.append("\n"); result.appendFormat(" parent=%s\n", info.mParentName.c_str()); result.appendFormat(" activeBuffer=[%4ux%4u:%4u,%s],", info.mActiveBufferWidth, info.mActiveBufferHeight, info.mActiveBufferStride, StringAppendF(&result, " parent=%s\n", info.mParentName.c_str()); StringAppendF(&result, " activeBuffer=[%4ux%4u:%4u,%s],", info.mActiveBufferWidth, info.mActiveBufferHeight, info.mActiveBufferStride, decodePixelFormat(info.mActiveBufferFormat).c_str()); result.appendFormat(" queued-frames=%d, mRefreshPending=%d", info.mNumQueuedFrames, info.mRefreshPending); StringAppendF(&result, " queued-frames=%d, mRefreshPending=%d", info.mNumQueuedFrames, info.mRefreshPending); result.append("\n"); return std::string(result.c_str()); return result; } } // android libs/gui/include/gui/FrameTimestamps.h +2 −3 Original line number Diff line number Diff line Loading @@ -30,7 +30,6 @@ namespace android { struct FrameEvents; class FrameEventHistoryDelta; class String8; // Identifiers for all the events that may be recorded or reported. Loading Loading @@ -72,7 +71,7 @@ struct FrameEvents { bool hasDequeueReadyInfo() const; void checkFencesForCompletion(); void dump(String8& outString) const; void dump(std::string& outString) const; bool valid{false}; int connectId{0}; Loading Loading @@ -112,7 +111,7 @@ public: FrameEvents* getFrame(uint64_t frameNumber); FrameEvents* getFrame(uint64_t frameNumber, size_t* iHint); void checkFencesForCompletion(); void dump(String8& outString) const; void dump(std::string& outString) const; static constexpr size_t MAX_FRAME_HISTORY = 8; Loading Loading
libs/gui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -122,6 +122,7 @@ cc_library_shared { shared_libs: [ "android.hardware.graphics.common@1.1", "libbase", "libsync", "libbinder", "libbufferhub", Loading
libs/gui/FrameTimestamps.cpp +27 −27 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ #define LOG_TAG "FrameEvents" #include <android-base/stringprintf.h> #include <cutils/compiler.h> // For CC_[UN]LIKELY #include <inttypes.h> #include <utils/Log.h> #include <utils/String8.h> #include <algorithm> #include <limits> Loading @@ -29,6 +29,7 @@ namespace android { using base::StringAppendF; // ============================================================================ // FrameEvents Loading Loading @@ -86,50 +87,49 @@ void FrameEvents::checkFencesForCompletion() { releaseFence->getSignalTime(); } static void dumpFenceTime(String8& outString, const char* name, bool pending, const FenceTime& fenceTime) { outString.appendFormat("--- %s", name); static void dumpFenceTime(std::string& outString, const char* name, bool pending, const FenceTime& fenceTime) { StringAppendF(&outString, "--- %s", name); nsecs_t signalTime = fenceTime.getCachedSignalTime(); if (Fence::isValidTimestamp(signalTime)) { outString.appendFormat("%" PRId64 "\n", signalTime); StringAppendF(&outString, "%" PRId64 "\n", signalTime); } else if (pending || signalTime == Fence::SIGNAL_TIME_PENDING) { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } else if (&fenceTime == FenceTime::NO_FENCE.get()){ outString.appendFormat("N/A\n"); outString.append("N/A\n"); } else { outString.appendFormat("Error\n"); outString.append("Error\n"); } } void FrameEvents::dump(String8& outString) const { void FrameEvents::dump(std::string& outString) const { if (!valid) { return; } outString.appendFormat("-- Frame %" PRIu64 "\n", frameNumber); outString.appendFormat("--- Posted \t%" PRId64 "\n", postedTime); outString.appendFormat("--- Req. Present\t%" PRId64 "\n", requestedPresentTime); StringAppendF(&outString, "-- Frame %" PRIu64 "\n", frameNumber); StringAppendF(&outString, "--- Posted \t%" PRId64 "\n", postedTime); StringAppendF(&outString, "--- Req. Present\t%" PRId64 "\n", requestedPresentTime); outString.appendFormat("--- Latched \t"); outString.append("--- Latched \t"); if (FrameEvents::isValidTimestamp(latchTime)) { outString.appendFormat("%" PRId64 "\n", latchTime); StringAppendF(&outString, "%" PRId64 "\n", latchTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } outString.appendFormat("--- Refresh (First)\t"); outString.append("--- Refresh (First)\t"); if (FrameEvents::isValidTimestamp(firstRefreshStartTime)) { outString.appendFormat("%" PRId64 "\n", firstRefreshStartTime); StringAppendF(&outString, "%" PRId64 "\n", firstRefreshStartTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } outString.appendFormat("--- Refresh (Last)\t"); outString.append("--- Refresh (Last)\t"); if (FrameEvents::isValidTimestamp(lastRefreshStartTime)) { outString.appendFormat("%" PRId64 "\n", lastRefreshStartTime); StringAppendF(&outString, "%" PRId64 "\n", lastRefreshStartTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } dumpFenceTime(outString, "Acquire \t", Loading @@ -139,11 +139,11 @@ void FrameEvents::dump(String8& outString) const dumpFenceTime(outString, "Display Present \t", !addPostCompositeCalled, *displayPresentFence); outString.appendFormat("--- DequeueReady \t"); outString.append("--- DequeueReady \t"); if (FrameEvents::isValidTimestamp(dequeueReadyTime)) { outString.appendFormat("%" PRId64 "\n", dequeueReadyTime); StringAppendF(&outString, "%" PRId64 "\n", dequeueReadyTime); } else { outString.appendFormat("Pending\n"); outString.append("Pending\n"); } dumpFenceTime(outString, "Release \t", Loading Loading @@ -206,11 +206,11 @@ static bool FrameNumberLessThan( return lhs.valid; } void FrameEventHistory::dump(String8& outString) const { void FrameEventHistory::dump(std::string& outString) const { auto earliestFrame = std::min_element( mFrames.begin(), mFrames.end(), &FrameNumberLessThan); if (!earliestFrame->valid) { outString.appendFormat("-- N/A\n"); outString.append("-- N/A\n"); return; } for (auto frame = earliestFrame; frame != mFrames.end(); ++frame) { Loading
libs/gui/GuiConfig.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -18,8 +18,7 @@ namespace android { void appendGuiConfigString(String8& configStr) { void appendGuiConfigString(std::string& configStr) { static const char* config = " [libgui" #ifdef DONT_USE_FENCE_SYNC Loading
libs/gui/LayerDebugInfo.cpp +26 −26 Original line number Diff line number Diff line Loading @@ -16,13 +16,14 @@ #include <gui/LayerDebugInfo.h> #include <android-base/stringprintf.h> #include <ui/DebugUtils.h> #include <binder/Parcel.h> #include <utils/String8.h> using namespace android; using android::base::StringAppendF; #define RETURN_ON_ERROR(X) do {status_t res = (X); if (res != NO_ERROR) return res;} while(false) Loading Loading @@ -108,38 +109,37 @@ status_t LayerDebugInfo::readFromParcel(const Parcel* parcel) { } std::string to_string(const LayerDebugInfo& info) { String8 result; std::string result; result.appendFormat("+ %s (%s)\n", info.mType.c_str(), info.mName.c_str()); StringAppendF(&result, "+ %s (%s)\n", info.mType.c_str(), info.mName.c_str()); info.mTransparentRegion.dump(result, "TransparentRegion"); info.mVisibleRegion.dump(result, "VisibleRegion"); info.mSurfaceDamageRegion.dump(result, "SurfaceDamageRegion"); result.appendFormat(" layerStack=%4d, z=%9d, pos=(%g,%g), size=(%4d,%4d), ", info.mLayerStack, info.mZ, static_cast<double>(info.mX), static_cast<double>(info.mY), info.mWidth, info.mHeight); StringAppendF(&result, " layerStack=%4d, z=%9d, pos=(%g,%g), size=(%4d,%4d), ", info.mLayerStack, info.mZ, static_cast<double>(info.mX), static_cast<double>(info.mY), info.mWidth, info.mHeight); result.appendFormat("crop=%s, ", to_string(info.mCrop).c_str()); result.appendFormat("isOpaque=%1d, invalidate=%1d, ", info.mIsOpaque, info.mContentDirty); result.appendFormat("dataspace=%s, ", dataspaceDetails(info.mDataSpace).c_str()); result.appendFormat("pixelformat=%s, ", decodePixelFormat(info.mPixelFormat).c_str()); result.appendFormat("color=(%.3f,%.3f,%.3f,%.3f), flags=0x%08x, ", StringAppendF(&result, "crop=%s, ", to_string(info.mCrop).c_str()); StringAppendF(&result, "isOpaque=%1d, invalidate=%1d, ", info.mIsOpaque, info.mContentDirty); StringAppendF(&result, "dataspace=%s, ", dataspaceDetails(info.mDataSpace).c_str()); StringAppendF(&result, "pixelformat=%s, ", decodePixelFormat(info.mPixelFormat).c_str()); StringAppendF(&result, "color=(%.3f,%.3f,%.3f,%.3f), flags=0x%08x, ", static_cast<double>(info.mColor.r), static_cast<double>(info.mColor.g), static_cast<double>(info.mColor.b), static_cast<double>(info.mColor.a), info.mFlags); result.appendFormat("tr=[%.2f, %.2f][%.2f, %.2f]", static_cast<double>(info.mMatrix[0][0]), static_cast<double>(info.mMatrix[0][1]), static_cast<double>(info.mMatrix[1][0]), static_cast<double>(info.mMatrix[1][1])); StringAppendF(&result, "tr=[%.2f, %.2f][%.2f, %.2f]", static_cast<double>(info.mMatrix[0][0]), static_cast<double>(info.mMatrix[0][1]), static_cast<double>(info.mMatrix[1][0]), static_cast<double>(info.mMatrix[1][1])); result.append("\n"); result.appendFormat(" parent=%s\n", info.mParentName.c_str()); result.appendFormat(" activeBuffer=[%4ux%4u:%4u,%s],", info.mActiveBufferWidth, info.mActiveBufferHeight, info.mActiveBufferStride, StringAppendF(&result, " parent=%s\n", info.mParentName.c_str()); StringAppendF(&result, " activeBuffer=[%4ux%4u:%4u,%s],", info.mActiveBufferWidth, info.mActiveBufferHeight, info.mActiveBufferStride, decodePixelFormat(info.mActiveBufferFormat).c_str()); result.appendFormat(" queued-frames=%d, mRefreshPending=%d", info.mNumQueuedFrames, info.mRefreshPending); StringAppendF(&result, " queued-frames=%d, mRefreshPending=%d", info.mNumQueuedFrames, info.mRefreshPending); result.append("\n"); return std::string(result.c_str()); return result; } } // android
libs/gui/include/gui/FrameTimestamps.h +2 −3 Original line number Diff line number Diff line Loading @@ -30,7 +30,6 @@ namespace android { struct FrameEvents; class FrameEventHistoryDelta; class String8; // Identifiers for all the events that may be recorded or reported. Loading Loading @@ -72,7 +71,7 @@ struct FrameEvents { bool hasDequeueReadyInfo() const; void checkFencesForCompletion(); void dump(String8& outString) const; void dump(std::string& outString) const; bool valid{false}; int connectId{0}; Loading Loading @@ -112,7 +111,7 @@ public: FrameEvents* getFrame(uint64_t frameNumber); FrameEvents* getFrame(uint64_t frameNumber, size_t* iHint); void checkFencesForCompletion(); void dump(String8& outString) const; void dump(std::string& outString) const; static constexpr size_t MAX_FRAME_HISTORY = 8; Loading