)]}'
{"id":"android_frameworks_base~7160","triplet_id":"android_frameworks_base~sc-v2~Ifd1f8b7940eba7723f93a73456470a84d34656ae","project":"android_frameworks_base","branch":"sc-v2","topic":"sc-v2-bringup","hashtags":[],"change_id":"Ifd1f8b7940eba7723f93a73456470a84d34656ae","subject":"LocalServices: Replace ArrayMap with HashMap for performance","status":"MERGED","created":"2022-03-09 04:25:36.000000000","updated":"2022-03-10 01:03:43.000000000","submitted":"2022-03-10 01:03:43.000000000","submitter":{"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"7160-sc-v2-bringup","meta_rev_id":"d2ca7b564ac6f7ff766d7b3d7b35e2c6f77561e3","_number":7160,"virtual_id_number":7160,"owner":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"},"actions":{},"labels":{"Code-Review":{"approved":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"},"all":[{"value":0,"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},{"tag":"autogenerated:gerrit:merged","value":2,"date":"2022-03-10 01:03:43.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"}],"values":{"-2":"This shall not be merged","-1":"I would prefer this is not merged as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0},"Verified":{"approved":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"},"all":[{"value":0,"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},{"tag":"autogenerated:gerrit:merged","value":1,"date":"2022-03-10 01:03:43.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"}],"values":{"-1":"Fails"," 0":"No score","+1":"Verified"},"description":"","default_value":0}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"},{"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2022-03-10 01:03:43.000000000","updated_by":{"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"reviewer":{"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"state":"REVIEWER"}],"messages":[{"id":"b33959c2e8c0849dd53518800afb8fd3060961d6","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"},"date":"2022-03-09 04:25:36.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"18d4c1712cde32d5e212930780dd098daa9786b5","author":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"},"date":"2022-03-10 01:03:43.000000000","message":"Patch Set 1: Verified+1 Code-Review+2","accounts_in_message":[],"_revision_number":1},{"id":"d2ca7b564ac6f7ff766d7b3d7b35e2c6f77561e3","tag":"autogenerated:gerrit:merged","author":{"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2022-03-10 01:03:43.000000000","message":"Change has been successfully rebased and submitted as 3e69830bf84b31bf0289e5325aa6ecd3f6babb4e","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"3e69830bf84b31bf0289e5325aa6ecd3f6babb4e","revisions":{"00496b5afe1ebb67ec2d95fe413eb892ba44af22":{"kind":"REWORK","_number":1,"created":"2022-03-09 04:25:36.000000000","uploader":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"},"ref":"refs/changes/60/7160/1","fetch":{"anonymous http":{"url":"https://github.com/StatiXOS/android_frameworks_base","ref":"refs/changes/60/7160/1","commands":{"Branch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/1 \u0026\u0026 git checkout -b change-7160 FETCH_HEAD","Checkout":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/1","Reset To":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"1308958d62ce31698492ac204a64f28430b86dca","subject":"ThemedResourceCache: Replace ArrayMap with HashMap for performance","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/1308958d62ce31698492ac204a64f28430b86dca"}]}],"author":{"name":"Danny Lin","email":"danny@kdrag0n.dev","date":"2021-04-06 05:39:55.000000000","tz":-420},"committer":{"name":"Anay Wadhera","email":"anay1018@gmail.com","date":"2022-03-09 04:24:31.000000000","tz":540},"subject":"LocalServices: Replace ArrayMap with HashMap for performance","message":"LocalServices: Replace ArrayMap with HashMap for performance\n\nWhen opening and closing activities in Settings, a significant amount of\nCPU time is spent looking up ArrayMap entries, as reported by simpleperf:\n\n0.12%     /system/framework/arm64/boot-framework.oat                                                                                                android.util.ArrayMap.binarySearchHashes\n\nLocalServices is responsible for a significant portion of the time\nspent in ArrayMap lookups:\n\n0.08%     0.08%  /system/framework/arm64/boot-framework.oat                                                                              android.util.ArrayMap.binarySearchHashes\n       |\n       -- android.util.ArrayMap.binarySearchHashes\n          |\n           --50.00%-- android.util.ArrayMap.indexOf\n               |\n               |--36.71%-- android.util.ArrayMap.get\n               |    |--0.87%-- [hit in function]\n               |    |\n               |    |--6.12%-- com.android.server.LocalServices.getService\n               |    |    |\n               |    |    |--42.41%-- com.android.server.inputmethod.InputMethodManagerInternal.get [DEDUPED]\n               |    |    |           com.android.server.wm.-$$Lambda$DisplayContent$-xtu90EUfC_AM8Qe5g8vDDI07_E.run\n               |    |    |           android.os.Handler.dispatchMessage\n               |    |    |           android.os.Looper.loop\n               |    |    |           android.os.HandlerThread.run\n               |    |    |           com.android.server.ServiceThread.run\n               |    |    |           art_quick_invoke_stub\n               |    |    |           art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)\n               |    |    |           art::JValue art::InvokeVirtualOrInterfaceWithJValues\u003cart::ArtMethod*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, art::ArtMethod*, jvalue const*)\n               |    |    |           art::Thread::CreateCallback(void*)\n               |    |    |           __pthread_start(void*)\n               |    |    |           __start_thread\n               |    |    |\n               |    |    |--36.66%-- com.android.server.notification.NotificationManagerService.enqueueNotificationInternal\n               |    |    |           com.android.server.notification.NotificationManagerService.enqueueNotificationInternal\n               |    |    |           com.android.server.notification.NotificationManagerService$10.enqueueNotificationWithTag\n               |    |    |           android.app.INotificationManager$Stub.onTransact\n               |    |    |           android.os.Binder.execTransactInternal\n               |    |    |           android.os.Binder.execTransact\n               |    |    |           art_quick_invoke_stub\n               |    |    |           art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)\n               |    |    |           art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003cart::ArtMethod*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, art::ArtMethod*, std::__va_list)\n               |    |    |           art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003c_jmethodID*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, _jmethodID*, std::__va_list)\n               |    |    |           art::JNI\u003cfalse\u003e::CallBooleanMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)\n               |    |    |           _JNIEnv::CallBooleanMethod(_jobject*, _jmethodID*, ...)\n               |    |    |           JavaBBinder::onTransact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |    |           android::BBinder::transact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |    |           android::IPCThreadState::executeCommand(int)\n               |    |    |           android::IPCThreadState::getAndExecuteCommand()\n               |    |    |           android::IPCThreadState::joinThreadPool(bool)\n               |    |    |           android::PoolThread::threadLoop()\n               |    |    |           android::Thread::_threadLoop(void*)\n               |    |    |           android::AndroidRuntime::javaThreadShell(void*)\n               |    |    |           thread_data_t::trampoline(thread_data_t const*)\n               |    |    |           __pthread_start(void*)\n               |    |    |           __start_thread\n               |    |    |\n               |    |     --20.93%-- com.android.server.oemlock.OemLockService.setPersistentDataBlockOemUnlockAllowedBit\n               |    |                com.android.server.oemlock.OemLockService$2.isOemUnlockAllowed\n               |    |                android.service.oemlock.IOemLockService$Stub.onTransact\n               |    |                android.os.Binder.execTransactInternal\n               |    |                android.os.Binder.execTransact\n               |    |                art_quick_invoke_stub\n               |    |                art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)\n               |    |                art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003cart::ArtMethod*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, art::ArtMethod*, std::__va_list)\n               |    |                art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003c_jmethodID*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, _jmethodID*, std::__va_list)\n               |    |                art::JNI\u003cfalse\u003e::CallBooleanMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)\n               |    |                _JNIEnv::CallBooleanMethod(_jobject*, _jmethodID*, ...)\n               |    |                JavaBBinder::onTransact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |                android::BBinder::transact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |                android::IPCThreadState::executeCommand(int)\n               |    |                android::IPCThreadState::getAndExecuteCommand()\n               |    |                android::IPCThreadState::joinThreadPool(bool)\n               |    |                android::PoolThread::threadLoop()\n               |    |                android::Thread::_threadLoop(void*)\n               |    |                android::AndroidRuntime::javaThreadShell(void*)\n               |    |                thread_data_t::trampoline(thread_data_t const*)\n               |    |                __pthread_start(void*)\n               |    |                __start_thread\n\nEmpirical testing reveals that sLocalServiceObjects usually contains\n68 entries, at which HashMap is 47% faster than ArrayMap for lookups\nand 68% faster [1] for insertions. The increased memory usage should be\nnegligible at this size, so we can safely convert the map to a HashMap\nin order to improve performance in this hotpath.\n\n[1] https://docs.google.com/spreadsheets/d/136UJS2yVlZyPx30KDNgj4AWldkp9xbzIcWkLFj9RGgk/edit\n\nTest: simpleperf record -a; verify that LocalServices no longer\n      appears under ArrayMap.binarySearchHashes\nChange-Id: Ifd1f8b7940eba7723f93a73456470a84d34656ae\nReviewed-on: https://review.statixos.com/c/android_frameworks_base/+/6196\nReviewed-by: Anay Wadhera \u003canay1018@gmail.com\u003e\nTested-by: Anay Wadhera \u003canay1018@gmail.com\u003e\n","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/00496b5afe1ebb67ec2d95fe413eb892ba44af22"}],"resolve_conflicts_web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/00496b5afe1ebb67ec2d95fe413eb892ba44af22"}]},"branch":"refs/heads/sc-v2"},"3e69830bf84b31bf0289e5325aa6ecd3f6babb4e":{"kind":"NO_CODE_CHANGE","_number":2,"created":"2022-03-10 01:03:43.000000000","uploader":{"_account_id":1000057,"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","username":"statixgerrit","avatars":[{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ebd886cc6fd2034435497832e0da1e2a.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/60/7160/2","fetch":{"anonymous http":{"url":"https://github.com/StatiXOS/android_frameworks_base","ref":"refs/changes/60/7160/2","commands":{"Branch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/2 \u0026\u0026 git checkout -b change-7160 FETCH_HEAD","Checkout":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/2","Reset To":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/60/7160/2 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"85526d226b6a6b7d66733950c8d47e5f80c5f2d3","subject":"ThemedResourceCache: Replace ArrayMap with HashMap for performance","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/85526d226b6a6b7d66733950c8d47e5f80c5f2d3"}]}],"author":{"name":"Danny Lin","email":"danny@kdrag0n.dev","date":"2021-04-06 05:39:55.000000000","tz":-420},"committer":{"name":"StatiXOS Gerrit","email":"statixgerrit@gmail.com","date":"2022-03-10 01:03:43.000000000","tz":60},"subject":"LocalServices: Replace ArrayMap with HashMap for performance","message":"LocalServices: Replace ArrayMap with HashMap for performance\n\nWhen opening and closing activities in Settings, a significant amount of\nCPU time is spent looking up ArrayMap entries, as reported by simpleperf:\n\n0.12%     /system/framework/arm64/boot-framework.oat                                                                                                android.util.ArrayMap.binarySearchHashes\n\nLocalServices is responsible for a significant portion of the time\nspent in ArrayMap lookups:\n\n0.08%     0.08%  /system/framework/arm64/boot-framework.oat                                                                              android.util.ArrayMap.binarySearchHashes\n       |\n       -- android.util.ArrayMap.binarySearchHashes\n          |\n           --50.00%-- android.util.ArrayMap.indexOf\n               |\n               |--36.71%-- android.util.ArrayMap.get\n               |    |--0.87%-- [hit in function]\n               |    |\n               |    |--6.12%-- com.android.server.LocalServices.getService\n               |    |    |\n               |    |    |--42.41%-- com.android.server.inputmethod.InputMethodManagerInternal.get [DEDUPED]\n               |    |    |           com.android.server.wm.-$$Lambda$DisplayContent$-xtu90EUfC_AM8Qe5g8vDDI07_E.run\n               |    |    |           android.os.Handler.dispatchMessage\n               |    |    |           android.os.Looper.loop\n               |    |    |           android.os.HandlerThread.run\n               |    |    |           com.android.server.ServiceThread.run\n               |    |    |           art_quick_invoke_stub\n               |    |    |           art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)\n               |    |    |           art::JValue art::InvokeVirtualOrInterfaceWithJValues\u003cart::ArtMethod*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, art::ArtMethod*, jvalue const*)\n               |    |    |           art::Thread::CreateCallback(void*)\n               |    |    |           __pthread_start(void*)\n               |    |    |           __start_thread\n               |    |    |\n               |    |    |--36.66%-- com.android.server.notification.NotificationManagerService.enqueueNotificationInternal\n               |    |    |           com.android.server.notification.NotificationManagerService.enqueueNotificationInternal\n               |    |    |           com.android.server.notification.NotificationManagerService$10.enqueueNotificationWithTag\n               |    |    |           android.app.INotificationManager$Stub.onTransact\n               |    |    |           android.os.Binder.execTransactInternal\n               |    |    |           android.os.Binder.execTransact\n               |    |    |           art_quick_invoke_stub\n               |    |    |           art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)\n               |    |    |           art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003cart::ArtMethod*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, art::ArtMethod*, std::__va_list)\n               |    |    |           art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003c_jmethodID*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, _jmethodID*, std::__va_list)\n               |    |    |           art::JNI\u003cfalse\u003e::CallBooleanMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)\n               |    |    |           _JNIEnv::CallBooleanMethod(_jobject*, _jmethodID*, ...)\n               |    |    |           JavaBBinder::onTransact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |    |           android::BBinder::transact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |    |           android::IPCThreadState::executeCommand(int)\n               |    |    |           android::IPCThreadState::getAndExecuteCommand()\n               |    |    |           android::IPCThreadState::joinThreadPool(bool)\n               |    |    |           android::PoolThread::threadLoop()\n               |    |    |           android::Thread::_threadLoop(void*)\n               |    |    |           android::AndroidRuntime::javaThreadShell(void*)\n               |    |    |           thread_data_t::trampoline(thread_data_t const*)\n               |    |    |           __pthread_start(void*)\n               |    |    |           __start_thread\n               |    |    |\n               |    |     --20.93%-- com.android.server.oemlock.OemLockService.setPersistentDataBlockOemUnlockAllowedBit\n               |    |                com.android.server.oemlock.OemLockService$2.isOemUnlockAllowed\n               |    |                android.service.oemlock.IOemLockService$Stub.onTransact\n               |    |                android.os.Binder.execTransactInternal\n               |    |                android.os.Binder.execTransact\n               |    |                art_quick_invoke_stub\n               |    |                art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)\n               |    |                art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003cart::ArtMethod*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, art::ArtMethod*, std::__va_list)\n               |    |                art::JValue art::InvokeVirtualOrInterfaceWithVarArgs\u003c_jmethodID*\u003e(art::ScopedObjectAccessAlreadyRunnable const\u0026, _jobject*, _jmethodID*, std::__va_list)\n               |    |                art::JNI\u003cfalse\u003e::CallBooleanMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)\n               |    |                _JNIEnv::CallBooleanMethod(_jobject*, _jmethodID*, ...)\n               |    |                JavaBBinder::onTransact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |                android::BBinder::transact(unsigned int, android::Parcel const\u0026, android::Parcel*, unsigned int)\n               |    |                android::IPCThreadState::executeCommand(int)\n               |    |                android::IPCThreadState::getAndExecuteCommand()\n               |    |                android::IPCThreadState::joinThreadPool(bool)\n               |    |                android::PoolThread::threadLoop()\n               |    |                android::Thread::_threadLoop(void*)\n               |    |                android::AndroidRuntime::javaThreadShell(void*)\n               |    |                thread_data_t::trampoline(thread_data_t const*)\n               |    |                __pthread_start(void*)\n               |    |                __start_thread\n\nEmpirical testing reveals that sLocalServiceObjects usually contains\n68 entries, at which HashMap is 47% faster than ArrayMap for lookups\nand 68% faster [1] for insertions. The increased memory usage should be\nnegligible at this size, so we can safely convert the map to a HashMap\nin order to improve performance in this hotpath.\n\n[1] https://docs.google.com/spreadsheets/d/136UJS2yVlZyPx30KDNgj4AWldkp9xbzIcWkLFj9RGgk/edit\n\nTest: simpleperf record -a; verify that LocalServices no longer\n      appears under ArrayMap.binarySearchHashes\nChange-Id: Ifd1f8b7940eba7723f93a73456470a84d34656ae\nReviewed-on: https://review.statixos.com/c/android_frameworks_base/+/6196\nReviewed-by: Anay Wadhera \u003canay1018@gmail.com\u003e\nTested-by: Anay Wadhera \u003canay1018@gmail.com\u003e\nReviewed-on: https://review.statixos.com/c/android_frameworks_base/+/7160\n","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/3e69830bf84b31bf0289e5325aa6ecd3f6babb4e"}],"resolve_conflicts_web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/3e69830bf84b31bf0289e5325aa6ecd3f6babb4e"}]},"branch":"refs/heads/sc-v2","description":"Rebase"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Code-Review","status":"OK","applied_by":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"}},{"label":"Verified","status":"OK","applied_by":{"_account_id":1000000,"name":"Anay Wadhera","email":"anay1018@gmail.com","username":"anayw2001","avatars":[{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/c4b5b98827974f96561d68d4b383b221.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"status":"o fuc"}}]}],"submit_requirements":[{"name":"Verified","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Verified\u003dMAX -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX","-label:Verified\u003dMIN"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX","-label:Code-Review\u003dMIN"],"failing_atoms":[],"atom_explanations":{}}}]}
