Differences From Artifact [dc1249919c]:
- File src/runtime/category.m — part of check-in [813c00ccf0] at 2013-01-09 22:24:47 on branch trunk — Update copyright. (user: js, size: 3202) [annotate] [blame] [check-ins using]
To Artifact [58afce4465]:
- File
src/runtime/category.m
— part of check-in
[84a724dd4b]
at
2013-12-06 00:52:26
on branch trunk
— Add a fast path for objc_classname_to_class().
This should improve the performance for the GCC ABI, as
objc_classname_to_class() is used for all sorts of class lookups, e.g.
objc_lookup_class().As this performance improvement needs RAM, it is only used after 128
calls into objc_classname_to_class(), so that if the ObjFW ABI is used
and the user does not call into objc_getClass() or similar in a loop, no
memory is wasted.Runtime internal usage of objc_classname_to_class() does not use the
fast path and does not count as a call into objc_classname_to_class().
The reason for this is that if the runtime calls
objc_classname_to_class(), it already has the lock and thus the
performance gain would be small, but it would waste memory. (user: js, size: 3209) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
42 43 44 45 46 47 48 | (struct objc_abi_selector*)&ml->methods[i]); } static void register_category(struct objc_abi_category *cat) { struct objc_abi_category **cats; | | | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | (struct objc_abi_selector*)&ml->methods[i]); } static void register_category(struct objc_abi_category *cat) { struct objc_abi_category **cats; Class cls = objc_classname_to_class(cat->class_name, false); if (categories == NULL) categories = objc_hashtable_new(2); cats = (struct objc_abi_category**)objc_hashtable_get(categories, cat->class_name); |
︙ | ︙ |