summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoward Chen <howardsoc@google.com>2018-08-02 19:33:58 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-08-02 19:33:58 -0700
commitb6efbffc7921b0ecdb6634161d7e8da03bcbcb19 (patch)
tree6f64e20e0f4d531aee5339f05576e0bb9737f5b5
parent8ea22206d70f335ffaab6f1c2c4b34c5acc688e4 (diff)
parent642a9a302472be128b0cda24b1f5724aa5dedcbf (diff)
downloadlibhidl-temp_p_merge.tar.gz
Merge "Fix IMemoryBlock::validRange(),read(),update()"temp_p_merge
am: 642a9a3024 Change-Id: I3c413755dfacbfbd64b3145d25a35b516e58a47a
-rw-r--r--libhidlcache/HidlMemoryCache.cpp37
1 files changed, 20 insertions, 17 deletions
diff --git a/libhidlcache/HidlMemoryCache.cpp b/libhidlcache/HidlMemoryCache.cpp
index f8fbbc1..a23c388 100644
--- a/libhidlcache/HidlMemoryCache.cpp
+++ b/libhidlcache/HidlMemoryCache.cpp
@@ -28,10 +28,10 @@ namespace hardware {
using IMemoryToken = ::android::hidl::memory::token::V1_0::IMemoryToken;
using IMemory = ::android::hidl::memory::V1_0::IMemory;
-class IMemoryDecorator : public virtual IMemory {
+class MemoryDecorator : public virtual IMemory {
public:
- IMemoryDecorator(sp<IMemory> heap) : mHeap(heap) {}
- virtual ~IMemoryDecorator(){}
+ MemoryDecorator(const sp<IMemory>& heap) : mHeap(heap) {}
+ virtual ~MemoryDecorator() {}
Return<void> update() override { return mHeap->update(); }
Return<void> read() override { return mHeap->read(); }
Return<void> updateRange(uint64_t start, uint64_t length) override {
@@ -49,29 +49,28 @@ class IMemoryDecorator : public virtual IMemory {
sp<IMemory> mHeap;
};
-class IMemoryCacheable : public virtual IMemoryDecorator {
+class MemoryCacheable : public virtual MemoryDecorator {
public:
- IMemoryCacheable(sp<IMemory> heap, sp<IMemoryToken> key) : IMemoryDecorator(heap), mKey(key) {}
- virtual ~IMemoryCacheable() { HidlMemoryCache::getInstance()->flush(mKey); }
+ MemoryCacheable(const sp<IMemory>& heap, sp<IMemoryToken> key)
+ : MemoryDecorator(heap), mKey(key) {}
+ virtual ~MemoryCacheable() { HidlMemoryCache::getInstance()->flush(mKey); }
protected:
sp<IMemoryToken> mKey;
};
-class IMemoryBlock : public virtual IMemoryDecorator {
+class MemoryBlockImpl : public virtual IMemory {
public:
- IMemoryBlock(sp<IMemory> heap, uint64_t size, uint64_t offset)
- : IMemoryDecorator(heap), mSize(size), mOffset(offset), mHeapSize(heap->getSize()) {}
+ MemoryBlockImpl(const sp<IMemory>& heap, uint64_t size, uint64_t offset)
+ : mHeap(heap), mSize(size), mOffset(offset), mHeapSize(heap->getSize()) {}
bool validRange(uint64_t start, uint64_t length) {
- return (start + length < mSize) && (start + length >= start) &&
- (mOffset + mSize < mHeapSize);
+ return (start + length <= mSize) && (start + length >= start) &&
+ (mOffset + mSize <= mHeapSize);
}
- Return<void> readRange(uint64_t start, uint64_t length) {
+ Return<void> readRange(uint64_t start, uint64_t length) override {
if (!validRange(start, length)) {
ALOGE("IMemoryBlock::readRange: out of range");
- Status status;
- status.setException(Status::EX_ILLEGAL_ARGUMENT, "out of range");
- return Return<void>(status);
+ return Void();
}
return mHeap->readRange(mOffset + start, length);
}
@@ -82,6 +81,9 @@ class IMemoryBlock : public virtual IMemoryDecorator {
}
return mHeap->updateRange(mOffset + start, length);
}
+ Return<void> read() override { return this->readRange(0, mSize); }
+ Return<void> update() override { return this->updateRange(0, mSize); }
+ Return<void> commit() override { return mHeap->commit(); }
Return<uint64_t> getSize() override { return mSize; }
Return<void*> getPointer() override {
void* p = mHeap->getPointer();
@@ -89,6 +91,7 @@ class IMemoryBlock : public virtual IMemoryDecorator {
}
protected:
+ sp<IMemory> mHeap;
uint64_t mSize;
uint64_t mOffset;
uint64_t mHeapSize;
@@ -102,7 +105,7 @@ sp<HidlMemoryCache> HidlMemoryCache::getInstance() {
sp<IMemory> HidlMemoryCache::fillLocked(const sp<IMemoryToken>& key) {
sp<IMemory> memory = nullptr;
Return<void> ret = key->get(
- [&](const hidl_memory& mem) { memory = new IMemoryCacheable(mapMemory(mem), key); });
+ [&](const hidl_memory& mem) { memory = new MemoryCacheable(mapMemory(mem), key); });
if (!ret.isOk()) {
ALOGE("HidlMemoryCache::fill: cannot IMemoryToken::get.");
return nullptr;
@@ -117,7 +120,7 @@ sp<IMemory> HidlMemoryCache::map(const MemoryBlock& memblk) {
if (heap == nullptr) {
return nullptr;
}
- return new IMemoryBlock(heap, memblk.size, memblk.offset);
+ return new MemoryBlockImpl(heap, memblk.size, memblk.offset);
}
} // namespace hardware