Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(5)
- class BpMemory : public BpInterface<IMemory>
- {
- public:
- BpMemory(const sp<IBinder>& impl);
- virtual ~BpMemory();
- virtual sp<IMemoryHeap> getMemory(ssize_t* offset=0, size_t* size=0) const;
- private:
- mutable sp<IMemoryHeap> mHeap;
- mutable ssize_t mOffset;
- mutable size_t mSize;
- };
- sp<IMemoryHeap> BpMemory::getMemory(ssize_t* offset, size_t* size) const
- {
- if (mHeap == 0) {
- Parcel data, reply;
- data.writeInterfaceToken(IMemory::getInterfaceDescriptor());
- if (remote()->transact(GET_MEMORY, data, &reply) == NO_ERROR) {
- sp<IBinder> heap = reply.readStrongBinder();
- ssize_t o = reply.readInt32();
- size_t s = reply.readInt32();
- if (heap != 0) {
- mHeap = interface_cast<IMemoryHeap>(heap);
- if (mHeap != 0) {
- mOffset = o;
- mSize = s;
- }
- }
- }
- }
- if (offset) *offset = mOffset;
- if (size) *size = mSize;
- return mHeap;
- }
- #ifndef ISHAREDBUFFER_H_
- #define ISHAREDBUFFER_H_
- #include <utils/RefBase.h>
- #include <binder/IInterface.h>
- #include <binder/Parcel.h>
- #define SHARED_BUFFER_SERVICE "shy.luo.SharedBuffer"
- #define SHARED_BUFFER_SIZE 4
- using namespace android;
- class ISharedBuffer: public IInterface
- {
- public:
- DECLARE_META_INTERFACE(SharedBuffer);
- virtual sp<IMemory> getBuffer() = 0;
- };
- class BnSharedBuffer: public BnInterface<ISharedBuffer>
- {
- public:
- virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0);
- };
- #endif
- #define LOG_TAG "ISharedBuffer"
- #include <utils/Log.h>
- #include <binder/MemoryBase.h>
- #include "ISharedBuffer.h"
- using namespace android;
- enum
- {
- GET_BUFFER = IBinder::FIRST_CALL_TRANSACTION
- };
- class BpSharedBuffer: public BpInterface<ISharedBuffer>
- {
- public:
- BpSharedBuffer(const sp<IBinder>& impl)
- : BpInterface<ISharedBuffer>(impl)
- {
- }
- public:
- sp<IMemory> getBuffer()
- {
- Parcel data;
- data.writeInterfaceToken(ISharedBuffer::getInterfaceDescriptor());
- Parcel reply;
- remote()->transact(GET_BUFFER, data, &reply);
- sp<IMemory> buffer = interface_cast<IMemory>(reply.readStrongBinder());
- return buffer;
- }
- };
- IMPLEMENT_META_INTERFACE(SharedBuffer, "shy.luo.ISharedBuffer");
- status_t BnSharedBuffer::onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
- {
- switch(code)
- {
- case GET_BUFFER:
- {
- CHECK_INTERFACE(ISharedBuffer, data, reply);
- sp<IMemory> buffer = getBuffer();
- if(buffer != NULL)
- {
- reply->writeStrongBinder(buffer->asBinder());
- }
- return NO_ERROR;
- }
- default:
- {
- return BBinder::onTransact(code, data, reply, flags);
- }
- }
- }
Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(5)相关推荐
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划
在Android系统中,提供了独特的匿名共享内存子系统Ashmem(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中.它有两个特点,一是能够辅助内存管理系统来有效地 ...
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6664554 在上一文章Android系统匿名共 ...
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析
在前面一篇文章Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析中,我们系统地介绍了Android系统匿名共享内存的实现原理,其中着重介绍了 ...
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
出自:http://blog.csdn.net/luoshengyang/article/details/6939890 在Android系统中,针对移动设备内存空间有限的特点,提供了一种在进程间共享 ...
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(7)
同样,我们需要为这个Client端应用程序编译一个编译脚本,在external/ashmem/client目录下,新建一个Android.mk文件,它的内容如下所示: LOCAL_ ...
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(6)
接下来,我们再来看看server模块的实现.在external/ashmem/common目录下,只有一个源文件SharedBufferServer.cpp,它实现了内存共享服务SharedBuffe ...
- 【并行计算-CUDA开发】关于共享内存(shared memory)和存储体(bank)的事实和疑惑...
关于共享内存(shared memory)和存储体(bank)的事实和疑惑 主要是在研究访问共享内存会产生bank conflict时,自己产生的疑惑.对于这点疑惑,网上都没有相关描述, 不管是国内还 ...
- 进程间通信——共享内存(Shared Memory)
共享内存是System V版本的最后一个进程间通信方式.共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式.不同进程之间共 ...
- Android 匿名共享内存C++接口分析
原址 在上一篇Android 匿名共享内存C接口分析中介绍了Android系统的匿名共享内存C语言访问接口,本文在前文的基础上继续介绍Android系统的匿名共享内存提供的C++访问接口.在C++层通 ...
- Android 匿名共享内存C接口分析
原址 在Android 匿名共享内存驱动源码分析中详细分析了匿名共享内存在Linux内核空间的实现,虽然内核空间实现了匿名共享内存,但仍然需要在用户空间为用户使用匿名共享内存提供访问接口.Androi ...
最新文章
- 【号外】来人鸭~ 本公众号纳新啦~
- Linux安装包deb和rpm格式,deb格式和rpm格式是什么?_网站服务器运行维护
- 西数加密linux,Symantec PGP Desktop pgpwded.sys内核驱动任意代码执行漏洞
- ios学习--TableView详细解释
- c语言试卷大全,C语言试题大全
- 利用结构体数组实现重排序(详解)
- JAVA中日期格式SimpleDateFormat
- 通过系统表获取SQL,Access,Oracle数据库的元数据信息
- thinkphp连接远程数据库慢_干货分享—Niushop数据库配置
- solr4.3纠错源码学习二——基于主索引
- Mac mysql 忘记 root 密码,phpmyadmin 登录 No such file or directory 错误处理
- Java AJAX开发系列 - 5,ZK参考资料
- 360通讯录同步java版_360同步助手app下载_360同步助手官方下最新安卓版v 2.0.3-麦块安卓网...
- Adobe软件注册机
- 最新版MATLAB怎么运行代码,matlab怎么运行代码
- 【程序员节】1024程序员节专属程序员的浪漫
- lvs realserver 配置VIP
- python 输出数据到excel设置超链接及格式设置
- 密码疑云 (3)——详解RSA的加密与解密
- 机房环动监控系统作用
热门文章
- 无法更新标识列 wechatid_天津塘沽企业标识标牌设计制作安装的过程
- php要怎么使用imagettftext_燃气灶漏气怎么办?使用天然气、液化气要注意什么?...
- VMware Converter迁移linux系统虚拟机
- C#交错数组与多维数组区别
- Tomcat使用Tomcat Native和APR
- MongoDB:Map-Reduce
- Pywinauto在Windows Twain Driver自动化测试中的应用研究
- Linux运维常用命令及知识
- java中绘制长方形,椭圆形,圆形的方法
- 原创Android开发文章集合贴