diff options
Diffstat (limited to 'libs/hwui/renderthread/CanvasContext.cpp')
| -rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 706e14e..f8490b6 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -156,10 +156,18 @@ void CanvasContext::processLayerUpdate(DeferredLayerUpdater* layerUpdater) { } } +static bool wasSkipped(FrameInfo* info) { + return info && ((*info)[FrameInfoIndex::kFlags] & FrameInfoFlags::kSkippedFrame); +} + void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo) { mRenderThread.removeFrameCallback(this); - mCurrentFrameInfo = &mFrames.next(); + // If the previous frame was dropped we don't need to hold onto it, so + // just keep using the previous frame's structure instead + if (!wasSkipped(mCurrentFrameInfo)) { + mCurrentFrameInfo = &mFrames.next(); + } mCurrentFrameInfo->importUiThreadInfo(uiFrameInfo); mCurrentFrameInfo->markSyncStart(); @@ -391,7 +399,11 @@ void CanvasContext::setTextureAtlas(RenderThread& thread, void CanvasContext::dumpFrames(int fd) { FILE* file = fdopen(fd, "a"); - fprintf(file, "\n\n---PROFILEDATA---"); + fprintf(file, "\n\n---PROFILEDATA---\n"); + for (size_t i = 0; i < static_cast<size_t>(FrameInfoIndex::kNumIndexes); i++) { + fprintf(file, FrameInfoNames[i].c_str()); + fprintf(file, ","); + } for (size_t i = 0; i < mFrames.size(); i++) { FrameInfo& frame = mFrames[i]; if (frame[FrameInfoIndex::kSyncStart] == 0) { |
