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

Commit 70f02792 authored by Yiwei Zhang's avatar Yiwei Zhang Committed by Android (Google) Code Review
Browse files

Merge changes from topic "unittest"

* changes:
  SF TimeStats: add unittests for TimeStats
  SF TimeStats: Remove some redundant functions
  SF TimeStats: Make TimeStats class non-singleton
parents 61e6e9f7 16faa5db
Loading
Loading
Loading
Loading
+6 −4
Original line number Original line Diff line number Diff line
@@ -24,6 +24,8 @@
#include "DisplayDevice.h"
#include "DisplayDevice.h"
#include "LayerRejecter.h"
#include "LayerRejecter.h"


#include "TimeStats/TimeStats.h"

#include <renderengine/RenderEngine.h>
#include <renderengine/RenderEngine.h>


#include <gui/BufferItem.h>
#include <gui/BufferItem.h>
@@ -71,7 +73,7 @@ BufferLayer::~BufferLayer() {
        destroyAllHwcLayersPlusChildren();
        destroyAllHwcLayersPlusChildren();
    }
    }


    mTimeStats.onDestroy(getSequence());
    mFlinger->mTimeStats->onDestroy(getSequence());
}
}


void BufferLayer::useSurfaceDamage() {
void BufferLayer::useSurfaceDamage() {
@@ -334,7 +336,7 @@ bool BufferLayer::onPostComposition(const std::optional<DisplayId>& displayId,
    mFrameTracker.setDesiredPresentTime(desiredPresentTime);
    mFrameTracker.setDesiredPresentTime(desiredPresentTime);


    const int32_t layerID = getSequence();
    const int32_t layerID = getSequence();
    mTimeStats.setDesiredTime(layerID, mCurrentFrameNumber, desiredPresentTime);
    mFlinger->mTimeStats->setDesiredTime(layerID, mCurrentFrameNumber, desiredPresentTime);


    std::shared_ptr<FenceTime> frameReadyFence = getCurrentFenceTime();
    std::shared_ptr<FenceTime> frameReadyFence = getCurrentFenceTime();
    if (frameReadyFence->isValid()) {
    if (frameReadyFence->isValid()) {
@@ -346,13 +348,13 @@ bool BufferLayer::onPostComposition(const std::optional<DisplayId>& displayId,
    }
    }


    if (presentFence->isValid()) {
    if (presentFence->isValid()) {
        mTimeStats.setPresentFence(layerID, mCurrentFrameNumber, presentFence);
        mFlinger->mTimeStats->setPresentFence(layerID, mCurrentFrameNumber, presentFence);
        mFrameTracker.setActualPresentFence(std::shared_ptr<FenceTime>(presentFence));
        mFrameTracker.setActualPresentFence(std::shared_ptr<FenceTime>(presentFence));
    } else if (displayId && mFlinger->getHwComposer().isConnected(*displayId)) {
    } else if (displayId && mFlinger->getHwComposer().isConnected(*displayId)) {
        // The HWC doesn't support present fences, so use the refresh
        // The HWC doesn't support present fences, so use the refresh
        // timestamp instead.
        // timestamp instead.
        const nsecs_t actualPresentTime = mFlinger->getHwComposer().getRefreshTimestamp(*displayId);
        const nsecs_t actualPresentTime = mFlinger->getHwComposer().getRefreshTimestamp(*displayId);
        mTimeStats.setPresentTime(layerID, mCurrentFrameNumber, actualPresentTime);
        mFlinger->mTimeStats->setPresentTime(layerID, mCurrentFrameNumber, actualPresentTime);
        mFrameTracker.setActualPresentTime(actualPresentTime);
        mFrameTracker.setActualPresentTime(actualPresentTime);
    }
    }


+8 −5
Original line number Original line Diff line number Diff line
@@ -17,6 +17,8 @@
#include "BufferQueueLayer.h"
#include "BufferQueueLayer.h"
#include "LayerRejecter.h"
#include "LayerRejecter.h"


#include "TimeStats/TimeStats.h"

#include <system/window.h>
#include <system/window.h>


namespace android {
namespace android {
@@ -246,7 +248,7 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t
        // and return early
        // and return early
        if (queuedBuffer) {
        if (queuedBuffer) {
            Mutex::Autolock lock(mQueueItemLock);
            Mutex::Autolock lock(mQueueItemLock);
            mTimeStats.removeTimeRecord(layerID, mQueueItems[0].mFrameNumber);
            mFlinger->mTimeStats->removeTimeRecord(layerID, mQueueItems[0].mFrameNumber);
            mQueueItems.removeAt(0);
            mQueueItems.removeAt(0);
            mQueuedFrames--;
            mQueuedFrames--;
        }
        }
@@ -260,7 +262,7 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t
            Mutex::Autolock lock(mQueueItemLock);
            Mutex::Autolock lock(mQueueItemLock);
            mQueueItems.clear();
            mQueueItems.clear();
            mQueuedFrames = 0;
            mQueuedFrames = 0;
            mTimeStats.clearLayerRecord(layerID);
            mFlinger->mTimeStats->onDestroy(layerID);
        }
        }


        // Once we have hit this state, the shadow queue may no longer
        // Once we have hit this state, the shadow queue may no longer
@@ -281,13 +283,14 @@ status_t BufferQueueLayer::updateTexImage(bool& recomputeVisibleRegions, nsecs_t
        // Remove any stale buffers that have been dropped during
        // Remove any stale buffers that have been dropped during
        // updateTexImage
        // updateTexImage
        while (mQueueItems[0].mFrameNumber != currentFrameNumber) {
        while (mQueueItems[0].mFrameNumber != currentFrameNumber) {
            mTimeStats.removeTimeRecord(layerID, mQueueItems[0].mFrameNumber);
            mFlinger->mTimeStats->removeTimeRecord(layerID, mQueueItems[0].mFrameNumber);
            mQueueItems.removeAt(0);
            mQueueItems.removeAt(0);
            mQueuedFrames--;
            mQueuedFrames--;
        }
        }


        mTimeStats.setAcquireFence(layerID, currentFrameNumber, mQueueItems[0].mFenceTime);
        mFlinger->mTimeStats->setAcquireFence(layerID, currentFrameNumber,
        mTimeStats.setLatchTime(layerID, currentFrameNumber, latchTime);
                                              mQueueItems[0].mFenceTime);
        mFlinger->mTimeStats->setLatchTime(layerID, currentFrameNumber, latchTime);


        mQueueItems.removeAt(0);
        mQueueItems.removeAt(0);
    }
    }
+11 −9
Original line number Original line Diff line number Diff line
@@ -21,6 +21,8 @@


#include "BufferStateLayer.h"
#include "BufferStateLayer.h"


#include "TimeStats/TimeStats.h"

#include <private/gui/SyncFeatures.h>
#include <private/gui/SyncFeatures.h>
#include <renderengine/Image.h>
#include <renderengine/Image.h>


@@ -457,7 +459,7 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse
        ALOGE("[%s] rejecting buffer: "
        ALOGE("[%s] rejecting buffer: "
              "bufferWidth=%d, bufferHeight=%d, front.active.{w=%d, h=%d}",
              "bufferWidth=%d, bufferHeight=%d, front.active.{w=%d, h=%d}",
              mName.string(), bufferWidth, bufferHeight, s.active.w, s.active.h);
              mName.string(), bufferWidth, bufferHeight, s.active.w, s.active.h);
        mTimeStats.removeTimeRecord(layerID, getFrameNumber());
        mFlinger->mTimeStats->removeTimeRecord(layerID, getFrameNumber());
        return BAD_VALUE;
        return BAD_VALUE;
    }
    }


@@ -469,7 +471,7 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse
    if (SyncFeatures::getInstance().useNativeFenceSync() && releaseFence != Fence::NO_FENCE) {
    if (SyncFeatures::getInstance().useNativeFenceSync() && releaseFence != Fence::NO_FENCE) {
        // TODO(alecmouri): Fail somewhere upstream if the fence is invalid.
        // TODO(alecmouri): Fail somewhere upstream if the fence is invalid.
        if (!releaseFence->isValid()) {
        if (!releaseFence->isValid()) {
            mTimeStats.clearLayerRecord(layerID);
            mFlinger->mTimeStats->onDestroy(layerID);
            return UNKNOWN_ERROR;
            return UNKNOWN_ERROR;
        }
        }


@@ -479,7 +481,7 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse
        auto currentStatus = s.acquireFence->getStatus();
        auto currentStatus = s.acquireFence->getStatus();
        if (currentStatus == Fence::Status::Invalid) {
        if (currentStatus == Fence::Status::Invalid) {
            ALOGE("Existing fence has invalid state");
            ALOGE("Existing fence has invalid state");
            mTimeStats.clearLayerRecord(layerID);
            mFlinger->mTimeStats->onDestroy(layerID);
            return BAD_VALUE;
            return BAD_VALUE;
        }
        }


@@ -487,7 +489,7 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse
        if (incomingStatus == Fence::Status::Invalid) {
        if (incomingStatus == Fence::Status::Invalid) {
            ALOGE("New fence has invalid state");
            ALOGE("New fence has invalid state");
            mDrawingState.acquireFence = releaseFence;
            mDrawingState.acquireFence = releaseFence;
            mTimeStats.clearLayerRecord(layerID);
            mFlinger->mTimeStats->onDestroy(layerID);
            return BAD_VALUE;
            return BAD_VALUE;
        }
        }


@@ -503,7 +505,7 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse
                // synchronization is broken, the best we can do is hope fences
                // synchronization is broken, the best we can do is hope fences
                // signal in order so the new fence will act like a union
                // signal in order so the new fence will act like a union
                mDrawingState.acquireFence = releaseFence;
                mDrawingState.acquireFence = releaseFence;
                mTimeStats.clearLayerRecord(layerID);
                mFlinger->mTimeStats->onDestroy(layerID);
                return BAD_VALUE;
                return BAD_VALUE;
            }
            }
            mDrawingState.acquireFence = mergedFence;
            mDrawingState.acquireFence = mergedFence;
@@ -526,15 +528,15 @@ status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nse
        // a GL-composited layer) not at all.
        // a GL-composited layer) not at all.
        status_t err = bindTextureImage();
        status_t err = bindTextureImage();
        if (err != NO_ERROR) {
        if (err != NO_ERROR) {
            mTimeStats.clearLayerRecord(layerID);
            mFlinger->mTimeStats->onDestroy(layerID);
            return BAD_VALUE;
            return BAD_VALUE;
        }
        }
    }
    }


    // TODO(marissaw): properly support mTimeStats
    // TODO(marissaw): properly support mTimeStats
    mTimeStats.setPostTime(layerID, getFrameNumber(), getName().c_str(), latchTime);
    mFlinger->mTimeStats->setPostTime(layerID, getFrameNumber(), getName().c_str(), latchTime);
    mTimeStats.setAcquireFence(layerID, getFrameNumber(), getCurrentFenceTime());
    mFlinger->mTimeStats->setAcquireFence(layerID, getFrameNumber(), getCurrentFenceTime());
    mTimeStats.setLatchTime(layerID, getFrameNumber(), latchTime);
    mFlinger->mTimeStats->setLatchTime(layerID, getFrameNumber(), latchTime);


    return NO_ERROR;
    return NO_ERROR;
}
}
+4 −3
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@
#include "SurfaceFlinger.h"
#include "SurfaceFlinger.h"


#include "DisplayHardware/HWComposer.h"
#include "DisplayHardware/HWComposer.h"
#include "TimeStats/TimeStats.h"


#include <renderengine/RenderEngine.h>
#include <renderengine/RenderEngine.h>


@@ -1522,14 +1523,14 @@ void Layer::dumpFrameEvents(String8& result) {
void Layer::onDisconnect() {
void Layer::onDisconnect() {
    Mutex::Autolock lock(mFrameEventHistoryMutex);
    Mutex::Autolock lock(mFrameEventHistoryMutex);
    mFrameEventHistory.onDisconnect();
    mFrameEventHistory.onDisconnect();
    mTimeStats.onDisconnect(getSequence());
    mFlinger->mTimeStats->onDestroy(getSequence());
}
}


void Layer::addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps,
void Layer::addAndGetFrameTimestamps(const NewFrameEventsEntry* newTimestamps,
                                     FrameEventHistoryDelta* outDelta) {
                                     FrameEventHistoryDelta* outDelta) {
    if (newTimestamps) {
    if (newTimestamps) {
        mTimeStats.setPostTime(getSequence(), newTimestamps->frameNumber, getName().c_str(),
        mFlinger->mTimeStats->setPostTime(getSequence(), newTimestamps->frameNumber,
                               newTimestamps->postedTime);
                                          getName().c_str(), newTimestamps->postedTime);
    }
    }


    Mutex::Autolock lock(mFrameEventHistoryMutex);
    Mutex::Autolock lock(mFrameEventHistoryMutex);
+0 −3
Original line number Original line Diff line number Diff line
@@ -48,7 +48,6 @@
#include "LayerVector.h"
#include "LayerVector.h"
#include "MonitoredProducer.h"
#include "MonitoredProducer.h"
#include "SurfaceFlinger.h"
#include "SurfaceFlinger.h"
#include "TimeStats/TimeStats.h"
#include "TransactionCompletedThread.h"
#include "TransactionCompletedThread.h"


#include "DisplayHardware/HWComposer.h"
#include "DisplayHardware/HWComposer.h"
@@ -789,8 +788,6 @@ protected:
    FenceTimeline mAcquireTimeline;
    FenceTimeline mAcquireTimeline;
    FenceTimeline mReleaseTimeline;
    FenceTimeline mReleaseTimeline;


    TimeStats& mTimeStats = TimeStats::getInstance();

    // main thread
    // main thread
    sp<GraphicBuffer> mActiveBuffer;
    sp<GraphicBuffer> mActiveBuffer;
    ui::Dataspace mCurrentDataSpace = ui::Dataspace::UNKNOWN;
    ui::Dataspace mCurrentDataSpace = ui::Dataspace::UNKNOWN;
Loading