summaryrefslogtreecommitdiffstats
path: root/services/mediaresourcemanager
diff options
context:
space:
mode:
authorRonghua Wu <ronghuawu@google.com>2015-05-11 15:15:09 -0700
committerRonghua Wu <ronghuawu@google.com>2015-05-11 15:16:54 -0700
commit022ed72e650f756288492ac7a10a7b41e0b14f82 (patch)
tree6c07c47b9b3c2d0b68eb9b989a879065a96f15bc /services/mediaresourcemanager
parent9ba21b9418d10ddcc39f08901e24fbf43d82b2bc (diff)
downloadframeworks_av-022ed72e650f756288492ac7a10a7b41e0b14f82.zip
frameworks_av-022ed72e650f756288492ac7a10a7b41e0b14f82.tar.gz
frameworks_av-022ed72e650f756288492ac7a10a7b41e0b14f82.tar.bz2
mediaresourcemanager: change resource manager service log to use ring buffer.
move the ring buffer implementation from libcameraservice to media include. also add line prefix support to the service log. Bug: 20637674 Change-Id: Ib6b32f31abe92c42644ef7012f1e3d46220ccfbd
Diffstat (limited to 'services/mediaresourcemanager')
-rw-r--r--services/mediaresourcemanager/ResourceManagerService.cpp4
-rw-r--r--services/mediaresourcemanager/ServiceLog.cpp29
-rw-r--r--services/mediaresourcemanager/ServiceLog.h10
-rw-r--r--services/mediaresourcemanager/test/ServiceLog_test.cpp53
4 files changed, 61 insertions, 35 deletions
diff --git a/services/mediaresourcemanager/ResourceManagerService.cpp b/services/mediaresourcemanager/ResourceManagerService.cpp
index 3c093f9..e2b6695 100644
--- a/services/mediaresourcemanager/ResourceManagerService.cpp
+++ b/services/mediaresourcemanager/ResourceManagerService.cpp
@@ -126,8 +126,8 @@ status_t ResourceManagerService::dump(int fd, const Vector<String16>& /* args */
}
}
}
- result.append(" Logs:\n");
- result.append(mServiceLog->toString());
+ result.append(" Events logs (most recent at top):\n");
+ result.append(mServiceLog->toString(" " /* linePrefix */));
write(fd, result.string(), result.size());
return OK;
diff --git a/services/mediaresourcemanager/ServiceLog.cpp b/services/mediaresourcemanager/ServiceLog.cpp
index be7b308..791e797 100644
--- a/services/mediaresourcemanager/ServiceLog.cpp
+++ b/services/mediaresourcemanager/ServiceLog.cpp
@@ -27,28 +27,37 @@ static const size_t kDefaultMaxNum = 100;
namespace android {
-ServiceLog::ServiceLog() : mMaxNum(kDefaultMaxNum) {}
-ServiceLog::ServiceLog(size_t maxNum) : mMaxNum(maxNum) {}
+ServiceLog::ServiceLog() : mMaxNum(kDefaultMaxNum), mLogs(mMaxNum) {}
+ServiceLog::ServiceLog(size_t maxNum) : mMaxNum(maxNum), mLogs(mMaxNum) {}
void ServiceLog::add(const String8 &log) {
Mutex::Autolock lock(mLock);
time_t now = time(0);
char buf[64];
strftime(buf, sizeof(buf), "%m-%d %T", localtime(&now));
- String8 formattedLog = String8::format("%s %s", buf, log.string());
- if (mLogs.add(formattedLog) == mMaxNum) {
- mLogs.removeAt(0);
- }
+ mLogs.add(String8::format("%s %s", buf, log.string()));
}
-String8 ServiceLog::toString() const {
+String8 ServiceLog::toString(const char *linePrefix) const {
Mutex::Autolock lock(mLock);
String8 result;
- for (size_t i = 0; i < mLogs.size(); ++i) {
- result.append(mLogs[i]);
- result.append("\n");
+ for (const auto& log : mLogs) {
+ addLine(log.string(), linePrefix, &result);
+ }
+ if (mLogs.size() == mMaxNum) {
+ addLine("...", linePrefix, &result);
+ } else if (mLogs.size() == 0) {
+ addLine("[no events yet]", linePrefix, &result);
}
return result;
}
+void ServiceLog::addLine(const char *log, const char *prefix, String8 *result) const {
+ if (prefix != NULL) {
+ result->append(prefix);
+ }
+ result->append(log);
+ result->append("\n");
+}
+
} // namespace android
diff --git a/services/mediaresourcemanager/ServiceLog.h b/services/mediaresourcemanager/ServiceLog.h
index 14814ff..a6f16eb 100644
--- a/services/mediaresourcemanager/ServiceLog.h
+++ b/services/mediaresourcemanager/ServiceLog.h
@@ -23,6 +23,8 @@
#include <utils/threads.h>
#include <utils/Vector.h>
+#include "media/RingBuffer.h"
+
namespace android {
class ServiceLog : public RefBase {
@@ -31,12 +33,14 @@ public:
ServiceLog(size_t maxNum);
void add(const String8 &log);
- String8 toString() const;
+ String8 toString(const char *linePrefix = NULL) const;
private:
- int mMaxNum;
+ size_t mMaxNum;
mutable Mutex mLock;
- Vector<String8> mLogs;
+ RingBuffer<String8> mLogs;
+
+ void addLine(const char *log, const char *prefix, String8 *result) const;
};
// ----------------------------------------------------------------------------
diff --git a/services/mediaresourcemanager/test/ServiceLog_test.cpp b/services/mediaresourcemanager/test/ServiceLog_test.cpp
index 6ddcb87..9172499 100644
--- a/services/mediaresourcemanager/test/ServiceLog_test.cpp
+++ b/services/mediaresourcemanager/test/ServiceLog_test.cpp
@@ -34,35 +34,48 @@ protected:
};
TEST_F(ServiceLogTest, addThenToString) {
+ String8 logString;
+
mServiceLog->add(String8("log1"));
- EXPECT_TRUE(mServiceLog->toString().contains("log1"));
- ALOGV("toString:\n%s", mServiceLog->toString().string());
+ logString = mServiceLog->toString();
+ EXPECT_TRUE(logString.contains("log1"));
+ ALOGV("toString:\n%s", logString.string());
+
+ static const char kTestLogPrefix[] = "testlogprefix: ";
+ logString = mServiceLog->toString(kTestLogPrefix);
+ EXPECT_TRUE(logString.contains(kTestLogPrefix));
+ EXPECT_TRUE(logString.contains("log1"));
+ ALOGV("toString:\n%s", logString.string());
mServiceLog->add(String8("log2"));
- EXPECT_TRUE(mServiceLog->toString().contains("log1"));
- EXPECT_TRUE(mServiceLog->toString().contains("log2"));
- ALOGV("toString:\n%s", mServiceLog->toString().string());
+ logString = mServiceLog->toString();
+ EXPECT_TRUE(logString.contains("log1"));
+ EXPECT_TRUE(logString.contains("log2"));
+ ALOGV("toString:\n%s", logString.string());
mServiceLog->add(String8("log3"));
- EXPECT_TRUE(mServiceLog->toString().contains("log1"));
- EXPECT_TRUE(mServiceLog->toString().contains("log2"));
- EXPECT_TRUE(mServiceLog->toString().contains("log3"));
- ALOGV("toString:\n%s", mServiceLog->toString().string());
+ logString = mServiceLog->toString();
+ EXPECT_TRUE(logString.contains("log1"));
+ EXPECT_TRUE(logString.contains("log2"));
+ EXPECT_TRUE(logString.contains("log3"));
+ ALOGV("toString:\n%s", logString.string());
mServiceLog->add(String8("log4"));
- EXPECT_FALSE(mServiceLog->toString().contains("log1"));
- EXPECT_TRUE(mServiceLog->toString().contains("log2"));
- EXPECT_TRUE(mServiceLog->toString().contains("log3"));
- EXPECT_TRUE(mServiceLog->toString().contains("log4"));
- ALOGV("toString:\n%s", mServiceLog->toString().string());
+ logString = mServiceLog->toString();
+ EXPECT_FALSE(logString.contains("log1"));
+ EXPECT_TRUE(logString.contains("log2"));
+ EXPECT_TRUE(logString.contains("log3"));
+ EXPECT_TRUE(logString.contains("log4"));
+ ALOGV("toString:\n%s", logString.string());
mServiceLog->add(String8("log5"));
- EXPECT_FALSE(mServiceLog->toString().contains("log1"));
- EXPECT_FALSE(mServiceLog->toString().contains("log2"));
- EXPECT_TRUE(mServiceLog->toString().contains("log3"));
- EXPECT_TRUE(mServiceLog->toString().contains("log4"));
- EXPECT_TRUE(mServiceLog->toString().contains("log5"));
- ALOGV("toString:\n%s", mServiceLog->toString().string());
+ logString = mServiceLog->toString();
+ EXPECT_FALSE(logString.contains("log1"));
+ EXPECT_FALSE(logString.contains("log2"));
+ EXPECT_TRUE(logString.contains("log3"));
+ EXPECT_TRUE(logString.contains("log4"));
+ EXPECT_TRUE(logString.contains("log5"));
+ ALOGV("toString:\n%s", logString.string());
}
} // namespace android