)]}'
{"id":"android_frameworks_base~6196","triplet_id":"android_frameworks_base~sc~Ifd1f8b7940eba7723f93a73456470a84d34656ae","project":"android_frameworks_base","branch":"sc","topic":"sc-perf","attention_set":{},"removed_from_attention_set":{"1000071":{"account":{"_account_id":1000071,"name":"Sahil Sonar","email":"sss.sonar2003@gmail.com","username":"SahilSonar","avatars":[{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"last_update":"2021-11-09 00:14:06.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"Ifd1f8b7940eba7723f93a73456470a84d34656ae","subject":"LocalServices: Replace ArrayMap with HashMap for performance","status":"MERGED","created":"2021-11-06 16:27:23.000000000","updated":"2021-11-09 00:14:06.000000000","submitted":"2021-11-09 00:14:06.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":"6196-sc-perf","meta_rev_id":"21ead8cc34ec3f4e8be0f77c2320f4393febf22f","_number":6196,"virtual_id_number":6196,"owner":{"_account_id":1000071,"name":"Sahil Sonar","email":"sss.sonar2003@gmail.com","username":"SahilSonar","avatars":[{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"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":"2021-11-09 00:14:06.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":"2021-11-09 00:14:06.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":"2021-11-09 00:14:06.000000000","updated_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"},"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"},"state":"REVIEWER"},{"updated":"2021-11-09 00:14:06.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":"8a3175dba01fe57720a327cb5a91dc57f049a3b6","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000071,"name":"Sahil Sonar","email":"sss.sonar2003@gmail.com","username":"SahilSonar","avatars":[{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2021-11-06 16:27:23.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"4fc4408f387858487175ecb84f99f1329fcdec9c","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":"2021-11-09 00:13:47.000000000","message":"Patch Set 2: Patch Set 1 was rebased","accounts_in_message":[],"_revision_number":2},{"id":"06eaba3def1f2e5666e25c60de0aabb5e15acd78","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":"2021-11-09 00:14:06.000000000","message":"Patch Set 2: Verified+1 Code-Review+2","accounts_in_message":[],"_revision_number":2},{"id":"21ead8cc34ec3f4e8be0f77c2320f4393febf22f","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":"2021-11-09 00:14:06.000000000","message":"Change has been successfully rebased and submitted as a6d179b293e1e6b234eb99bd8136b1ccd21b8e63","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"a6d179b293e1e6b234eb99bd8136b1ccd21b8e63","revisions":{"f34cda9609d4e915b549f7a062d1685b2d98d47a":{"kind":"REWORK","_number":1,"created":"2021-11-06 16:27:23.000000000","uploader":{"_account_id":1000071,"name":"Sahil Sonar","email":"sss.sonar2003@gmail.com","username":"SahilSonar","avatars":[{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00002191405096d63d165b903b032343.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/6196/1","fetch":{"anonymous http":{"url":"https://github.com/StatiXOS/android_frameworks_base","ref":"refs/changes/96/6196/1","commands":{"Branch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/1 \u0026\u0026 git checkout -b change-6196 FETCH_HEAD","Checkout":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/1","Reset To":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"40b53fdb7e0c689b4d37d16c94517ad2bb2156d9","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/40b53fdb7e0c689b4d37d16c94517ad2bb2156d9"}]}],"author":{"name":"Danny Lin","email":"danny@kdrag0n.dev","date":"2021-04-06 05:39:55.000000000","tz":-420},"committer":{"name":"SahilSonar","email":"sss.sonar2003@gmail.com","date":"2021-11-06 16:26:31.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\n","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/f34cda9609d4e915b549f7a062d1685b2d98d47a"}],"resolve_conflicts_web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/f34cda9609d4e915b549f7a062d1685b2d98d47a"}]},"branch":"refs/heads/sc"},"7b96997a8d80601c5c86e4b8a6309806ebdcc666":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2021-11-09 00:13:47.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/96/6196/2","fetch":{"anonymous http":{"url":"https://github.com/StatiXOS/android_frameworks_base","ref":"refs/changes/96/6196/2","commands":{"Branch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/2 \u0026\u0026 git checkout -b change-6196 FETCH_HEAD","Checkout":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/2","Reset To":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/2 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"ffcbd72caabe77d3a49ad3b3815ece11bd668321","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/ffcbd72caabe77d3a49ad3b3815ece11bd668321"}]}],"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":"2021-11-09 00:13:47.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\n","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/7b96997a8d80601c5c86e4b8a6309806ebdcc666"}],"resolve_conflicts_web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/7b96997a8d80601c5c86e4b8a6309806ebdcc666"}]},"branch":"refs/heads/sc","description":"Rebase"},"a6d179b293e1e6b234eb99bd8136b1ccd21b8e63":{"kind":"NO_CODE_CHANGE","_number":3,"created":"2021-11-09 00:14:06.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/96/6196/3","fetch":{"anonymous http":{"url":"https://github.com/StatiXOS/android_frameworks_base","ref":"refs/changes/96/6196/3","commands":{"Branch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/3 \u0026\u0026 git checkout -b change-6196 FETCH_HEAD","Checkout":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/3","Reset To":"git fetch https://github.com/StatiXOS/android_frameworks_base refs/changes/96/6196/3 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"ffcbd72caabe77d3a49ad3b3815ece11bd668321","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/ffcbd72caabe77d3a49ad3b3815ece11bd668321"}]}],"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":"2021-11-09 00:14:06.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\n","web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/a6d179b293e1e6b234eb99bd8136b1ccd21b8e63"}],"resolve_conflicts_web_links":[{"name":"GitHub","tooltip":"Open in GitWeb","url":"https://github.com/StatiXOS/android_frameworks_base/commit/a6d179b293e1e6b234eb99bd8136b1ccd21b8e63"}]},"branch":"refs/heads/sc"}},"requirements":[],"submit_records":[{"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\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}}]}
