Challenge your imagination!
23
9:18 PM
2007.2

  在移植FontRouter2到Symbian 9的过程中,碰到了一个大难题:THeapWalk这个类彻底的从Symbian 9中消失了!与新版本中其它很多API变化不同的是,THeapWalk类的功能虽然被新的RHeap::Walk()所取代,但该方法已不再从EUser.dll中导出,也就意味着它的身份从此变成了“内部API”,不再对第三方应用开发者开放。

  THeapWalk是用于测试内存问题的一大利器,其地位难以被取代,如果就此抛弃,实在太可惜了。好在天无绝人之路,经过一天时间的彻底分析,终于让我发现了Symbian为其留下的一个后门。利用以下适配代码,可以在Symbian 9实现对THeapWalk功能的完整模拟,希望对同样遇到移植问题的朋友有所帮助:

class THeapWalk
	{
protected:
	enum TCellType
	{
		EGoodAllocatedCell, EGoodFreeCell,
		EBadAllocatedCellSize, EBadAllocatedCellAddress,
		EBadFreeCellAddress, EBadFreeCellSize
	};
public:
	THeapWalk(RHeap &aHeap) : iHeap(&aHeap), iValue(0) {}
	TInt Walk()
		{ iHeap->DebugFunction(RHeap::EWalk, &DoInfo, this); return iValue; }
	virtual void Info(TCellType aType,TAny* aBase,TInt aLength)=0;
protected:
	inline TInt Value() const { return(iValue); }
	inline void SetValue(TInt aValue) { iValue = aValue; }
private:
	static void DoInfo(TAny* aPtr, TCellType aType, TAny* aBase, TInt aLength)
		{ ((THeapWalk *) aPtr)->Info(aType, aBase, aLength); }
	RHeap* iHeap;
	TInt iValue;
	};

注:EBadFreeCellSize是Symbian 9新增的一种Cell状态。




Comments(9):  [RSS for comments]   [TrackBack URI]
  1. 1
    hqb | 2007.2.26 12:10 AM

    大侠,问个事,在nokia现在最高端配置的手机上用软件直接播放mpeg2 ts流文件(dvd的一种)是否可能啊?瓶颈在频率、内存还是哪?
    现在pc上已经有好多软件都可以播放dvd了,像 豪杰超级解霸3000 英雄版 硬件环境(最低运行环境)CPU Pentium 233 内存 64MB 光驱 CD-ROM
    配置声卡。
    现在跑到200多m的手机也多的是吧

  2. 2
    oasisfeng | 2007.2.26 12:14 AM

    完全可能!Xvid和RMVB两种解码运算量比MPEG2大的格式都能支持了。

  3. 3
    hqb | 2007.2.26 1:56 PM

    那现在上有没有这种播放软件适合手机的啊?
    我的msn huqiangbin@hotmail.com

  4. 4
    oasisfeng | 2007.2.26 7:55 PM

    Sorry,这我就不太清楚了,因为还没有这个需求……

  5. 5
    RAY | 2007.2.26 9:59 PM

    这么小的手机屏幕上放DVD格式的视频似乎没多大必要吧。

  6. 6
    Preview: FontRouter2 for Symbian 9 « Oasis Feng
    [PINGBACK] | 2007.2.27 2:04 AM

    [...] Feng Challenge your imagination! «« THeapWalk的Symbian 9实现 • [...]

  7. 7
    hqb | 2007.2.27 4:14 PM

    需求有的啊 现在已经有信道解调芯片了,但mpeg2解码芯片面积、功耗都
    成大问题,放手持设备基本不可能,如果能软件解码的话,用手机看数字电视根本没问题。格式不一定是dvd的,可以根据手机屏幕调整。
    这个市场需求很大!因为短期内mpeg2解码芯片的面积、功耗都很难降下来。我觉得现在比较可行的是用软件解码,等mpeg2芯片有进展了再用硬件
    解码。

  8. 8
    oasisfeng | 2007.2.27 11:55 PM

    N-Gage仅凭100MHz CPU的处理能力就可以在SmartMovie中流畅播放码率不算低的全屏Xvid视频(176×208),而MPEG2的解码运算量不及Xvid,所以更不会存在问题。:)

  9. 9
    Explore and Hack the Server Heap in Symbian « Oasis Feng
    [PINGBACK] | 2007.4.26 2:47 AM

    [...] Note: Symbian 9 has striped away the THeapWalk class in the SDK, visit my blog and get a working simulation version of class THeapWalk in Symbian 9: http://blog.oasisfeng.com/2007/02/23/theapwalk-for-symbian9/ [...]

Leave a comment