IMemory.cpp:
IMemory:定义IMemory getMemory接口
virtual sp<IMemoryHeap> getMemory(ssize_t* offset=0, size_t* size=0): 实现类需要实现的功能,返回IMemoryHeap指针,数据大小size,数据在内存的偏移量offset
void* fastPointer(const sp<IBinder>& heap, ssize_t offset): 返回heap偏移量为offset的数据指针
void* pointer() :返回数据指针
size_t size() :返回数据大小
ssize_t offset() :返回数据在head中的偏移量
BnMemory:实现IMemory接口,增加了onTransact但是没有真正实现getMemory
onTransact:getMemory 数据
IMemoryHeap:定义了一组接口
int getHeapID() :heap id
void* getBase() :mmap返回的值
size_t getSize() :客户端请求的大小
uint32_t getFlags():客户端请求的flags
BnMemoryHeap 实现了ImemoryHeap并增加了onTransact接口
BpMemoryHeap实现了ImemoryHeap作为IMemoy.cpp的内部工具类使用
BpMemoryHeap::assertReallyMapped():从客户端读取fd,size,flag使用mmap返回值设置mBase
HeapCache是一个IMemory.cpp中的一个工具类,有一个全局文件变量,管理所有IMemoryHeap对象
sp<IMemoryHeap> HeapCache::find_heap(const sp<IBinder>& binder):如果cache has binder then return the object and increase the reference,如果没有,把binder转换成IMemoryHeap并add into the cache
MemoryDealer.h
struct chunk_t { 用于记录分配的内存空间记录,每次找到最小的合适的内存分片;修改上一个chunk_t并创建出一个新的chunk_t用于原来分片剩余的内存
chunk_t(size_t start, size_t size)
: start(start), size(size), free(1), prev(0), next(0) {
}
size_t start; 在整个内存中的偏移量
size_t size : 28; 申请内存allign后的大小
int free : 4; 1:free,0:no free
mutable chunk_t* prev;
mutable chunk_t* next;
};