Android N 上性能相关的改动

ActivityManagerService.java中同步操作调整线程优先级:

// it's a semaphore; boost when 0->1, reset when 1->0

staticThreadLocal sIsBoosted =newThreadLocal() {

@OverrideprotectedInteger initialValue() {

return0;

}

};

staticvoidboostPriorityForLockedSection() {

if(sIsBoosted.get() ==0) {

// boost to prio 118 while holding a global lock

Process.setThreadPriority(Process.myTid(), -2);

//Log.e(TAG, "PRIORITY BOOST:  set priority on TID " + Process.myTid());

}

intcur = sIsBoosted.get();

sIsBoosted.set(cur +1);

}

staticvoidresetPriorityAfterLockedSection() {

sIsBoosted.set(sIsBoosted.get() -1);

if(sIsBoosted.get() ==0) {

//Log.e(TAG, "PRIORITY BOOST:  reset priority on TID " + Process.myTid());

Process.setThreadPriority(Process.myTid(),0);

}

}

ActivityManagerService.java中的startProcessLocked方法中去掉了同步锁:注意 mMainHandler中处理APP_BOOST_DEACTIVATE_MSG这个消息同步锁依然保留,保证了消息处理,减少一个同步锁以提升性能;

// app launch boost for big.little configurations

// use cpusets to migrate freshly launched tasks to big cores

// synchronized(ActivityManagerService.this) {

nativeMigrateToBoost();

mIsBoosted = true;

mBoostStartTime = SystemClock.uptimeMillis();

Message msg = mHandler.obtainMessage(APP_BOOST_DEACTIVATE_MSG);

mHandler.sendMessageDelayed(msg, APP_BOOST_MESSAGE_DELAY);

// }

ActivityManagerSupervisor.java中realStartActivityLocked方法中

替换packagemanagerService的ensurePackageDexOpt方法为notifyPackageUse, 推测此为记录app启动频率记录。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容