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

Commit 68c77941 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

Add SurfaceTexture logging

Change-Id: If1b74be5230813fb76429935d88b9d4a7c41700c
parent 80727113
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ namespace android {
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------


class IGraphicBufferAlloc;
class IGraphicBufferAlloc;
class String8;


class SurfaceTexture : public BnSurfaceTexture {
class SurfaceTexture : public BnSurfaceTexture {
public:
public:
@@ -157,6 +158,10 @@ public:
    // getCurrentTransform returns the transform of the current buffer
    // getCurrentTransform returns the transform of the current buffer
    uint32_t getCurrentTransform() const;
    uint32_t getCurrentTransform() const;


    // dump our state in a String
    void dump(String8& result) const;
    void dump(String8& result, const char* prefix, char* buffer, size_t SIZE) const;

protected:
protected:


    // freeAllBuffers frees the resources (both GraphicBuffer and EGLImage) for
    // freeAllBuffers frees the resources (both GraphicBuffer and EGLImage) for
+65 −0
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@
#include <surfaceflinger/IGraphicBufferAlloc.h>
#include <surfaceflinger/IGraphicBufferAlloc.h>


#include <utils/Log.h>
#include <utils/Log.h>
#include <utils/String8.h>


namespace android {
namespace android {


@@ -755,6 +756,70 @@ int SurfaceTexture::query(int what, int* outValue)
    return NO_ERROR;
    return NO_ERROR;
}
}


void SurfaceTexture::dump(String8& result) const
{
    char buffer[1024];
    dump(result, "", buffer, 1024);
}

void SurfaceTexture::dump(String8& result, const char* prefix,
        char* buffer, size_t SIZE) const
{
    Mutex::Autolock _l(mMutex);
    snprintf(buffer, SIZE,
            "%smBufferCount=%d, mSynchronousMode=%d, default-size=[%dx%d], "
            "mPixelFormat=%d, mTexName=%d\n",
            prefix, mBufferCount, mSynchronousMode, mDefaultWidth, mDefaultHeight,
            mPixelFormat, mTexName);
    result.append(buffer);

    String8 fifo;
    int fifoSize = 0;
    Fifo::const_iterator i(mQueue.begin());
    while (i != mQueue.end()) {
        snprintf(buffer, SIZE, "%02d ", *i++);
        fifoSize++;
        fifo.append(buffer);
    }

    snprintf(buffer, SIZE,
            "%scurrent: {crop=[%d,%d,%d,%d], transform=0x%02x, current=%d, target=0x%04x}\n"
            "%snext   : {crop=[%d,%d,%d,%d], transform=0x%02x, FIFO(%d)={%s}}\n"
            ,
            prefix, mCurrentCrop.left,
            mCurrentCrop.top, mCurrentCrop.right, mCurrentCrop.bottom,
            mCurrentTransform, mCurrentTexture, mCurrentTextureTarget,
            prefix, mNextCrop.left, mNextCrop.top, mNextCrop.right, mNextCrop.bottom,
            mCurrentTransform, fifoSize, fifo.string()
    );
    result.append(buffer);

    struct {
        const char * operator()(int state) const {
            switch (state) {
                case BufferSlot::DEQUEUED: return "DEQUEUED";
                case BufferSlot::QUEUED: return "QUEUED";
                case BufferSlot::FREE: return "FREE";
                default: return "Unknown";
            }
        }
    } stateName;

    for (int i=0 ; i<mBufferCount ; i++) {
        const BufferSlot& slot(mSlots[i]);
        snprintf(buffer, SIZE,
                "%s%s[%02d] state=%-8s, crop=[%d,%d,%d,%d], transform=0x%02x, "
                "timestamp=%lld\n"
                ,
                prefix, (i==mCurrentTexture)?">":" ", i, stateName(slot.mBufferState),
                slot.mLastQueuedCrop.left, slot.mLastQueuedCrop.top,
                slot.mLastQueuedCrop.right, slot.mLastQueuedCrop.bottom,
                slot.mLastQueuedTransform, slot.mLastQueuedTimestamp
        );
        result.append(buffer);
    }
}

static void mtxMul(float out[16], const float a[16], const float b[16]) {
static void mtxMul(float out[16], const float a[16], const float b[16]) {
    out[0] = a[0]*b[0] + a[4]*b[1] + a[8]*b[2] + a[12]*b[3];
    out[0] = a[0]*b[0] + a[4]*b[1] + a[8]*b[2] + a[12]*b[3];
    out[1] = a[1]*b[0] + a[5]*b[1] + a[9]*b[2] + a[13]*b[3];
    out[1] = a[1]*b[0] + a[5]*b[1] + a[9]*b[2] + a[13]*b[3];