Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1dc968a6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Ignore blocked-on-sf time for ADPF" into sc-dev am: a2883f3b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14456703

Change-Id: I5f8320d24c4e3ba0d712e0fb859705d8ebbf4feb
parents b7032e41 a2883f3b
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -467,11 +467,11 @@ void CanvasContext::notifyFramePending() {
    mRenderThread.pushBackFrameCallback(this);
}

void CanvasContext::draw() {
nsecs_t CanvasContext::draw() {
    if (auto grContext = getGrContext()) {
        if (grContext->abandoned()) {
            LOG_ALWAYS_FATAL("GrContext is abandoned/device lost at start of CanvasContext::draw");
            return;
            return 0;
        }
    }
    SkRect dirty;
@@ -486,7 +486,7 @@ void CanvasContext::draw() {
            std::invoke(func, mFrameNumber);
        }
        mFrameCompleteCallbacks.clear();
        return;
        return 0;
    }

    ScopedActiveContext activeContext(this);
@@ -616,6 +616,7 @@ void CanvasContext::draw() {
    }

    mRenderThread.cacheManager().onFrameCompleted();
    return mCurrentFrameInfo->get(FrameInfoIndex::DequeueBufferDuration);
}

void CanvasContext::reportMetricsWithPresentTime() {
+2 −1
Original line number Diff line number Diff line
@@ -127,7 +127,8 @@ public:
    void setColorMode(ColorMode mode);
    bool makeCurrent();
    void prepareTree(TreeInfo& info, int64_t* uiFrameInfo, int64_t syncQueued, RenderNode* target);
    void draw();
    // Returns the DequeueBufferDuration.
    nsecs_t draw();
    void destroy();

    // IFrameCallback, Choreographer-driven frame callback entry point
+10 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include <utils/Log.h>
#include <utils/TraceUtils.h>
#include <algorithm>

#include "../DeferredLayerUpdater.h"
#include "../DisplayList.h"
@@ -91,6 +92,7 @@ void DrawFrameTask::postAndWait() {
void DrawFrameTask::run() {
    const int64_t vsyncId = mFrameInfo[static_cast<int>(FrameInfoIndex::FrameTimelineVsyncId)];
    ATRACE_FORMAT("DrawFrames %" PRId64, vsyncId);
    nsecs_t syncDelayDuration = systemTime(SYSTEM_TIME_MONOTONIC) - mSyncQueued;

    bool canUnblockUiThread;
    bool canDrawThisFrame;
@@ -124,8 +126,9 @@ void DrawFrameTask::run() {
                [callback, frameNr = context->getFrameNumber()]() { callback(frameNr); });
    }

    nsecs_t dequeueBufferDuration = 0;
    if (CC_LIKELY(canDrawThisFrame)) {
        context->draw();
        dequeueBufferDuration = context->draw();
    } else {
        // wait on fences so tasks don't overlap next frame
        context->waitOnFences();
@@ -149,10 +152,14 @@ void DrawFrameTask::run() {
            mUpdateTargetWorkDuration(targetWorkDuration);
        }
        int64_t frameDuration = systemTime(SYSTEM_TIME_MONOTONIC) - frameStartTime;
        if (frameDuration > kSanityCheckLowerBound && frameDuration < kSanityCheckUpperBound) {
            mReportActualWorkDuration(frameDuration);
        int64_t actualDuration = frameDuration -
                                 (std::min(syncDelayDuration, mLastDequeueBufferDuration)) -
                                 dequeueBufferDuration;
        if (actualDuration > kSanityCheckLowerBound && actualDuration < kSanityCheckUpperBound) {
            mReportActualWorkDuration(actualDuration);
        }
    }
    mLastDequeueBufferDuration = dequeueBufferDuration;
}

bool DrawFrameTask::syncFrameState(TreeInfo& info) {
+1 −0
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ private:
    std::function<void(int64_t)> mFrameCallback;
    std::function<void(int64_t)> mFrameCompleteCallback;

    nsecs_t mLastDequeueBufferDuration = 0;
    nsecs_t mLastTargetWorkDuration = 0;
    std::function<void(int64_t)> mUpdateTargetWorkDuration;
    std::function<void(int64_t)> mReportActualWorkDuration;