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

Commit f35d9567 authored by Matthew Bouyack's avatar Matthew Bouyack Committed by Android (Google) Code Review
Browse files

Merge "Use snprintf for SurfaceFlinger fence name" into cw-f-dev

parents 76456aa4 fd4c8c38
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -79,6 +79,9 @@ public:
    // becomes signaled when both f1 and f2 are signaled (even if f1 or f2 is
    // destroyed before it becomes signaled).  The name argument specifies the
    // human-readable name to associated with the new Fence object.
    static sp<Fence> merge(const char* name, const sp<Fence>& f1,
            const sp<Fence>& f2);

    static sp<Fence> merge(const String8& name, const sp<Fence>& f1,
            const sp<Fence>& f2);

+3 −2
Original line number Diff line number Diff line
@@ -315,9 +315,10 @@ status_t ConsumerBase::addReleaseFenceLocked(int slot,
    if (!mSlots[slot].mFence.get()) {
        mSlots[slot].mFence = fence;
    } else {
        char fenceName[32] = {};
        snprintf(fenceName, 32, "%.28s:%d", mName.string(), slot);
        sp<Fence> mergedFence = Fence::merge(
                String8::format("%.28s:%d", mName.string(), slot),
                mSlots[slot].mFence, fence);
                fenceName, mSlots[slot].mFence, fence);
        if (!mergedFence.get()) {
            CB_LOGE("failed to merge release fences");
            // synchronization is broken, the best we can do is hope fences
+10 −5
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ status_t Fence::waitForever(const char* logname) {
    return err < 0 ? -errno : status_t(NO_ERROR);
}

sp<Fence> Fence::merge(const String8& name, const sp<Fence>& f1,
sp<Fence> Fence::merge(const char* name, const sp<Fence>& f1,
        const sp<Fence>& f2) {
    ATRACE_CALL();
    int result;
@@ -80,24 +80,29 @@ sp<Fence> Fence::merge(const String8& name, const sp<Fence>& f1,
    // valid fence (e.g. NO_FENCE) we merge the one valid fence with itself so
    // that a new fence with the given name is created.
    if (f1->isValid() && f2->isValid()) {
        result = sync_merge(name.string(), f1->mFenceFd, f2->mFenceFd);
        result = sync_merge(name, f1->mFenceFd, f2->mFenceFd);
    } else if (f1->isValid()) {
        result = sync_merge(name.string(), f1->mFenceFd, f1->mFenceFd);
        result = sync_merge(name, f1->mFenceFd, f1->mFenceFd);
    } else if (f2->isValid()) {
        result = sync_merge(name.string(), f2->mFenceFd, f2->mFenceFd);
        result = sync_merge(name, f2->mFenceFd, f2->mFenceFd);
    } else {
        return NO_FENCE;
    }
    if (result == -1) {
        status_t err = -errno;
        ALOGE("merge: sync_merge(\"%s\", %d, %d) returned an error: %s (%d)",
                name.string(), f1->mFenceFd, f2->mFenceFd,
                name, f1->mFenceFd, f2->mFenceFd,
                strerror(-err), err);
        return NO_FENCE;
    }
    return sp<Fence>(new Fence(result));
}

sp<Fence> Fence::merge(const String8& name, const sp<Fence>& f1,
        const sp<Fence>& f2) {
    return merge(name.string(), f1, f2);
}

int Fence::dup() const {
    return ::dup(mFenceFd);
}