SurfaceFlinger 库功能性学习--- TODO

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;
    };

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值