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

Commit f2c6fe29 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 20878 into donut

* changes:
  Fix issue #2048263: More debugging information
parents 012bb4d4 e8685132
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ public:
    virtual ~Asset(void);
    virtual ~Asset(void);


    static int32_t getGlobalCount();
    static int32_t getGlobalCount();
    static String8 getAssetAllocations();
    
    
    /* used when opening an asset */
    /* used when opening an asset */
    typedef enum AccessMode {
    typedef enum AccessMode {
@@ -109,6 +110,12 @@ public:
     */
     */
    virtual int openFileDescriptor(off_t* outStart, off_t* outLength) const = 0;
    virtual int openFileDescriptor(off_t* outStart, off_t* outLength) const = 0;
    
    
    /*
     * Return whether this asset's buffer is allocated in RAM (not mmapped).
     * Note: not virtual so it is safe to call even when being destroyed.
     */
    virtual bool isAllocated(void) const { return false; }
    
    /*
    /*
     * Get a string identifying the asset's source.  This might be a full
     * Get a string identifying the asset's source.  This might be a full
     * path, it might be a colon-separated list of identifiers.
     * path, it might be a colon-separated list of identifiers.
@@ -197,6 +204,9 @@ private:


    AccessMode  mAccessMode;        // how the asset was opened
    AccessMode  mAccessMode;        // how the asset was opened
    String8    mAssetSource;       // debug string
    String8    mAssetSource;       // debug string
    
    Asset*		mNext;				// linked list.
    Asset*		mPrev;
};
};




@@ -239,6 +249,7 @@ public:
    virtual off_t getLength(void) const { return mLength; }
    virtual off_t getLength(void) const { return mLength; }
    virtual off_t getRemainingLength(void) const { return mLength-mOffset; }
    virtual off_t getRemainingLength(void) const { return mLength-mOffset; }
    virtual int openFileDescriptor(off_t* outStart, off_t* outLength) const;
    virtual int openFileDescriptor(off_t* outStart, off_t* outLength) const;
    virtual bool isAllocated(void) const { return mBuf != NULL; }


private:
private:
    off_t       mStart;         // absolute file offset of start of chunk
    off_t       mStart;         // absolute file offset of start of chunk
@@ -295,6 +306,7 @@ public:
    virtual off_t getLength(void) const { return mUncompressedLen; }
    virtual off_t getLength(void) const { return mUncompressedLen; }
    virtual off_t getRemainingLength(void) const { return mUncompressedLen-mOffset; }
    virtual off_t getRemainingLength(void) const { return mUncompressedLen-mOffset; }
    virtual int openFileDescriptor(off_t* outStart, off_t* outLength) const { return -1; }
    virtual int openFileDescriptor(off_t* outStart, off_t* outLength) const { return -1; }
    virtual bool isAllocated(void) const { return mBuf != NULL; }


private:
private:
    off_t       mStart;         // offset to start of compressed data
    off_t       mStart;         // offset to start of compressed data
+53 −5
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@
#include <utils/ZipUtils.h>
#include <utils/ZipUtils.h>
#include <utils/ZipFileRO.h>
#include <utils/ZipFileRO.h>
#include <utils/Log.h>
#include <utils/Log.h>
#include <utils/threads.h>


#include <string.h>
#include <string.h>
#include <memory.h>
#include <memory.h>
@@ -40,24 +41,71 @@ using namespace android;
# define O_BINARY 0
# define O_BINARY 0
#endif
#endif


static volatile int32_t gCount = 0;
static Mutex gAssetLock;
static int32_t gCount = 0;
static Asset* gHead = NULL;
static Asset* gTail = NULL;


int32_t Asset::getGlobalCount()
int32_t Asset::getGlobalCount()
{
{
    AutoMutex _l(gAssetLock);
    return gCount;
    return gCount;
}
}


String8 Asset::getAssetAllocations()
{
    AutoMutex _l(gAssetLock);
    String8 res;
    Asset* cur = gHead;
    while (cur != NULL) {
        if (cur->isAllocated()) {
            res.append("    ");
            res.append(cur->getAssetSource());
            off_t size = (cur->getLength()+512)/1024;
            char buf[64];
            sprintf(buf, ": %dK\n", (int)size);
            res.append(buf);
        }
        cur = cur->mNext;
    }
    
    return res;
}

Asset::Asset(void)
Asset::Asset(void)
    : mAccessMode(ACCESS_UNKNOWN)
    : mAccessMode(ACCESS_UNKNOWN)
{
{
    int count = android_atomic_inc(&gCount)+1;
    AutoMutex _l(gAssetLock);
    //LOGI("Creating Asset %p #%d\n", this, count);
    gCount++;
    mNext = mPrev = NULL;
    if (gTail == NULL) {
        gHead = gTail = this;
  	} else {
  	    mPrev = gTail;
  	    gTail->mNext = this;
  	    gTail = this;
  	}
    //LOGI("Creating Asset %p #%d\n", this, gCount);
}
}


Asset::~Asset(void)
Asset::~Asset(void)
{
{
    int count = android_atomic_dec(&gCount);
    AutoMutex _l(gAssetLock);
    //LOGI("Destroying Asset in %p #%d\n", this, count);
	gCount--;
    if (gHead == this) {
        gHead = mNext;
    }
    if (gTail == this) {
        gTail = mPrev;
    }
    if (mNext != NULL) {
        mNext->mPrev = mPrev;
    }
    if (mPrev != NULL) {
        mPrev->mNext = mNext;
    }
    mNext = mPrev = NULL;
    //LOGI("Destroying Asset in %p #%d\n", this, gCount);
}
}


/*
/*