diff options
Diffstat (limited to 'media/libstagefright/foundation')
-rw-r--r-- | media/libstagefright/foundation/ALooperRoster.cpp | 82 | ||||
-rw-r--r-- | media/libstagefright/foundation/AMessage.cpp | 30 | ||||
-rw-r--r-- | media/libstagefright/foundation/ANetworkSession.cpp | 6 | ||||
-rw-r--r-- | media/libstagefright/foundation/AString.cpp | 2 | ||||
-rw-r--r-- | media/libstagefright/foundation/AWakeLock.cpp | 2 |
5 files changed, 102 insertions, 20 deletions
diff --git a/media/libstagefright/foundation/ALooperRoster.cpp b/media/libstagefright/foundation/ALooperRoster.cpp index e0dc768..2d57aee 100644 --- a/media/libstagefright/foundation/ALooperRoster.cpp +++ b/media/libstagefright/foundation/ALooperRoster.cpp @@ -17,6 +17,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ALooperRoster" #include <utils/Log.h> +#include <utils/String8.h> #include "ALooperRoster.h" @@ -26,6 +27,8 @@ namespace android { +static bool verboseStats = false; + ALooperRoster::ALooperRoster() : mNextHandlerID(1), mNextReplyID(1) { @@ -136,6 +139,17 @@ void ALooperRoster::deliverMessage(const sp<AMessage> &msg) { } handler->onMessageReceived(msg); + handler->mMessageCounter++; + + if (verboseStats) { + uint32_t what = msg->what(); + ssize_t idx = handler->mMessages.indexOfKey(what); + if (idx < 0) { + handler->mMessages.add(what, 1); + } else { + handler->mMessages.editValueAt(idx)++; + } + } } sp<ALooper> ALooperRoster::findLooper(ALooper::handler_id handlerID) { @@ -196,4 +210,72 @@ void ALooperRoster::postReply(uint32_t replyID, const sp<AMessage> &reply) { mRepliesCondition.broadcast(); } +static void makeFourCC(uint32_t fourcc, char *s) { + s[0] = (fourcc >> 24) & 0xff; + if (s[0]) { + s[1] = (fourcc >> 16) & 0xff; + s[2] = (fourcc >> 8) & 0xff; + s[3] = fourcc & 0xff; + s[4] = 0; + } else { + sprintf(s, "%u", fourcc); + } +} + +void ALooperRoster::dump(int fd, const Vector<String16>& args) { + bool clear = false; + bool oldVerbose = verboseStats; + for (size_t i = 0;i < args.size(); i++) { + if (args[i] == String16("-c")) { + clear = true; + } else if (args[i] == String16("-von")) { + verboseStats = true; + } else if (args[i] == String16("-voff")) { + verboseStats = false; + } + } + String8 s; + if (verboseStats && !oldVerbose) { + s.append("(verbose stats collection enabled, stats will be cleared)\n"); + } + + Mutex::Autolock autoLock(mLock); + size_t n = mHandlers.size(); + s.appendFormat(" %zd registered handlers:\n", n); + + for (size_t i = 0; i < n; i++) { + s.appendFormat(" %zd: ", i); + HandlerInfo &info = mHandlers.editValueAt(i); + sp<ALooper> looper = info.mLooper.promote(); + if (looper != NULL) { + s.append(looper->mName.c_str()); + sp<AHandler> handler = info.mHandler.promote(); + if (handler != NULL) { + s.appendFormat(": %u messages processed", handler->mMessageCounter); + if (verboseStats) { + for (size_t j = 0; j < handler->mMessages.size(); j++) { + char fourcc[15]; + makeFourCC(handler->mMessages.keyAt(j), fourcc); + s.appendFormat("\n %s: %d", + fourcc, + handler->mMessages.valueAt(j)); + } + } else { + handler->mMessages.clear(); + } + if (clear || (verboseStats && !oldVerbose)) { + handler->mMessageCounter = 0; + handler->mMessages.clear(); + } + } else { + s.append(": <stale handler>"); + } + } else { + s.append("<stale>"); + } + s.append("\n"); + } + write(fd, s.string(), s.size()); +} + } // namespace android diff --git a/media/libstagefright/foundation/AMessage.cpp b/media/libstagefright/foundation/AMessage.cpp index 795e8a6..1f46bc9 100644 --- a/media/libstagefright/foundation/AMessage.cpp +++ b/media/libstagefright/foundation/AMessage.cpp @@ -426,19 +426,19 @@ AString AMessage::debugString(int32_t indent) const { AString tmp; if (isFourcc(mWhat)) { - tmp = StringPrintf( + tmp = AStringPrintf( "'%c%c%c%c'", (char)(mWhat >> 24), (char)((mWhat >> 16) & 0xff), (char)((mWhat >> 8) & 0xff), (char)(mWhat & 0xff)); } else { - tmp = StringPrintf("0x%08x", mWhat); + tmp = AStringPrintf("0x%08x", mWhat); } s.append(tmp); if (mTarget != 0) { - tmp = StringPrintf(", target = %d", mTarget); + tmp = AStringPrintf(", target = %d", mTarget); s.append(tmp); } s.append(") = {\n"); @@ -448,37 +448,37 @@ AString AMessage::debugString(int32_t indent) const { switch (item.mType) { case kTypeInt32: - tmp = StringPrintf( + tmp = AStringPrintf( "int32_t %s = %d", item.mName, item.u.int32Value); break; case kTypeInt64: - tmp = StringPrintf( + tmp = AStringPrintf( "int64_t %s = %lld", item.mName, item.u.int64Value); break; case kTypeSize: - tmp = StringPrintf( + tmp = AStringPrintf( "size_t %s = %d", item.mName, item.u.sizeValue); break; case kTypeFloat: - tmp = StringPrintf( + tmp = AStringPrintf( "float %s = %f", item.mName, item.u.floatValue); break; case kTypeDouble: - tmp = StringPrintf( + tmp = AStringPrintf( "double %s = %f", item.mName, item.u.doubleValue); break; case kTypePointer: - tmp = StringPrintf( + tmp = AStringPrintf( "void *%s = %p", item.mName, item.u.ptrValue); break; case kTypeString: - tmp = StringPrintf( + tmp = AStringPrintf( "string %s = \"%s\"", item.mName, item.u.stringValue->c_str()); break; case kTypeObject: - tmp = StringPrintf( + tmp = AStringPrintf( "RefBase *%s = %p", item.mName, item.u.refValue); break; case kTypeBuffer: @@ -486,18 +486,18 @@ AString AMessage::debugString(int32_t indent) const { sp<ABuffer> buffer = static_cast<ABuffer *>(item.u.refValue); if (buffer != NULL && buffer->data() != NULL && buffer->size() <= 64) { - tmp = StringPrintf("Buffer %s = {\n", item.mName); + tmp = AStringPrintf("Buffer %s = {\n", item.mName); hexdump(buffer->data(), buffer->size(), indent + 4, &tmp); appendIndent(&tmp, indent + 2); tmp.append("}"); } else { - tmp = StringPrintf( + tmp = AStringPrintf( "Buffer *%s = %p", item.mName, buffer.get()); } break; } case kTypeMessage: - tmp = StringPrintf( + tmp = AStringPrintf( "AMessage %s = %s", item.mName, static_cast<AMessage *>( @@ -505,7 +505,7 @@ AString AMessage::debugString(int32_t indent) const { indent + strlen(item.mName) + 14).c_str()); break; case kTypeRect: - tmp = StringPrintf( + tmp = AStringPrintf( "Rect %s(%d, %d, %d, %d)", item.mName, item.u.rectValue.mLeft, diff --git a/media/libstagefright/foundation/ANetworkSession.cpp b/media/libstagefright/foundation/ANetworkSession.cpp index 4504c2b..b230400 100644 --- a/media/libstagefright/foundation/ANetworkSession.cpp +++ b/media/libstagefright/foundation/ANetworkSession.cpp @@ -187,7 +187,7 @@ ANetworkSession::Session::Session( CHECK_GE(res, 0); in_addr_t addr = ntohl(localAddr.sin_addr.s_addr); - AString localAddrString = StringPrintf( + AString localAddrString = AStringPrintf( "%d.%d.%d.%d", (addr >> 24), (addr >> 16) & 0xff, @@ -195,7 +195,7 @@ ANetworkSession::Session::Session( addr & 0xff); addr = ntohl(remoteAddr.sin_addr.s_addr); - AString remoteAddrString = StringPrintf( + AString remoteAddrString = AStringPrintf( "%d.%d.%d.%d", (addr >> 24), (addr >> 16) & 0xff, @@ -301,7 +301,7 @@ status_t ANetworkSession::Session::readMore() { uint32_t ip = ntohl(remoteAddr.sin_addr.s_addr); notify->setString( "fromAddr", - StringPrintf( + AStringPrintf( "%u.%u.%u.%u", ip >> 24, (ip >> 16) & 0xff, diff --git a/media/libstagefright/foundation/AString.cpp b/media/libstagefright/foundation/AString.cpp index 9835ca3..b167543 100644 --- a/media/libstagefright/foundation/AString.cpp +++ b/media/libstagefright/foundation/AString.cpp @@ -366,7 +366,7 @@ status_t AString::writeToParcel(Parcel *parcel) const { return err; } -AString StringPrintf(const char *format, ...) { +AString AStringPrintf(const char *format, ...) { va_list ap; va_start(ap, format); diff --git a/media/libstagefright/foundation/AWakeLock.cpp b/media/libstagefright/foundation/AWakeLock.cpp index 88c4f6e..d9277ac 100644 --- a/media/libstagefright/foundation/AWakeLock.cpp +++ b/media/libstagefright/foundation/AWakeLock.cpp @@ -36,7 +36,7 @@ AWakeLock::AWakeLock() : AWakeLock::~AWakeLock() { if (mPowerManager != NULL) { - sp<IBinder> binder = mPowerManager->asBinder(); + sp<IBinder> binder = IInterface::asBinder(mPowerManager); binder->unlinkToDeath(mDeathRecipient); } clearPowerManager(); |