/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v24.15.0
src/node_process.h
112 строк
4 KB
Renegade334
process: fix hrtime fast call signatures
06 окт 2025, 17:17
Не верифицирован
06 окт 2025, 17:17
cd034e9
Код
Авторство
О чём код?
#ifndef SRC_NODE_PROCESS_H_ #define SRC_NODE_PROCESS_H_ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #include "node_debug.h" #include "node_snapshotable.h" #include "v8-fast-api-calls.h" #include "v8.h" namespace node { class Environment; class IsolateData; class MemoryTracker; class ExternalReferenceRegistry; class Realm; void CreateEnvProxyTemplate(IsolateData* isolate_data); // Most of the time, it's best to use `console.error` to write // to the process.stderr stream. However, in some cases, such as // when debugging the stream.Writable class or the process.nextTick // function, it is useful to bypass JavaScript entirely. void RawDebug(const v8::FunctionCallbackInfo<v8::Value>& args); v8::MaybeLocal<v8::Value> ProcessEmit(Environment* env, std::string_view event, v8::Local<v8::Value> message); v8::Maybe<bool> ProcessEmitWarningGeneric(Environment* env, std::string_view warning, std::string_view type = "", std::string_view code = ""); template <typename... Args> inline v8::Maybe<bool> ProcessEmitWarning(Environment* env, const char* fmt, Args&&... args); v8::Maybe<void> ProcessEmitWarningSync(Environment* env, std::string_view message); v8::Maybe<bool> ProcessEmitExperimentalWarning(Environment* env, const std::string& warning); v8::Maybe<bool> ProcessEmitDeprecationWarning( Environment* env, const std::string& warning, std::string_view deprecation_code); v8::MaybeLocal<v8::Object> CreateProcessObject(Realm* env); void PatchProcessObject(const v8::FunctionCallbackInfo<v8::Value>& args); namespace process { class BindingData : public SnapshotableObject { public: struct InternalFieldInfo : public node::InternalFieldInfoBase { AliasedBufferIndex hrtime_buffer; }; static void AddMethods(v8::Isolate* isolate, v8::Local<v8::ObjectTemplate> target); static void RegisterExternalReferences(ExternalReferenceRegistry* registry); SERIALIZABLE_OBJECT_METHODS() SET_BINDING_ID(process_binding_data) BindingData(Realm* realm, v8::Local<v8::Object> object, InternalFieldInfo* info = nullptr); void MemoryInfo(MemoryTracker* tracker) const override; SET_MEMORY_INFO_NAME(BindingData) SET_SELF_SIZE(BindingData) static BindingData* FromV8Value(v8::Local<v8::Value> receiver); static void HrtimeImpl(BindingData* receiver); static void FastHrtime(v8::Local<v8::Value> receiver) { TRACK_V8_FAST_API_CALL("process.hrtime"); HrtimeImpl(FromV8Value(receiver)); } static void SlowHrtime(const v8::FunctionCallbackInfo<v8::Value>& args); static void HrtimeBigIntImpl(BindingData* receiver); static void FastHrtimeBigInt(v8::Local<v8::Value> receiver) { TRACK_V8_FAST_API_CALL("process.hrtimeBigInt"); HrtimeBigIntImpl(FromV8Value(receiver)); } static void SlowHrtimeBigInt(const v8::FunctionCallbackInfo<v8::Value>& args); static void LoadEnvFile(const v8::FunctionCallbackInfo<v8::Value>& args); private: // Buffer length in uint32. static constexpr size_t kHrTimeBufferLength = 3; AliasedUint32Array hrtime_buffer_; InternalFieldInfo* internal_field_info_ = nullptr; // These need to be static so that we have their addresses available to // register as external references in the snapshot at environment creation // time. static v8::CFunction fast_hrtime_; static v8::CFunction fast_hrtime_bigint_; }; } // namespace process } // namespace node #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS #endif // SRC_NODE_PROCESS_H_