From e314307649a530ff8bb3123199eba07c2623a463 Mon Sep 17 00:00:00 2001 From: h00415081 Date: Tue, 27 Feb 2024 09:34:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EonFirstScreenImagePaint,=20on?= =?UTF-8?q?FirstScreenImageText=E6=8E=A5=E5=8F=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: h00415081 Change-Id: I317a0ec2939c52f33394b01dac03373bf018f4fa Signed-off-by: h00415081 --- include/capi/cef_load_handler_capi.h | 19 ++++++- include/cef_api_hash.h | 10 ++-- include/cef_load_handler.h | 15 +++++ .../oh_page_load_metrics_observer.cc | 56 +++++++++++++++++++ .../oh_page_load_metrics_observer.h | 7 +++ libcef_dll/cpptoc/load_handler_cpptoc.cc | 45 ++++++++++++++- libcef_dll/ctocpp/load_handler_ctocpp.cc | 42 +++++++++++++- libcef_dll/ctocpp/load_handler_ctocpp.h | 9 ++- 8 files changed, 191 insertions(+), 12 deletions(-) diff --git a/include/capi/cef_load_handler_capi.h b/include/capi/cef_load_handler_capi.h index b4ef2213d..31606c79a 100644 --- a/include/capi/cef_load_handler_capi.h +++ b/include/capi/cef_load_handler_capi.h @@ -33,7 +33,7 @@ // by hand. See the translator.README.txt file in the tools directory for // more information. // -// $hash=6ebc9a4d08972aa862e6ed24dbeab98fb3231ca1$ +// $hash=8e477eb31b66ffbf52e97e110700d1687519c537$ // #ifndef CEF_INCLUDE_CAPI_CEF_LOAD_HANDLER_CAPI_H_ @@ -189,6 +189,23 @@ typedef struct _cef_load_handler_t { void(CEF_CALLBACK* on_safe_browsing_check_result)( struct _cef_load_handler_t* self, int threat_type); + + /// + /// Called when the first screen image rendering of web page. + /// + void(CEF_CALLBACK* on_first_screen_image_paint)( + struct _cef_load_handler_t* self, + int64_t navigationStartTick, + int64_t firstScreenImageLoadMs, + int64_t firstScreenImagePaintMs); + + /// + /// Called when the first screen text rendering of web page. + /// + void(CEF_CALLBACK* on_first_screen_text_paint)( + struct _cef_load_handler_t* self, + int64_t navigationStartTick, + int64_t firstScreenTextPaintMs); } cef_load_handler_t; #ifdef __cplusplus diff --git a/include/cef_api_hash.h b/include/cef_api_hash.h index 8a2780c15..9ba63636f 100644 --- a/include/cef_api_hash.h +++ b/include/cef_api_hash.h @@ -42,15 +42,15 @@ // way that may cause binary incompatibility with other builds. The universal // hash value will change if any platform is affected whereas the platform hash // values will change only if that particular platform is affected. -#define CEF_API_HASH_UNIVERSAL "b430ec7ad88e376b3c163be8d9f9e78e970a1186" +#define CEF_API_HASH_UNIVERSAL "115c03ffe0c70c4bb6a246d8dd5363d8d492b43d" #if defined(OS_WIN) -#define CEF_API_HASH_PLATFORM "f276cb0802116b540fd067f20acfe39a74e2e123" +#define CEF_API_HASH_PLATFORM "8d56b0efcb57895d256a5443bc6d99e99276b654" #elif defined(OS_MAC) -#define CEF_API_HASH_PLATFORM "9becc4b169c80377e795908a67dc4293f0cc1db1" +#define CEF_API_HASH_PLATFORM "888a18936cc74831feef0a483067dcffcdb138f0" #elif defined(OS_LINUX) -#define CEF_API_HASH_PLATFORM "98654df72859fd94099934d34f432e8759b751fa" +#define CEF_API_HASH_PLATFORM "6eaf31b323934523d0c68748622a2fff4a3265c7" #elif defined(OS_OHOS) -#define CEF_API_HASH_PLATFORM "98654df72859fd94099934d34f432e8759b751fa" +#define CEF_API_HASH_PLATFORM "6eaf31b323934523d0c68748622a2fff4a3265c7" #endif #ifdef __cplusplus diff --git a/include/cef_load_handler.h b/include/cef_load_handler.h index 4a02ed7eb..5352ea490 100644 --- a/include/cef_load_handler.h +++ b/include/cef_load_handler.h @@ -185,6 +185,21 @@ class CefLoadHandler : public virtual CefBaseRefCounted { /// /*--cef()--*/ virtual void OnSafeBrowsingCheckResult(int threat_type) {} + + /// + /// Called when the first screen image rendering of web page. + /// + /*--cef()--*/ + virtual void OnFirstScreenImagePaint(int64_t navigationStartTick, + int64_t firstScreenImageLoadMs, + int64_t firstScreenImagePaintMs) {} + + /// + /// Called when the first screen text rendering of web page. + /// + /*--cef()--*/ + virtual void OnFirstScreenTextPaint(int64_t navigationStartTick, + int64_t firstScreenTextPaintMs) {} #endif // BUILDFLAG(IS_OHOS) }; diff --git a/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.cc b/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.cc index 5860fd9ac..34af9e070 100644 --- a/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.cc +++ b/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.cc @@ -100,3 +100,59 @@ void OhPageLoadMetricsObserver::ReportFirstContentfulPaint( load_handler->OnFirstContentfulPaint(navigation_start_tick, first_contentful_paint_ms); } + +#ifdef OHOS_PAGE_LOAD_METRICS +void OhPageLoadMetricsObserver::OnFirstScreenImagePaint( + const page_load_metrics::mojom::PageLoadTiming& timing) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + LOG(INFO) << "OhPageLoadMetricsObserver OnFirstScreenImagePaint start."; + CefRefPtr browser = + AlloyBrowserHostImpl::GetBrowserForContents( + GetDelegate().GetWebContents()); + if (!browser.get()) { + return; + } + CefRefPtr client = browser->GetClient(); + if (!client.get()) { + return; + } + CefRefPtr load_handler = client->GetLoadHandler(); + if (!load_handler.get()) { + return; + } + LOG(INFO) << "OnFirstScreenImagePaint first_screen_text_paint :"; + << timing.paint_timing->first_screen_image_paint->InMilliseconds() + << "ms, first_screen_image_load :" + << timing.paint_timing->first_screen_image_load->InMilliseconds() + << "ms"; + load_handler->OnFirstScreenImagePaint( + GetDelegate().GetNavigationStart() - base::TimeTicks().InMicroseconds(), + timing.paint_timing->first_screen_image_load->InMilliseconds(), + timing.paint_timing->first_screen_image_paint->InMilliseconds()); +} + +void OhPageLoadMetricsObserver::OnFirstScreenTextPaint( + const page_load_metrics::mojom::PageLoadTiming& timing) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + LOG(INFO) << "OhPageLoadMetricsObserver OnFirstScreenTextPaint start."; + CefRefPtr browser = + AlloyBrowserHostImpl::GetBrowserForContents( + GetDelegate().GetWebContents()); + if (!browser.get()) { + return; + } + CefRefPtr client = browser->GetClient(); + if (!client.get()) { + return; + } + CefRefPtr load_handler = client->GetLoadHandler(); + if (!load_handler.get()) { + return; + } + LOG(INFO) << "OnFirstScreenTextPaint first_screen_text_paint:"; + << timing.paint_timing->first_screen_text_paint->InMilliseconds(); + load_handler->OnFirstScreenTextPaint( + GetDelegate().GetNavigationStart() - base::TimeTicks()).InMicroseconds(), + timing.paint_timing->first_screen_text_paint->InMilliseconds()); +} +#endif // OHOS_PAGE_LOAD_METRICS diff --git a/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.h b/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.h index 1f8387565..b3175df6f 100644 --- a/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.h +++ b/libcef/browser/page_load_metrics/oh_page_load_metrics_observer.h @@ -47,6 +47,13 @@ class OhPageLoadMetricsObserver void OnFirstContentfulPaintInPage( const page_load_metrics::mojom::PageLoadTiming& timing) override; +#ifdef OHOS_PAGE_LOAD_METRICS + void OnFirstScreenImagePaint( + const page_load_metrics::mojom::PageLoadTiming& timing) override; + void OnFirstScreenTextPaint( + const page_load_metrics::mojom::PageLoadTiming& timing) override; +#endif // OHOS_PAGE_LOAD_METRICS + protected: OhPageLoadMetricsObserver( network::NetworkQualityTracker* network_quality_tracker) diff --git a/libcef_dll/cpptoc/load_handler_cpptoc.cc b/libcef_dll/cpptoc/load_handler_cpptoc.cc index 201931712..7b7cb0736 100644 --- a/libcef_dll/cpptoc/load_handler_cpptoc.cc +++ b/libcef_dll/cpptoc/load_handler_cpptoc.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights +// Copyright (c) 2024 The Chromium Embedded Framework Authors. All rights // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. // @@ -9,7 +9,7 @@ // implementations. See the translator.README.txt file in the tools directory // for more information. // -// $hash=16ee4c651071d882c6893f401ebf9e622cdff451$ +// $hash=81b21cfbd856e264f8e67c155e8b47b7d069ca1a$ // #include "libcef_dll/cpptoc/load_handler_cpptoc.h" @@ -355,6 +355,43 @@ load_handler_on_safe_browsing_check_result(struct _cef_load_handler_t* self, CefLoadHandlerCppToC::Get(self)->OnSafeBrowsingCheckResult(threat_type); } +void CEF_CALLBACK +load_handler_on_first_screen_image_paint(struct _cef_load_handler_t* self, + int64_t navigationStartTick, + int64_t firstScreenImageLoadMs, + int64_t firstScreenImagePaintMs) { + shutdown_checker::AssertNotShutdown(); + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + DCHECK(self); + if (!self) { + return; + } + + // Execute + CefLoadHandlerCppToC::Get(self)->OnFirstScreenImagePaint( + navigationStartTick, firstScreenImageLoadMs, firstScreenImagePaintMs); +} + +void CEF_CALLBACK +load_handler_on_first_screen_text_paint(struct _cef_load_handler_t* self, + int64_t navigationStartTick, + int64_t firstScreenTextPaintMs) { + shutdown_checker::AssertNotShutdown(); + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + DCHECK(self); + if (!self) { + return; + } + + // Execute + CefLoadHandlerCppToC::Get(self)->OnFirstScreenTextPaint( + navigationStartTick, firstScreenTextPaintMs); +} + } // namespace // CONSTRUCTOR - Do not edit by hand. @@ -377,6 +414,10 @@ CefLoadHandlerCppToC::CefLoadHandlerCppToC() { load_handler_on_navigation_entry_committed; GetStruct()->on_safe_browsing_check_result = load_handler_on_safe_browsing_check_result; + GetStruct()->on_first_screen_image_paint = + load_handler_on_first_screen_image_paint; + GetStruct()->on_first_screen_text_paint = + load_handler_on_first_screen_text_paint; } // DESTRUCTOR - Do not edit by hand. diff --git a/libcef_dll/ctocpp/load_handler_ctocpp.cc b/libcef_dll/ctocpp/load_handler_ctocpp.cc index 6d4757d29..f035e50dc 100644 --- a/libcef_dll/ctocpp/load_handler_ctocpp.cc +++ b/libcef_dll/ctocpp/load_handler_ctocpp.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights +// Copyright (c) 2024 The Chromium Embedded Framework Authors. All rights // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. // @@ -9,7 +9,7 @@ // implementations. See the translator.README.txt file in the tools directory // for more information. // -// $hash=98f4991c1e20d4f5dc0e4607700a58e6a01cd9c0$ +// $hash=ac4930a19771244318c6643c0e0d9d8c1759bdd0$ // #include "libcef_dll/ctocpp/load_handler_ctocpp.h" @@ -356,6 +356,44 @@ void CefLoadHandlerCToCpp::OnSafeBrowsingCheckResult(int threat_type) { _struct->on_safe_browsing_check_result(_struct, threat_type); } +NO_SANITIZE("cfi-icall") +void CefLoadHandlerCToCpp::OnFirstScreenImagePaint( + int64_t navigationStartTick, + int64_t firstScreenImageLoadMs, + int64_t firstScreenImagePaintMs) { + shutdown_checker::AssertNotShutdown(); + + cef_load_handler_t* _struct = GetStruct(); + if (CEF_MEMBER_MISSING(_struct, on_first_screen_image_paint)) { + return; + } + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + // Execute + _struct->on_first_screen_image_paint(_struct, navigationStartTick, + firstScreenImageLoadMs, + firstScreenImagePaintMs); +} + +NO_SANITIZE("cfi-icall") +void CefLoadHandlerCToCpp::OnFirstScreenTextPaint( + int64_t navigationStartTick, + int64_t firstScreenTextPaintMs) { + shutdown_checker::AssertNotShutdown(); + + cef_load_handler_t* _struct = GetStruct(); + if (CEF_MEMBER_MISSING(_struct, on_first_screen_text_paint)) { + return; + } + + // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING + + // Execute + _struct->on_first_screen_text_paint(_struct, navigationStartTick, + firstScreenTextPaintMs); +} + // CONSTRUCTOR - Do not edit by hand. CefLoadHandlerCToCpp::CefLoadHandlerCToCpp() {} diff --git a/libcef_dll/ctocpp/load_handler_ctocpp.h b/libcef_dll/ctocpp/load_handler_ctocpp.h index a7c0e30d7..95144649e 100644 --- a/libcef_dll/ctocpp/load_handler_ctocpp.h +++ b/libcef_dll/ctocpp/load_handler_ctocpp.h @@ -1,4 +1,4 @@ -// Copyright (c) 2023 The Chromium Embedded Framework Authors. All rights +// Copyright (c) 2024 The Chromium Embedded Framework Authors. All rights // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. // @@ -9,7 +9,7 @@ // implementations. See the translator.README.txt file in the tools directory // for more information. // -// $hash=ebf8fcd244312d5843ae51ff9486c1be26c4a8a4$ +// $hash=fc2826ecfaed71401e982ce66359e3693a82551d$ // #ifndef CEF_LIBCEF_DLL_CTOCPP_LOAD_HANDLER_CTOCPP_H_ @@ -73,6 +73,11 @@ class CefLoadHandlerCToCpp : public CefCToCppRefCounted details) override; void OnSafeBrowsingCheckResult(int threat_type) override; + void OnFirstScreenImagePaint(int64_t navigationStartTick, + int64_t firstScreenImageLoadMs, + int64_t firstScreenImagePaintMs) override; + void OnFirstScreenTextPaint(int64_t navigationStartTick, + int64_t firstScreenTextPaintMs) override; }; #endif // CEF_LIBCEF_DLL_CTOCPP_LOAD_HANDLER_CTOCPP_H_ -- Gitee