From 64c339db1ccde545efa5025e83406dfb95d62f4c Mon Sep 17 00:00:00 2001 From: taozhuowei Date: Thu, 2 Jan 2025 10:53:14 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E5=88=86=E6=AE=B5=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: taozhuowei --- .../core/html/parser/html_document_parser.cc | 21 +++++++++++++++++++ .../core/html/parser/html_document_parser.h | 4 ++++ .../core/paint/timing/paint_timing.cc | 6 ++++++ 3 files changed, 31 insertions(+) diff --git a/blink/renderer/core/html/parser/html_document_parser.cc b/blink/renderer/core/html/parser/html_document_parser.cc index 7166d5aca..8eaddf522 100644 --- a/blink/renderer/core/html/parser/html_document_parser.cc +++ b/blink/renderer/core/html/parser/html_document_parser.cc @@ -88,6 +88,11 @@ constexpr int kDefaultMaxTokenizationBudget = 250; constexpr int kInfiniteTokenizationBudget = 1e7; constexpr int kNumYieldsWithDefaultBudget = 2; +#if BUILDFLAG(IS_OHOS) +constexpr int kOptimizedMaxTokenizationBudget = 100; +static bool kUseOptimizedBudget = false; +#endif + class EndIfDelayedForbiddenScope; class ShouldCompleteScope; class AttemptToEndForbiddenScope; @@ -186,6 +191,16 @@ bool IsPreloadScanningEnabled(Document* document) { document->GetSettings()->GetDoHtmlPreloadScanning(); } +#if BUILDFLAG(IS_OHOS) +void SetOptimizeParserBudgetEnabled(bool enable) { + if (kUseOptimizedBudget != enable) { + LOG(DEBUG) << "OptimizeParserBudget set enable: " << enable; + TRACE_EVENT1("blink", "SetOptimizeParserBudgetEnabled", "enable", enable); + kUseOptimizedBudget = enable; + } +} +#endif + base::TimeDelta GetDefaultTimedBudget() { static const base::FeatureParam kDefaultParserBudgetParam{ &features::kTimedHTMLParserBudget, "default-parser-budget", @@ -642,6 +657,9 @@ bool HTMLDocumentParser::PumpTokenizer() { (task_runner_state_->TimesYielded() <= kNumYieldsWithDefaultBudget) ? task_runner_state_->GetDefaultBudget() : kInfiniteTokenizationBudget; +#if BUILDFLAG(IS_OHOS) + budget = kUseOptimizedBudget ? kOptimizedMaxTokenizationBudget : budget; +#endif base::TimeDelta timed_budget; if (TimedParserBudgetEnabled()) @@ -712,6 +730,9 @@ bool HTMLDocumentParser::PumpTokenizer() { elapsed_time = chunk_parsing_timer.Elapsed(); } should_yield = elapsed_time >= timed_budget; + if (kUseOptimizedBudget) { + should_yield = budget <= 0; + } } else { should_yield = budget <= 0; } diff --git a/blink/renderer/core/html/parser/html_document_parser.h b/blink/renderer/core/html/parser/html_document_parser.h index c19658813..a4bad36ea 100644 --- a/blink/renderer/core/html/parser/html_document_parser.h +++ b/blink/renderer/core/html/parser/html_document_parser.h @@ -84,6 +84,10 @@ enum ParserPrefetchPolicy { void CORE_EXPORT ResetDiscardedTokenCountForTesting(); size_t CORE_EXPORT GetDiscardedTokenCountForTesting(); +#if BUILDFLAG(IS_OHOS) +void CORE_EXPORT SetOptimizeParserBudgetEnabled(bool enable); +#endif + class CORE_EXPORT HTMLDocumentParser : public ScriptableDocumentParser, private HTMLParserScriptRunnerHost { public: diff --git a/blink/renderer/core/paint/timing/paint_timing.cc b/blink/renderer/core/paint/timing/paint_timing.cc index b1c947b88..044bdfdf6 100644 --- a/blink/renderer/core/paint/timing/paint_timing.cc +++ b/blink/renderer/core/paint/timing/paint_timing.cc @@ -15,6 +15,7 @@ #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame_view.h" +#include "third_party/blink/renderer/core/html/parser/html_document_parser.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/loader/document_loader.h" #include "third_party/blink/renderer/core/loader/interactive_detector.h" @@ -350,6 +351,11 @@ void PaintTiming::SetFirstContentfulPaintPresentation(base::TimeTicks stamp) { TRACE_EVENT_INSTANT_WITH_TIMESTAMP0("benchmark,loading", "GlobalFirstContentfulPaint", TRACE_EVENT_SCOPE_GLOBAL, stamp); +#if BUILDFLAG(IS_OHOS) + LOG(DEBUG) << "OptimizeParserBudget FCP reset budget."; + TRACE_EVENT0("blink", "PaintTiming::SetFirstContentfulPaintPresentation"); + blink:SetOptimizeParserBudgetEnabled(false); +#endif first_contentful_paint_presentation_ = stamp; bool is_soft_navigation_fcp = false; if (first_contentful_paint_presentation_ignoring_soft_navigations_ -- Gitee From 101fbb391a1c422ffd6ad6a33cc96f04975042b6 Mon Sep 17 00:00:00 2001 From: taozhuowei Date: Fri, 3 Jan 2025 07:15:50 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91,?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: taozhuowei --- .../core/html/parser/html_document_parser.cc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/blink/renderer/core/html/parser/html_document_parser.cc b/blink/renderer/core/html/parser/html_document_parser.cc index 8eaddf522..3868a5c0c 100644 --- a/blink/renderer/core/html/parser/html_document_parser.cc +++ b/blink/renderer/core/html/parser/html_document_parser.cc @@ -193,11 +193,9 @@ bool IsPreloadScanningEnabled(Document* document) { #if BUILDFLAG(IS_OHOS) void SetOptimizeParserBudgetEnabled(bool enable) { - if (kUseOptimizedBudget != enable) { - LOG(DEBUG) << "OptimizeParserBudget set enable: " << enable; - TRACE_EVENT1("blink", "SetOptimizeParserBudgetEnabled", "enable", enable); - kUseOptimizedBudget = enable; - } + LOG(DEBUG) << "OptimizeParserBudget set enable: " << enable; + TRACE_EVENT1("blink", "SetOptimizeParserBudgetEnabled", "enable", enable); + kUseOptimizedBudget = enable; } #endif @@ -730,9 +728,16 @@ bool HTMLDocumentParser::PumpTokenizer() { elapsed_time = chunk_parsing_timer.Elapsed(); } should_yield = elapsed_time >= timed_budget; +#if BUILDFLAG(IS_OHOS) if (kUseOptimizedBudget) { - should_yield = budget <= 0; + should_yield = should_yield || budget <= 0; + if (should_yield) { + LOG(DEBUG) << "OptimizeParserBudget in PumpTokenlizer. current parse tokens: " << tokens_parsed << + ". left token budget: " << budget << + ". elapsed time: " << elapsed_time; + } } +#endif } else { should_yield = budget <= 0; } -- Gitee