am bcef9ac3: add basic time stats for surfaces lock time
Merge commit 'bcef9ac35da08b9f7f8a4728af94c23a7a010669' into eclair-plus-aosp * commit 'bcef9ac35da08b9f7f8a4728af94c23a7a010669': add basic time stats for surfaces lock time
This commit is contained in:
@@ -69,12 +69,6 @@ class SharedClient;
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
struct FlatRegion { // 12 bytes
|
|
||||||
static const unsigned int NUM_RECT_MAX = 1;
|
|
||||||
uint32_t count;
|
|
||||||
uint16_t rects[4*NUM_RECT_MAX];
|
|
||||||
};
|
|
||||||
|
|
||||||
// should be 128 bytes (32 longs)
|
// should be 128 bytes (32 longs)
|
||||||
class SharedBufferStack
|
class SharedBufferStack
|
||||||
{
|
{
|
||||||
@@ -84,6 +78,18 @@ class SharedBufferStack
|
|||||||
friend class SharedBufferServer;
|
friend class SharedBufferServer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
struct FlatRegion { // 12 bytes
|
||||||
|
static const unsigned int NUM_RECT_MAX = 1;
|
||||||
|
uint32_t count;
|
||||||
|
uint16_t rects[4*NUM_RECT_MAX];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Statistics { // 4 longs
|
||||||
|
typedef int32_t usecs_t;
|
||||||
|
usecs_t totalTime;
|
||||||
|
usecs_t reserved[3];
|
||||||
|
};
|
||||||
|
|
||||||
SharedBufferStack();
|
SharedBufferStack();
|
||||||
void init(int32_t identity);
|
void init(int32_t identity);
|
||||||
status_t setDirtyRegion(int buffer, const Region& reg);
|
status_t setDirtyRegion(int buffer, const Region& reg);
|
||||||
@@ -100,7 +106,8 @@ public:
|
|||||||
volatile int32_t reallocMask;
|
volatile int32_t reallocMask;
|
||||||
|
|
||||||
int32_t identity; // surface's identity (const)
|
int32_t identity; // surface's identity (const)
|
||||||
int32_t reserved32[13];
|
int32_t reserved32[9];
|
||||||
|
Statistics stats;
|
||||||
FlatRegion dirtyRegion[NUM_BUFFER_MAX]; // 12*4=48 bytes
|
FlatRegion dirtyRegion[NUM_BUFFER_MAX]; // 12*4=48 bytes
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -223,7 +230,7 @@ public:
|
|||||||
status_t queue(int buf);
|
status_t queue(int buf);
|
||||||
bool needNewBuffer(int buffer) const;
|
bool needNewBuffer(int buffer) const;
|
||||||
status_t setDirtyRegion(int buffer, const Region& reg);
|
status_t setDirtyRegion(int buffer, const Region& reg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend struct Condition;
|
friend struct Condition;
|
||||||
friend struct DequeueCondition;
|
friend struct DequeueCondition;
|
||||||
@@ -257,6 +264,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
int32_t tail;
|
int32_t tail;
|
||||||
|
// statistics...
|
||||||
|
nsecs_t mDequeueTime[NUM_BUFFER_MAX];
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -275,6 +284,9 @@ public:
|
|||||||
|
|
||||||
Region getDirtyRegion(int buffer) const;
|
Region getDirtyRegion(int buffer) const;
|
||||||
|
|
||||||
|
SharedBufferStack::Statistics getStats() const;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct UnlockUpdate : public UpdateBase {
|
struct UnlockUpdate : public UpdateBase {
|
||||||
const int lockedBuffer;
|
const int lockedBuffer;
|
||||||
|
|||||||
@@ -1521,6 +1521,7 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args)
|
|||||||
/*** Layer ***/
|
/*** Layer ***/
|
||||||
sp<Layer> l = LayerBase::dynamicCast< Layer* >(layer.get());
|
sp<Layer> l = LayerBase::dynamicCast< Layer* >(layer.get());
|
||||||
if (l != 0) {
|
if (l != 0) {
|
||||||
|
SharedBufferStack::Statistics stats = l->lcblk->getStats();
|
||||||
result.append( l->lcblk->dump(" ") );
|
result.append( l->lcblk->dump(" ") );
|
||||||
sp<const Buffer> buf0(l->getBuffer(0));
|
sp<const Buffer> buf0(l->getBuffer(0));
|
||||||
sp<const Buffer> buf1(l->getBuffer(1));
|
sp<const Buffer> buf1(l->getBuffer(1));
|
||||||
@@ -1539,10 +1540,10 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args)
|
|||||||
snprintf(buffer, SIZE,
|
snprintf(buffer, SIZE,
|
||||||
" "
|
" "
|
||||||
"format=%2d, [%3ux%3u:%3u] [%3ux%3u:%3u],"
|
"format=%2d, [%3ux%3u:%3u] [%3ux%3u:%3u],"
|
||||||
" freezeLock=%p\n",
|
" freezeLock=%p, dq-q-time=%u us\n",
|
||||||
l->pixelFormat(),
|
l->pixelFormat(),
|
||||||
w0, h0, s0, w1, h1, s1,
|
w0, h0, s0, w1, h1, s1,
|
||||||
l->getFreezeLock().get());
|
l->getFreezeLock().get(), stats.totalTime);
|
||||||
result.append(buffer);
|
result.append(buffer);
|
||||||
buffer[0] = 0;
|
buffer[0] = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -276,6 +276,8 @@ ssize_t SharedBufferClient::dequeue()
|
|||||||
LOGW("dequeue: tail=%d, head=%d, avail=%d, queued=%d",
|
LOGW("dequeue: tail=%d, head=%d, avail=%d, queued=%d",
|
||||||
tail, stack.head, stack.available, stack.queued);
|
tail, stack.head, stack.available, stack.queued);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const nsecs_t dequeueTime = systemTime(SYSTEM_TIME_THREAD);
|
||||||
|
|
||||||
//LOGD("[%d] about to dequeue a buffer",
|
//LOGD("[%d] about to dequeue a buffer",
|
||||||
// mSharedStack->identity);
|
// mSharedStack->identity);
|
||||||
@@ -296,6 +298,8 @@ ssize_t SharedBufferClient::dequeue()
|
|||||||
LOGD_IF(DEBUG_ATOMICS, "dequeued=%d, tail=%d, %s",
|
LOGD_IF(DEBUG_ATOMICS, "dequeued=%d, tail=%d, %s",
|
||||||
dequeued, tail, dump("").string());
|
dequeued, tail, dump("").string());
|
||||||
|
|
||||||
|
mDequeueTime[dequeued] = dequeueTime;
|
||||||
|
|
||||||
return dequeued;
|
return dequeued;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,7 +316,7 @@ status_t SharedBufferClient::undoDequeue(int buf)
|
|||||||
status_t SharedBufferClient::lock(int buf)
|
status_t SharedBufferClient::lock(int buf)
|
||||||
{
|
{
|
||||||
LockCondition condition(this, buf);
|
LockCondition condition(this, buf);
|
||||||
status_t err = waitForCondition(condition);
|
status_t err = waitForCondition(condition);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,6 +325,9 @@ status_t SharedBufferClient::queue(int buf)
|
|||||||
QueueUpdate update(this);
|
QueueUpdate update(this);
|
||||||
status_t err = updateCondition( update );
|
status_t err = updateCondition( update );
|
||||||
LOGD_IF(DEBUG_ATOMICS, "queued=%d, %s", buf, dump("").string());
|
LOGD_IF(DEBUG_ATOMICS, "queued=%d, %s", buf, dump("").string());
|
||||||
|
SharedBufferStack& stack( *mSharedStack );
|
||||||
|
const nsecs_t now = systemTime(SYSTEM_TIME_THREAD);
|
||||||
|
stack.stats.totalTime = ns2us(now - mDequeueTime[buf]);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,5 +400,12 @@ Region SharedBufferServer::getDirtyRegion(int buffer) const
|
|||||||
return stack.getDirtyRegion(buffer);
|
return stack.getDirtyRegion(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SharedBufferStack::Statistics SharedBufferServer::getStats() const
|
||||||
|
{
|
||||||
|
SharedBufferStack& stack( *mSharedStack );
|
||||||
|
return stack.stats;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
}; // namespace android
|
}; // namespace android
|
||||||
|
|||||||
Reference in New Issue
Block a user