Use string length from DEX instead of recomputing
This gives around a 2% improvement in startup time overall. Here are results from a selection of
apps:
com.android.gallery3d/.app.GalleryActivity: 203.2ms → 197.7ms (change: -5.4ms, -2.7%)
com.android.messaging/.ui.conversationlist.ConversationListActivity:
202.1ms → 199.1ms (change: -3.0ms, -1.5%)
com.android.contacts/.activities.PeopleActivity: 277.3ms → 270.7ms (change: -6.6ms, -2.4%)
com.android.camera2/com.android.camera.CameraLauncher:
351.7ms → 344.1ms (change: -7.7ms, -2.2%)
com.android.dialer/.main.impl.MainActivity: 259.5ms → 254.2ms (change: -5.3ms, -2.0%)
com.android.settings/.Settings: 189.0ms → 186.5ms (change: -2.4ms, -1.3%)
com.android.email/.activity.Welcome: 222.8ms → 219.3ms (change: -3.6ms, -1.6%)
org.mozilla.firefox/.App: 370.2ms → 358.3ms (change: -11.9ms, -3.2%)
This is the average of 100 runs on a Pixel 2 XL.
Bug: 132691958
Test: device boots, start app many times
Change-Id: I93b6eb5105e32788cfc8159c6c21b400a161f86c
diff --git a/runtime/art_method.h b/runtime/art_method.h
index 23c1fe9..5dc43a3 100644
--- a/runtime/art_method.h
+++ b/runtime/art_method.h
@@ -586,6 +586,8 @@
ALWAYS_INLINE const char* GetName() REQUIRES_SHARED(Locks::mutator_lock_);
+ ALWAYS_INLINE std::string_view GetNameView() REQUIRES_SHARED(Locks::mutator_lock_);
+
ObjPtr<mirror::String> ResolveNameString() REQUIRES_SHARED(Locks::mutator_lock_);
const dex::CodeItem* GetCodeItem() REQUIRES_SHARED(Locks::mutator_lock_);
@@ -855,6 +857,9 @@
} while (!access_flags_.compare_exchange_weak(old_access_flags, new_access_flags));
}
+ // Used by GetName and GetNameView to share common code.
+ const char* GetRuntimeMethodName() REQUIRES_SHARED(Locks::mutator_lock_);
+
DISALLOW_COPY_AND_ASSIGN(ArtMethod); // Need to use CopyFrom to deal with 32 vs 64 bits.
};