Implement log merging.
Still missing:
* Put in separate periodical thread
Bug: 35329293
Test: manual
Change-Id: Ie8802fb7972e20d8dec493376ea253bb782f3a46
diff --git a/services/medialog/MediaLogService.h b/services/medialog/MediaLogService.h
index c9bf2eb..e934844 100644
--- a/services/medialog/MediaLogService.h
+++ b/services/medialog/MediaLogService.h
@@ -27,8 +27,13 @@
{
friend class BinderService<MediaLogService>; // for MediaLogService()
public:
- MediaLogService() : BnMediaLogService() { }
- virtual ~MediaLogService() { }
+ MediaLogService() :
+ BnMediaLogService(),
+ mMergerShared((NBLog::Shared*) malloc(NBLog::Timeline::sharedSize(kMergeBufferSize))),
+ mMerger(mMergerShared, kMergeBufferSize),
+ mMergeReader(mMergerShared, kMergeBufferSize, mMerger)
+ {ALOGI("Nico creating MergeReader");}
+ virtual ~MediaLogService() { free(mMergerShared); }
virtual void onFirstRef() { }
static const char* getServiceName() { return "media.log"; }
@@ -47,23 +52,16 @@
// Internal dump
static const int kDumpLockRetries = 50;
static const int kDumpLockSleepUs = 20000;
+ static const size_t kMergeBufferSize = 16 * 1024; // TODO determine good value for this
static bool dumpTryLock(Mutex& mutex);
Mutex mLock;
- class NamedReader {
- public:
- NamedReader() : mReader(0) { mName[0] = '\0'; } // for Vector
- NamedReader(const sp<NBLog::Reader>& reader, const char *name) : mReader(reader)
- { strlcpy(mName, name, sizeof(mName)); }
- ~NamedReader() { }
- const sp<NBLog::Reader>& reader() const { return mReader; }
- const char* name() const { return mName; }
- private:
- sp<NBLog::Reader> mReader;
- static const size_t kMaxName = 32;
- char mName[kMaxName];
- };
- Vector<NamedReader> mNamedReaders;
+
+ Vector<NBLog::NamedReader> mNamedReaders;
+
+ NBLog::Shared *mMergerShared;
+ NBLog::Merger mMerger;
+ NBLog::MergeReader mMergeReader;
};
} // namespace android