Skip to content
Snippets Groups Projects
Commit f2435e8d authored by Andreas Klöckner's avatar Andreas Klöckner
Browse files

Merge branch 'faster-hash-key-building' into 'master'

(Kind of) fix an update_persistent_hash() performance regression

See merge request !150
parents cddfbf62 a1b1b856
No related branches found
No related tags found
No related merge requests found
......@@ -417,7 +417,7 @@ class InstructionBase(ImmutableRecord):
@property
@memoize_method
def _key(self):
def _key_builder(self):
from loopy.tools import LoopyEqKeyBuilder
key_builder = LoopyEqKeyBuilder()
key_builder.update_for_class(self.__class__)
......@@ -433,7 +433,7 @@ class InstructionBase(ImmutableRecord):
else:
key_builder.update_for_field(field_name, field_value)
return key_builder.key()
return key_builder
def update_persistent_hash(self, key_hash, key_builder):
"""Custom hash computation function for use with
......@@ -442,7 +442,7 @@ class InstructionBase(ImmutableRecord):
Only works in conjunction with :class:`loopy.tools.KeyBuilder`.
"""
key_builder.rec(key_hash, self._key)
key_builder.rec(key_hash, self._key_builder.hash_key())
# }}}
......
......@@ -152,10 +152,16 @@ class LoopyEqKeyBuilder(object):
self.field_dict[field_name] = value
def update_for_pymbolic_field(self, field_name, value):
self.field_dict[field_name] = str(value)
self.field_dict[field_name] = str(value).encode("utf-8")
def key(self):
return (self.class_.__name__, self.field_dict)
return (self.class_.__name__.encode("utf-8"), self.field_dict)
def hash_key(self):
"""Similar to key(), but excludes field names for faster hashing.
"""
return (self.class_.__name__.encode("utf-8"),) + tuple(
self.field_dict[k] for k in sorted(self.field_dict.keys()))
# }}}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment