#include "third_party/blink/renderer/core/paint/timing/paint_timing_detector.h"
#include "base/metrics/histogram_functions.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/input/web_input_event.h"
#include "third_party/blink/public/common/performance/largest_contentful_paint_type.h"
#include "third_party/blink/renderer/core/dom/document.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/frame/web_frame_widget_impl.h"
#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
#include "third_party/blink/renderer/core/html/html_element.h"
#include "third_party/blink/renderer/core/html/html_image_element.h"
#include "third_party/blink/renderer/core/layout/layout_box_model_object.h"
#include "third_party/blink/renderer/core/layout/layout_object.h"
#include "third_party/blink/renderer/core/layout/layout_view.h"
#include "third_party/blink/renderer/core/loader/document_loader.h"
#include "third_party/blink/renderer/core/loader/resource/image_resource_content.h"
#include "third_party/blink/renderer/core/page/chrome_client.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/paint/paint_layer.h"
#include "third_party/blink/renderer/core/paint/timing/image_paint_timing_detector.h"
#include "third_party/blink/renderer/core/paint/timing/largest_contentful_paint_calculator.h"
#include "third_party/blink/renderer/core/paint/timing/text_paint_timing_detector.h"
#include "third_party/blink/renderer/core/style/style_fetched_image.h"
#include "third_party/blink/renderer/core/svg/graphics/svg_image.h"
#include "third_party/blink/renderer/core/timing/dom_window_performance.h"
#include "third_party/blink/renderer/platform/graphics/bitmap_image.h"
#include "third_party/blink/renderer/platform/graphics/graphics_context.h"
#include "third_party/blink/renderer/platform/graphics/image.h"
#include "third_party/blink/renderer/platform/graphics/paint/float_clip_rect.h"
#include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h"
#include "third_party/blink/renderer/platform/graphics/paint/property_tree_state.h"
#include "third_party/blink/renderer/platform/graphics/paint/scoped_paint_chunk_properties.h"
#include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
#include "third_party/blink/renderer/platform/loader/fetch/media_timing.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_copier_std.h"
#include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
#include "third_party/blink/renderer/platform/wtf/hash_map.h"
#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
#include "ui/gfx/geometry/rect.h"
namespace blink {
namespace {
bool IsBackgroundImageContentful(const LayoutObject& object,
const Image& image) { … }
void ReportImagePixelInaccuracy(HTMLImageElement* image_element) { … }
}
PaintTimingDetector::PaintTimingDetector(LocalFrameView* frame_view)
: … { … }
void PaintTimingDetector::NotifyPaintFinished() { … }
bool PaintTimingDetector::NotifyBackgroundImagePaint(
const Node& node,
const Image& image,
const StyleImage& style_image,
const PropertyTreeStateOrAlias& current_paint_chunk_properties,
const gfx::Rect& image_border) { … }
bool PaintTimingDetector::NotifyImagePaint(
const LayoutObject& object,
const gfx::Size& intrinsic_size,
const MediaTiming& media_timing,
const PropertyTreeStateOrAlias& current_paint_chunk_properties,
const gfx::Rect& image_border) { … }
void PaintTimingDetector::NotifyImageFinished(const LayoutObject& object,
const MediaTiming* media_timing) { … }
void PaintTimingDetector::LayoutObjectWillBeDestroyed(
const LayoutObject& object) { … }
void PaintTimingDetector::NotifyImageRemoved(
const LayoutObject& object,
const ImageResourceContent* cached_image) { … }
void PaintTimingDetector::OnInputOrScroll() { … }
void PaintTimingDetector::NotifyInputEvent(WebInputEvent::Type type) { … }
void PaintTimingDetector::NotifyScroll(mojom::blink::ScrollType scroll_type) { … }
bool PaintTimingDetector::NeedToNotifyInputOrScroll() const { … }
void PaintTimingDetector::RestartRecordingLCP() { … }
void PaintTimingDetector::SoftNavigationDetected(LocalDOMWindow* window) { … }
void PaintTimingDetector::RestartRecordingLCPToUkm() { … }
LargestContentfulPaintCalculator*
PaintTimingDetector::GetLargestContentfulPaintCalculator() { … }
void PaintTimingDetector::UpdateMetricsLcp() { … }
void PaintTimingDetector::DidChangePerformanceTiming() { … }
gfx::RectF PaintTimingDetector::BlinkSpaceToDIPs(const gfx::RectF& rect) const { … }
gfx::RectF PaintTimingDetector::CalculateVisualRect(
const gfx::Rect& visual_rect,
const PropertyTreeStateOrAlias& current_paint_chunk_properties) const { … }
void PaintTimingDetector::UpdateLcpCandidate() { … }
void PaintTimingDetector::ReportIgnoredContent() { … }
const LargestContentfulPaintDetails&
PaintTimingDetector::LatestLcpDetailsForTest() const { … }
bool PaintTimingDetector::IsUnrelatedSoftNavigationPaint(const Node& node) { … }
ScopedPaintTimingDetectorBlockPaintHook*
ScopedPaintTimingDetectorBlockPaintHook::top_ = …;
void ScopedPaintTimingDetectorBlockPaintHook::EmplaceIfNeeded(
const LayoutBoxModelObject& aggregator,
const PropertyTreeStateOrAlias& property_tree_state) { … }
ScopedPaintTimingDetectorBlockPaintHook::Data::Data(
const LayoutBoxModelObject& aggregator,
const PropertyTreeStateOrAlias& property_tree_state,
TextPaintTimingDetector* detector)
: … { … }
ScopedPaintTimingDetectorBlockPaintHook::
~ScopedPaintTimingDetectorBlockPaintHook() { … }
void PaintTimingDetector::Trace(Visitor* visitor) const { … }
}