PageAllocatorSymbian.h revision 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00
181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch/* 281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies) 381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Redistribution and use in source and binary forms, with or without 581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * modification, are permitted provided that the following conditions 681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * are met: 781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 1. Redistributions of source code must retain the above copyright 981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * notice, this list of conditions and the following disclaimer. 1081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * notice, this list of conditions and the following disclaimer in the 1281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * documentation and/or other materials provided with the distribution. 1381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 1481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * its contributors may be used to endorse or promote products derived 1581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * from this software without specific prior written permission. 1681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 1781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 1881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 2081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 2181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 2281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 2381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 2481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch */ 2881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#ifndef PageAllocatorSymbian_h 3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#define PageAllocatorSymbian_h 3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <e32std.h> 332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <wtf/Bitmap.h> 3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochnamespace WTF { 3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochsize_t pageSize(); 3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// Convenience wrapper around an RChunk 4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass SymbianChunk : public RChunk { 4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochpublic: 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch SymbianChunk(TInt handle) 4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch { 4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch SetHandle(handle); 4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // prevent kernel calls by caching these 4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_base = reinterpret_cast<char*>(Base()); 4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_maxSize = MaxSize(); 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ~SymbianChunk() 5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch { 5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Decommit(0, m_maxSize); 5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Close(); 5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // checks if address is in chunk's virtual address space 5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool contains(const void* address) const 5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch { 6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return (static_cast<const char*>(address) >= m_base && static_cast<const char*>(address) < (m_base + m_maxSize)); 6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch char* m_base; 6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch size_t m_maxSize; 6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}; 6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// Size of the large up-front reservation 6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if defined(__WINS__) 7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// Emulator has limited virtual address space 7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochconst size_t largeReservationSize = 96*1024*1024; 7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#else 7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// HW has plenty of virtual addresses 7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochconst size_t largeReservationSize = 256*1024*1024; 7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass PageAllocatorSymbian { 7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochpublic: 8081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch PageAllocatorSymbian(); 8181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ~PageAllocatorSymbian(); 8281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void* reserve(size_t); 8481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void release(void*, size_t); 8581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool commit(void*, size_t); 8681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool decommit(void*, size_t); 8781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool contains(const void*) const; 8981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 9081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochprivate: 9181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch static const size_t m_pageSize = 4096; 9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch SymbianChunk* m_chunk; 9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Bitmap<largeReservationSize / m_pageSize> m_map; 9481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 9581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}; 9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 9781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} // namespace WTF 9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // PageAllocatorSymbian_h 10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 101