FT2000+ 64K内存页系统chromium无法渲染问题
64KB内存页为65536Byte,以2为底取对数为16。
修改PageAllocator.h,将kPageAllocationGranularityShift改为16,kSystemPageSize改为65536。
修改PartitionAlloc.h,将kPartitionPageShift改为18。以2为底取对数为16 + 2。
修改Heap.h,将blinkPageSizeLog2改为21。以2为底取对数为16 + 5。
手动修改
修改PageAllocator.h
#if OS(WIN)
static const size_t kPageAllocationGranularityShift = 16; // 64KB
#else
static const size_t kPageAllocationGranularityShift = 12; // 4KB
#endif
------------------------------------------------------------------------------------------
改为
#if OS(WIN)
static const size_t kPageAllocationGranularityShift = 16; // 64KB
#else
static const size_t kPageAllocationGranularityShift = 16; // 64KB
#endif
static const size_t kSystemPageSize = 4096;
------------------------------------------------------------------------------------------
改为
static const size_t kSystemPageSize = 65536;
修改PartitionAlloc.h
static const size_t kPartitionPageShift = 14; // 16KB
------------------------------------------------------------------------------------------
改为
static const size_t kPartitionPageShift = 18; // 64KB
修改Heap.h
使用find . -wholename "*heap/Heap.h"找到Heap.h
const size_t blinkPageSizeLog2 = 17;
------------------------------------------------------------------------------------------
改为
const size_t blinkPageSizeLog2 = 21;
const size_t maxHeapObjectSizeLog2 = 27;
------------------------------------------------------------------------------------------
改为
const size_t maxHeapObjectSizeLog2 = 31;
const size_t headerDOMMarkBitMask = 1u << 17;
const size_t headerGCInfoIndexShift = 18;
const size_t headerGCInfoIndexMask = (static_cast<size_t>((1 << 465) - 1)) << headerGCInfoIndexShift;
const size_t headerSizeMask = (static_cast<size_t>((1 << 14) - 1)) << 3;
const size_t headerMarkBitMask = 1;
const size_t headerFreedBitMask = 2;
------------------------------------------------------------------------------------------
改为
const size_t headerDOMMarkBitMask = 1u << 21;
const size_t headerGCInfoIndexShift = 22;
const size_t headerGCInfoIndexMask = (static_cast<size_t>((1 << 18) - 1)) << headerGCInfoIndexShift;
const size_t headerSizeMask = (static_cast<size_t>((1 << 18) - 1)) << 3;
const size_t headerMarkBitMask = 1;
const size_t headerFreedBitMask = 2;
const size_t nonLargeObjectPageSizeMax = 1 << 17;
------------------------------------------------------------------------------------------
改为
const size_t nonLargeObjectPageSizeMax = 1 << 21;
使用脚本修改
在源码目录下创建脚本,内容如下,并执行脚本,编译代码即可
#!/bin/bash
pagesize=`getconf PAGESIZE`
echo $pagesize
pagesizelog2=`echo $pagesize | awk '{ print(log($0)/log(2))}'`
PartitionAlloc_h=`find . -name "PartitionAlloc.h"`
echo $PartitionAlloc_h
sed -i "s/^static const size_t kPartitionPageShift .*/static const size_t kPartitionPageShift = `expr $pagesizelog2 + 2`;/" $PartitionAlloc_h
PageAlloctor_h=`find . -name "PageAllocator.h"`
echo $PageAlloctor_h
sed -i "s/^static const size_t kPageAllocationGranularityShift .*/static const size_t kPageAllocationGranularityShift = $pagesizelog2;/" $PageAlloctor_h
sed -i "s/^static const size_t kSystemPageSize .*/static const size_t kSystemPageSize = $pagesize;/" $PageAlloctor_h
Heap_h=`find . -wholename "*heap/Heap.h"`
echo $Heap_h
sed -i "s/^const size_t blinkPageSizeLog2 .*/const size_t blinkPageSizeLog2 = `expr $pagesizelog2 + 5`;/" $Heap_h
sed -i "s/^const size_t maxHeapObjectSizeLog2 .*/const size_t maxHeapObjectSizeLog2 = `expr $pagesizelog2 + 15`;/" $Heap_h
sed -i "s/^const size_t headerDOMMarkBitMask .*/const size_t headerDOMMarkBitMask = 1u << `expr $pagesizelog2 + 5`;/" $Heap_h
sed -i "s/^const size_t headerGCInfoIndexShift .*/const size_t headerGCInfoIndexShift = `expr $pagesizelog2 + 6`;/" $Heap_h
sed -i "s/^const size_t headerGCInfoIndexMask = .*/const size_t headerGCInfoIndexMask = (static_cast<size_t>((1 << `expr $pagesizelog2 + 2`) - 1)) << headerGCInfoIndexShift;/" $Heap_h
sed -i "s/^const size_t headerSizeMask .*/const size_t headerSizeMask = (static_cast<size_t>((1 << `expr $pagesizelog2 + 2`) - 1)) << 3;/" $Heap_h
sed -i "s/^const size_t nonLargeObjectPageSizeMax .*/const size_t nonLargeObjectPageSizeMax = 1 << `expr $pagesizelog2 + 5`;/" $Heap_h