Skip to content

Commit

Permalink
use vk::murmur_hash instead of vk::std_hash in class name hash comput…
Browse files Browse the repository at this point in the history
…ations
  • Loading branch information
apolyakov committed Feb 20, 2025
1 parent 2a6f2a7 commit b7ad2cb
Show file tree
Hide file tree
Showing 20 changed files with 120 additions and 86 deletions.
1 change: 1 addition & 0 deletions compiler/compiler.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ endif()

prepend(KPHP_COMPILER_COMMON ${COMMON_DIR}/
dl-utils-lite.cpp
algorithms/hashes.cpp
wrappers/fmt_format.cpp
termformat/termformat.cpp
tl2php/combinator-to-php.cpp
Expand Down
5 changes: 3 additions & 2 deletions compiler/data/class-data.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
// Distributed under the GPL v3 License, see LICENSE.notice.txt

#pragma once

#include <atomic>
#include <cstdint>
#include <forward_list>

#include "common/algorithms/compare.h"
#include "common/algorithms/hashes.h"

#include "compiler/data/class-members.h"
#include "compiler/data/class-modifiers.h"
#include "compiler/debug.h"
Expand Down Expand Up @@ -175,7 +176,7 @@ class ClassData : public Lockable {
void debugPrint();

int get_hash() const {
return static_cast<int>(vk::std_hash(name));
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name.data(), name.size()));
}

std::string get_subdir() const {
Expand Down
4 changes: 3 additions & 1 deletion runtime-light/stdlib/component/component-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <string_view>
#include <utility>

#include "common/algorithms/hashes.h"
#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime-light/coroutine/task.h"
Expand All @@ -33,7 +34,8 @@ struct C$ComponentQuery final : public refcountable_php_classes<C$ComponentQuery
}

constexpr int32_t get_hash() const noexcept {
return static_cast<int32_t>(std::hash<std::string_view>{}(get_class()));
std::string_view name_view{get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

~C$ComponentQuery() {
Expand Down
10 changes: 6 additions & 4 deletions runtime-light/stdlib/job-worker/job-worker.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <cstring>
#include <string_view>

#include "common/algorithms/hashes.h"
#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime-common/stdlib/array/to-array-processor.h"
Expand All @@ -20,7 +21,7 @@ namespace job_worker_impl_ {

struct SendableBase : virtual abstract_refcountable_php_interface {

virtual void accept(ToArrayVisitor &) noexcept {}
virtual void accept(ToArrayVisitor & /*unused*/) noexcept {}

virtual const char *get_class() const noexcept = 0;
virtual int32_t get_hash() const noexcept = 0;
Expand Down Expand Up @@ -66,7 +67,8 @@ struct C$KphpJobWorkerResponseError : public refcountable_polymorphic_php_classe
}

int32_t get_hash() const noexcept override {
return static_cast<int32_t>(std::hash<std::string_view>{}(get_class()));
std::string_view name_view{get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

size_t virtual_builtin_sizeof() const noexcept override {
Expand All @@ -82,10 +84,10 @@ inline class_instance<C$KphpJobWorkerResponseError> f$KphpJobWorkerResponseError
return v$this;
}

inline string f$KphpJobWorkerResponseError$$getError(class_instance<C$KphpJobWorkerResponseError> v$this) noexcept {
inline string f$KphpJobWorkerResponseError$$getError(const class_instance<C$KphpJobWorkerResponseError> &v$this) noexcept {
return v$this.get()->error;
}

inline int64_t f$KphpJobWorkerResponseError$$getErrorCode(class_instance<C$KphpJobWorkerResponseError> v$this) noexcept {
inline int64_t f$KphpJobWorkerResponseError$$getErrorCode(const class_instance<C$KphpJobWorkerResponseError> &v$this) noexcept {
return v$this.get()->error_code;
}
17 changes: 3 additions & 14 deletions runtime-light/stdlib/rpc/rpc-extra-info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,10 @@

#include "runtime-light/stdlib/rpc/rpc-extra-info.h"

#include "common/algorithms/hashes.h"
#include "common/wrappers/string_view.h"
#include "runtime-light/stdlib/rpc/rpc-state.h"

const char *C$KphpRpcRequestsExtraInfo::get_class() const noexcept {
return R"(KphpRpcRequestsExtraInfo)";
}
#include <cstdint>
#include <tuple>

int C$KphpRpcRequestsExtraInfo::get_hash() const noexcept {
return static_cast<int32_t>(vk::std_hash(vk::string_view(C$KphpRpcRequestsExtraInfo::get_class())));
}

array<rpc_request_extra_info_t> f$KphpRpcRequestsExtraInfo$$get(class_instance<C$KphpRpcRequestsExtraInfo> v$this) noexcept {
return v$this.get()->extra_info_arr;
}
#include "runtime-light/stdlib/rpc/rpc-state.h"

Optional<rpc_response_extra_info_t> f$extract_kphp_rpc_response_extra_info(int64_t query_id) noexcept {
auto &extra_info_map{RpcInstanceState::get().rpc_responses_extra_info};
Expand Down
18 changes: 14 additions & 4 deletions runtime-light/stdlib/rpc/rpc-extra-info.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
#pragma once

#include <cstdint>
#include <string_view>
#include <tuple>

#include "common/algorithms/hashes.h"
#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime-common/stdlib/array/to-array-processor.h"
#include "runtime-common/stdlib/visitors/common-visitors-methods.h"

using rpc_request_extra_info_t = std::tuple<int64_t>; // tuple(request_size)
Expand All @@ -22,10 +23,19 @@ struct C$KphpRpcRequestsExtraInfo final : public refcountable_php_classes<C$Kphp
array<rpc_request_extra_info_t> extra_info_arr;

C$KphpRpcRequestsExtraInfo() = default;
const char *get_class() const noexcept;
int get_hash() const noexcept;

const char *get_class() const noexcept {
return R"(KphpRpcRequestsExtraInfo)";
}

int get_hash() const noexcept {
std::string_view name_view{get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}
};

array<rpc_request_extra_info_t> f$KphpRpcRequestsExtraInfo$$get(class_instance<C$KphpRpcRequestsExtraInfo> v$this) noexcept;
inline array<rpc_request_extra_info_t> f$KphpRpcRequestsExtraInfo$$get(const class_instance<C$KphpRpcRequestsExtraInfo> &v$this) noexcept {
return v$this.get()->extra_info_arr;
}

Optional<rpc_response_extra_info_t> f$extract_kphp_rpc_response_extra_info(int64_t query_id) noexcept;
55 changes: 30 additions & 25 deletions runtime-light/stdlib/rpc/rpc-tl-function.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
#pragma once

#include <cstdint>
#include <string_view>

#include "common/algorithms/hashes.h"
#include "common/wrappers/string_view.h"
#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"

struct tl_func_base;

Expand All @@ -24,18 +25,20 @@ class InstanceDeepDestroyVisitor;

// this interface is implemented by all PHP classes that represent the TL functions (see tl-to-php)
struct C$VK$TL$RpcFunction : abstract_refcountable_php_interface {
virtual const char *get_class() const {
virtual const char *get_class() const noexcept {
return "VK\\TL\\RpcFunction";
}
virtual int32_t get_hash() const {
return static_cast<int32_t>(vk::std_hash(vk::string_view(C$VK$TL$RpcFunction::get_class())));

virtual int32_t get_hash() const noexcept {
std::string_view name_view{get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

virtual void accept(ToArrayVisitor &) noexcept {}
virtual void accept(CommonMemoryEstimateVisitor &) noexcept {}
virtual void accept(InstanceReferencesCountingVisitor &) noexcept {}
virtual void accept(InstanceDeepCopyVisitor &) noexcept {}
virtual void accept(InstanceDeepDestroyVisitor &) noexcept {}
virtual void accept(ToArrayVisitor & /*unused*/) noexcept {}
virtual void accept(CommonMemoryEstimateVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceReferencesCountingVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceDeepCopyVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceDeepDestroyVisitor & /*unused*/) noexcept {}

virtual size_t virtual_builtin_sizeof() const noexcept {
return 0;
Expand All @@ -51,18 +54,19 @@ struct C$VK$TL$RpcFunction : abstract_refcountable_php_interface {
// every TL function has a class for the result that implements RpcFunctionReturnResult;
// which has ->value of the required type
struct C$VK$TL$RpcFunctionReturnResult : abstract_refcountable_php_interface {
virtual const char *get_class() const {
virtual const char *get_class() const noexcept {
return "VK\\TL\\RpcFunctionReturnResult";
}
virtual int32_t get_hash() const {
return static_cast<int32_t>(vk::std_hash(vk::string_view(C$VK$TL$RpcFunctionReturnResult::get_class())));
virtual int32_t get_hash() const noexcept {
std::string_view name_view{get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

virtual void accept(ToArrayVisitor &) noexcept {}
virtual void accept(CommonMemoryEstimateVisitor &) noexcept {}
virtual void accept(InstanceReferencesCountingVisitor &) noexcept {}
virtual void accept(InstanceDeepCopyVisitor &) noexcept {}
virtual void accept(InstanceDeepDestroyVisitor &) noexcept {}
virtual void accept(ToArrayVisitor & /*unused*/) noexcept {}
virtual void accept(CommonMemoryEstimateVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceReferencesCountingVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceDeepCopyVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceDeepDestroyVisitor & /*unused*/) noexcept {}

virtual size_t virtual_builtin_sizeof() const noexcept {
return 0;
Expand All @@ -79,17 +83,18 @@ struct C$VK$TL$RpcFunctionReturnResult : abstract_refcountable_php_interface {
struct C$VK$TL$RpcResponse : abstract_refcountable_php_interface {
using X = class_instance<C$VK$TL$RpcFunctionReturnResult>;

virtual void accept(ToArrayVisitor &) noexcept {}
virtual void accept(CommonMemoryEstimateVisitor &) noexcept {}
virtual void accept(InstanceReferencesCountingVisitor &) noexcept {}
virtual void accept(InstanceDeepCopyVisitor &) noexcept {}
virtual void accept(InstanceDeepDestroyVisitor &) noexcept {}
virtual void accept(ToArrayVisitor & /*unused*/) noexcept {}
virtual void accept(CommonMemoryEstimateVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceReferencesCountingVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceDeepCopyVisitor & /*unused*/) noexcept {}
virtual void accept(InstanceDeepDestroyVisitor & /*unused*/) noexcept {}

virtual const char *get_class() const {
virtual const char *get_class() const noexcept {
return "VK\\TL\\RpcResponse";
}
virtual int32_t get_hash() const {
return static_cast<int32_t>(vk::std_hash(vk::string_view(C$VK$TL$RpcResponse::get_class())));
virtual int32_t get_hash() const noexcept {
std::string_view name_view{get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

virtual size_t virtual_builtin_sizeof() const noexcept {
Expand Down
6 changes: 4 additions & 2 deletions runtime/datetime/date_interval.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

#pragma once

#include <cstdint>

#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime/datetime/timelib_wrapper.h"
#include "runtime/dummy-visitor-methods.h"
Expand All @@ -17,8 +19,8 @@ struct C$DateInterval: public refcountable_php_classes<C$DateInterval>, private
return R"(DateInterval)";
}

int get_hash() const noexcept {
return -393296726;
int get_hash() const noexcept {
return static_cast<int32_t>(1915664120);
}

~C$DateInterval();
Expand Down
4 changes: 3 additions & 1 deletion runtime/datetime/datetime.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

#pragma once

#include <cstdint>

#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime/datetime/datetime_interface.h"
Expand All @@ -21,7 +23,7 @@ struct C$DateTime : public refcountable_polymorphic_php_classes<C$DateTimeInterf
}

int get_hash() const noexcept final {
return 2141635158;
return static_cast<int32_t>(1951820907);
}

~C$DateTime();
Expand Down
2 changes: 1 addition & 1 deletion runtime/datetime/datetime_immutable.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct C$DateTimeImmutable : public refcountable_polymorphic_php_classes<C$DateT
}

int get_hash() const noexcept final {
return 1600341038;
return static_cast<int32_t>(124055511);
}

~C$DateTimeImmutable();
Expand Down
6 changes: 4 additions & 2 deletions runtime/exception.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@

#pragma once

#include <cstdint>
#include <string_view>
#include <type_traits>

#include "common/algorithms/hashes.h"
#include "common/wrappers/string_view.h"
#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime-common/stdlib/array/to-array-processor.h"
Expand All @@ -23,7 +24,8 @@ struct C$Throwable : public refcountable_polymorphic_php_classes_virt<> {
}

virtual int32_t get_hash() const noexcept {
return static_cast<int32_t>(vk::std_hash(vk::string_view(get_class())));
std::string_view name_view{get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

template<class Visitor, bool process_raw_trace = true>
Expand Down
6 changes: 4 additions & 2 deletions runtime/ffi.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

#pragma once

#include <cstdint>

#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime/dummy-visitor-methods.h"
Expand All @@ -14,7 +16,7 @@ struct C$FFI$CData: public refcountable_php_classes<C$FFI$CData<T>>, private Dum
T c_value;

const char *get_class() const noexcept { return "FFI\\CData"; }
int get_hash() const noexcept { return 1945543994; }
int get_hash() const noexcept { return static_cast<int32_t>(-1934403570); }

using DummyVisitorMethods::accept;
};
Expand Down Expand Up @@ -103,7 +105,7 @@ struct CDataRef {

void accept(CommonMemoryEstimateVisitor &visitor __attribute__((unused))) {}
const char *get_class() const noexcept { return "FFI\\CDataRef"; }
int get_hash() const noexcept { return -1965114283; }
int get_hash() const noexcept { return static_cast<int32_t>(939385980); }
};

// CDataArrayRef is a non-owning pointer to a C array that keeps its length
Expand Down
12 changes: 7 additions & 5 deletions runtime/job-workers/job-interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

#pragma once

#include "common/algorithms/hashes.h"
#include "common/wrappers/string_view.h"
#include <cstdint>
#include <string_view>

#include "common/algorithms/hashes.h"
#include "runtime-common/core/class-instance/refcountable-php-classes.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime-common/stdlib/array/to-array-processor.h"
Expand Down Expand Up @@ -78,12 +79,13 @@ struct C$KphpJobWorkerResponseError: public refcountable_polymorphic_php_classes
string error;
int64_t error_code;

const char *get_class() const noexcept {
const char *get_class() const noexcept override {
return R"(KphpJobWorkerResponseError)";
}

int get_hash() const noexcept {
return static_cast<int32_t>(vk::std_hash(vk::string_view(C$KphpJobWorkerResponseError::get_class())));
int get_hash() const noexcept override {
std::string_view name_view{C$KphpJobWorkerResponseError::get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

template<class Visitor>
Expand Down
5 changes: 3 additions & 2 deletions runtime/memcache.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
#pragma once

#include <cstdint>
#include <string_view>

#include "common/algorithms/hashes.h"
#include "common/wrappers/string_view.h"
#include "runtime-common/core/runtime-core.h"
#include "runtime/dummy-visitor-methods.h"
#include "runtime/memory_usage.h"
Expand Down Expand Up @@ -56,7 +56,8 @@ class C$McMemcache final : public refcountable_polymorphic_php_classes<C$Memcach
}

int32_t get_hash() const final {
return static_cast<int32_t>(vk::std_hash(vk::string_view(C$McMemcache::get_class())));
std::string_view name_view{C$McMemcache::get_class()};
return static_cast<int32_t>(vk::murmur_hash<uint32_t>(name_view.data(), name_view.size()));
}

virtual C$McMemcache* virtual_builtin_clone() const noexcept {
Expand Down
Loading

0 comments on commit b7ad2cb

Please sign in to comment.