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

Commit e8e8f93b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add infrastructure for registering a native frame metrics observer" into main

parents 180d2293 b07fe1de
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -657,6 +657,13 @@ public class HardwareRenderer {
        nAddObserver(mNativeProxy, observer.getNativeInstance());
    }

    /**
     * @hide
     */
    public void addObserver(long nativeObserver) {
        nAddObserver(mNativeProxy, nativeObserver);
    }

    /**
     * TODO: Public API this?
     *
@@ -666,6 +673,13 @@ public class HardwareRenderer {
        nRemoveObserver(mNativeProxy, observer.getNativeInstance());
    }

    /**
     * @hide
     */
    public void removeObserver(long nativeObserver) {
        nRemoveObserver(mNativeProxy, nativeObserver);
    }

    /**
     * Sets the desired color mode on this renderer. Whether or not the actual rendering
     * will use the requested colorMode depends on the hardware support for such rendering.
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ const std::array FrameInfoNames{"Flags",
static_assert(static_cast<int>(FrameInfoIndex::NumIndexes) == 24,
              "Must update value in FrameMetrics.java#FRAME_STATS_COUNT (and here)");

void FrameInfo::importUiThreadInfo(int64_t* info) {
void FrameInfo::importUiThreadInfo(const int64_t* info) {
    memcpy(mFrameInfo.data(), info, UI_THREAD_FRAME_INFO_SIZE * sizeof(int64_t));
    mSkippedFrameReason.reset();
}
+1 −1
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ private:

class FrameInfo {
public:
    void importUiThreadInfo(int64_t* info);
    void importUiThreadInfo(const int64_t* info);

    void markSyncStart() { set(FrameInfoIndex::SyncStart) = systemTime(SYSTEM_TIME_MONOTONIC); }

+3 −3
Original line number Diff line number Diff line
@@ -35,12 +35,12 @@ class FrameMetricsReporter {
public:
    FrameMetricsReporter() {}

    void addObserver(FrameMetricsObserver* observer) {
    void addObserver(sp<FrameMetricsObserver>&& observer) {
        std::lock_guard lock(mObserversLock);
        mObservers.push_back(observer);
        mObservers.push_back(std::move(observer));
    }

    bool removeObserver(FrameMetricsObserver* observer) {
    bool removeObserver(const sp<FrameMetricsObserver>& observer) {
        std::lock_guard lock(mObserversLock);
        for (size_t i = 0; i < mObservers.size(); i++) {
            if (mObservers[i].get() == observer) {
+6 −4
Original line number Diff line number Diff line
@@ -915,20 +915,22 @@ static jboolean android_view_ThreadedRenderer_isDrawingEnabled(JNIEnv*, jclass)

static void android_view_ThreadedRenderer_addObserver(JNIEnv* env, jclass clazz,
        jlong proxyPtr, jlong observerPtr) {
    HardwareRendererObserver* observer = reinterpret_cast<HardwareRendererObserver*>(observerPtr);
    FrameMetricsObserver* rawObserver = reinterpret_cast<FrameMetricsObserver*>(observerPtr);
    sp<FrameMetricsObserver> observer = sp<FrameMetricsObserver>::fromExisting(rawObserver);
    renderthread::RenderProxy* renderProxy =
            reinterpret_cast<renderthread::RenderProxy*>(proxyPtr);

    renderProxy->addFrameMetricsObserver(observer);
    renderProxy->addFrameMetricsObserver(std::move(observer));
}

static void android_view_ThreadedRenderer_removeObserver(JNIEnv* env, jclass clazz,
        jlong proxyPtr, jlong observerPtr) {
    HardwareRendererObserver* observer = reinterpret_cast<HardwareRendererObserver*>(observerPtr);
    FrameMetricsObserver* rawObserver = reinterpret_cast<FrameMetricsObserver*>(observerPtr);
    sp<FrameMetricsObserver> observer = sp<FrameMetricsObserver>::fromExisting(rawObserver);
    renderthread::RenderProxy* renderProxy =
            reinterpret_cast<renderthread::RenderProxy*>(proxyPtr);

    renderProxy->removeFrameMetricsObserver(observer);
    renderProxy->removeFrameMetricsObserver(std::move(observer));
}

// ----------------------------------------------------------------------------
Loading