• webkit js


    dom相关:

    https://w3c.github.io/uievents/

    https://dom.spec.whatwg.org/

    工作原理:

    https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

    自己添加更多dom函数用js而不是通过c++:https://www.chromium.org/blink/blink-in-js


    JS调用到alert的堆栈:

    blink_core.dll!blink::LocalDOMWindow::alert(blink::ScriptState * script_state, const WTF::String & message) 行 664 C++
    blink_core.dll!blink::dom_window_v8_internal::Alert2Method(const v8::FunctionCallbackInfo<v8::Value> & info) 行 5382 C++
    blink_core.dll!blink::dom_window_v8_internal::AlertMethod(const v8::FunctionCallbackInfo<v8::Value> & info) 行 5404 C++
    blink_core.dll!blink::V8Window::AlertMethodCallback(const v8::FunctionCallbackInfo<v8::Value> & info) 行 12441 C++
    v8.dll!v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo handler) 行 159 C++
    v8.dll!v8::internal::`anonymous namespace'::HandleApiCallHelper<0>(v8::internal::Isolate * isolate, v8::internal::Handle<v8::internal::HeapObject> function, v8::internal::Handle<v8::internal::HeapObject> new_target, v8::internal::Handle<v8::internal::FunctionTemplateInfo> fun_data, v8::internal::Handle<v8::internal::Object> receiver, v8::internal::BuiltinArguments args) 行 113 C++
    v8.dll!v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments args, v8::internal::Isolate * isolate) 行 141 C++
    v8.dll!v8::internal::Builtin_HandleApiCall(int args_length, unsigned __int64 * args_object, v8::internal::Isolate * isolate) 行 129 C++
    [外部代码]
    [内联框架] v8.dll!v8::internal::GeneratedCode<unsigned long long,unsigned long long,unsigned long long,unsigned long long,unsigned long long,long long,unsigned long long **>::Call(unsigned __int64 args, unsigned __int64 args, unsigned __int64 args, unsigned __int64 args, __int64 args, unsigned __int64 * * args) 行 138 C++
    v8.dll!v8::internal::`anonymous namespace'::Invoke(v8::internal::Isolate * isolate, const v8::internal::`anonymous namespace'::InvokeParams & params) 行 266 C++
    v8.dll!v8::internal::Execution::Call(v8::internal::Isolate * isolate, v8::internal::Handle<v8::internal::Object> callable, v8::internal::Handle<v8::internal::Object> receiver, int argc, v8::internal::Handle<v8::internal::Object> * argv) 行 358 C++
    v8.dll!v8::Script::Run(v8::Local<v8::Context> context) 行 2159 C++
    blink_core.dll!blink::V8ScriptRunner::RunCompiledScript(v8::Isolate * isolate, v8::Local<v8::Script> script, blink::ExecutionContext * context) 行 340 C++
    blink_core.dll!blink::ScriptController::ExecuteScriptAndReturnValue(v8::Local<v8::Context> context, const blink::ScriptSourceCode & source, const blink::KURL & base_url, blink::SanitizeScriptErrors sanitize_script_errors, const blink::ScriptFetchOptions & fetch_options) 行 133 C++
    blink_core.dll!blink::ScriptController::EvaluateScriptInMainWorld(const blink::ScriptSourceCode & source_code, const blink::KURL & base_url, blink::SanitizeScriptErrors sanitize_script_errors, const blink::ScriptFetchOptions & fetch_options, blink::ScriptController::ExecuteScriptPolicy policy) 行 353 C++
    > blink_core.dll!blink::ScriptController::ExecuteScriptInMainWorld(const blink::ScriptSourceCode & source_code, const blink::KURL & base_url, blink::SanitizeScriptErrors sanitize_script_errors, const blink::ScriptFetchOptions & fetch_options) 行 321 C++
    blink_core.dll!blink::ClassicScript::RunScript(blink::LocalFrame * frame, const blink::SecurityOrigin * security_origin) 行 26 C++
    blink_core.dll!blink::PendingScript::ExecuteScriptBlockInternal(blink::Script * script, blink::ScriptElementBase * element, bool was_canceled, bool is_external, bool created_during_document_write, base::TimeTicks parser_blocking_load_start_time, bool is_controlled_by_script_runner) 行 265 C++
    blink_core.dll!blink::PendingScript::ExecuteScriptBlock(const blink::KURL & document_url) 行 171 C++
    blink_core.dll!blink::ScriptLoader::PrepareScript(const WTF::TextPosition & script_start_position, blink::ScriptLoader::LegacyTypeSupport support_legacy_types) 行 890 C++
    blink_core.dll!blink::HTMLParserScriptRunner::ProcessScriptElementInternal(blink::Element * script, const WTF::TextPosition & script_start_position) 行 599 C++
    blink_core.dll!blink::HTMLParserScriptRunner::ProcessScriptElement(blink::Element * script_element, const WTF::TextPosition & script_start_position) 行 333 C++
    blink_core.dll!blink::HTMLDocumentParser::RunScriptsForPausedTreeBuilder() 行 299 C++
    blink_core.dll!blink::HTMLDocumentParser::ProcessTokenizedChunkFromBackgroundParser(std::unique_ptr<blink::HTMLDocumentParser::TokenizedChunk,std::default_delete<blink::HTMLDocumentParser::TokenizedChunk>> pop_chunk) 行 539 C++
    blink_core.dll!blink::HTMLDocumentParser::PumpPendingSpeculations() 行 595 C++
    blink_core.dll!blink::HTMLDocumentParser::ResumeParsingAfterYield() 行 288 C++
    blink_core.dll!blink::HTMLParserScheduler::ContinueParsing() 行 141 C++


    javascript的window::setInterval的内部实现
    调用序列图如下:
    javascript的setInterval
    -->jsDOMWindowPrototypeFunctionSetInterval
    -->JSDOMWindow::setInterval
    -->DOMWindow::setInterval
    -->DOMTimer::install(context, action, timeout, false);
    #########################################################################################


    WebCore的timer实现
    最基本有几个类,
    --TimerBase
    --ThreadTimers
    包含TimerBase的heap堆和SharedTimer的指针
    --SharedTimer

    --TimerBase有一些子类,如-->SuspendableTimer-->DOMTimer, Timer等
    setNextFireTime() timer开始的时候,都要调用这个函数,这里把具体的timer更新或者插入到ThreadTimers的堆中
    fired() 纯虚函数
    --ThreadTimers
    updateSharedTimer() start timer
    sharedTimerFired() fired函数,设置为内部的SharedTimer的callback函数
    --SharedTimer
    实现依赖具体的平台,如mac, gtk, qt等
    有两个具体的实现MainThreadSharedTimer和WorkerSharedTimer

  • 相关阅读:
    canvas gamebricks
    javascript 判断对象的值是否相等
    让控件全屏显示(WinForm)
    网络视频监控
    回调函数
    [导入][链接]FreeBSD + Sun Java
    [导入][一点一滴学英语]20060330
    [导入][来自网络] 酸酸甜甜就是我 不用我多介绍了 可是你是否听过天津话的版本?
    [导入][链接]差点漏掉 Eclipse 3.2 M6出来了
    [导入][链接]Five reasons why you should never use PostgreSQL
  • 原文地址:https://www.cnblogs.com/bigben0123/p/13129392.html
Copyright © 2020-2023  润新知