replicant-frameworks_native/include/binder/MemoryHeapPmem.h
Mathias Agopian 0dd0d2944a Simplify the MemoryDealer implementation
At some point the implementation became complicated because of
SurfaceFlinger's special needs, since we are now relying on gralloc
we can go back to much simpler MemoryDealer.

Removed HeapInterface and AllocatorInterface, since those don't need
to be paramterized anymore. Merged SimpleMemory and Allocation.
Made SimplisticAllocator non virtual.

Removed MemoryDealer flags (READ_ONLY, PAGE_ALIGNED)

Removed a lot of unneeded code.
2010-01-29 14:51:06 -08:00

81 lines
2.3 KiB
C++

/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_MEMORY_HEAP_PMEM_H
#define ANDROID_MEMORY_HEAP_PMEM_H
#include <stdlib.h>
#include <stdint.h>
#include <binder/MemoryHeapBase.h>
#include <binder/IMemory.h>
#include <utils/SortedVector.h>
#include <utils/threads.h>
namespace android {
class MemoryHeapBase;
// ---------------------------------------------------------------------------
class MemoryHeapPmem : public MemoryHeapBase
{
public:
class MemoryPmem : public BnMemory {
public:
MemoryPmem(const sp<MemoryHeapPmem>& heap);
~MemoryPmem();
protected:
const sp<MemoryHeapPmem>& getHeap() const { return mClientHeap; }
private:
friend class MemoryHeapPmem;
virtual void revoke() = 0;
sp<MemoryHeapPmem> mClientHeap;
};
MemoryHeapPmem(const sp<MemoryHeapBase>& pmemHeap,
uint32_t flags = IMemoryHeap::MAP_ONCE);
~MemoryHeapPmem();
/* HeapInterface additions */
virtual sp<IMemory> mapMemory(size_t offset, size_t size);
/* make the whole heap visible (you know who you are) */
virtual status_t slap();
/* hide (revoke) the whole heap (the client will see the garbage page) */
virtual status_t unslap();
/* revoke all allocations made by this heap */
virtual void revoke();
private:
/* use this to create your own IMemory for mapMemory */
virtual sp<MemoryPmem> createMemory(size_t offset, size_t size);
void remove(const wp<MemoryPmem>& memory);
private:
sp<MemoryHeapBase> mParentHeap;
mutable Mutex mLock;
SortedVector< wp<MemoryPmem> > mAllocations;
};
// ---------------------------------------------------------------------------
}; // namespace android
#endif // ANDROID_MEMORY_HEAP_PMEM_H