// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. #pragma allow_unsafe_buffers #endif #ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_FRAME_TREE_DATA_H_ #define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_FRAME_TREE_DATA_H_ #include <stdint.h> #include <optional> #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "components/page_load_metrics/browser/observers/ad_metrics/frame_data_utils.h" #include "components/page_load_metrics/browser/page_load_metrics_observer.h" #include "components/page_load_metrics/common/page_load_metrics.mojom-forward.h" #include "services/metrics/public/cpp/ukm_source_id.h" #include "ui/gfx/geometry/size.h" #include "url/origin.h" // Resource usage thresholds for the Heavy Ad Intervention feature. These // numbers are platform specific and are intended to target 1 in 1000 ad iframes // on each platform, for network and CPU use respectively. namespace heavy_ad_thresholds { // Maximum number of network bytes allowed to be loaded by a frame. These // numbers reflect the 99.9th percentile of the // PageLoad.Clients.Ads.Bytes.AdFrames.PerFrame.Network histogram on mobile and // desktop. Additive noise is added to this threshold, see // AdsPageLoadMetricsObserver::HeavyAdThresholdNoiseProvider. const int kMaxNetworkBytes = …; // CPU thresholds are selected from AdFrameLoad UKM, and are intended to target // 1 in 1000 ad iframes combined, with each threshold responsible for roughly // half of those intervention. Maximum number of milliseconds of CPU use allowed // to be used by a frame. const int kMaxCpuTime = …; // Maximum percentage of CPU utilization over a 30 second window allowed. const int kMaxPeakWindowedPercent = …; } // namespace heavy_ad_thresholds namespace page_load_metrics { // The origin of the ad relative to the main frame's origin. // Note: Logged to UMA, keep in sync with CrossOriginAdStatus in enums.xml. // Add new entries to the end, and do not renumber. enum class OriginStatus { … }; // Origin status further broken down by whether the ad frame tree has a // frame currently not render-throttled (i.e. is eligible to be painted). // Note that since creative origin status is based on first contentful paint, // only ad frame trees with unknown creative origin status can be without any // frames that are eligible to be painted. // Note: Logged to UMA, keep in sync with // CrossOriginCreativeStatusWithThrottling in enums.xml. // Add new entries to the end, and do not renumber. enum class OriginStatusWithThrottling { … }; // The type of heavy ad this frame is classified as per the Heavy Ad // Intervention. enum class HeavyAdStatus { … }; // Controls what values of HeavyAdStatus will be cause an unload due to the // intervention. enum class HeavyAdUnloadPolicy { … }; // Represents how a frame should be treated by the heavy ad intervention. enum class HeavyAdAction { … }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. For any additions, also update the // corresponding PageEndReason enum in enums.xml. enum class UserActivationStatus { … }; // Whether or not media has been played in this frame. These values are // persisted to logs. Entries should not be renumbered and numeric values // should never be reused. enum class MediaStatus { … }; // FrameTreeData represents a frame along with its entire subtree, and is // typically used to capture an ad creative. It stores frame-specific // information (such as size, activation status, and origin), which is typically // specific to the top frame in the tree. class FrameTreeData final { … }; } // namespace page_load_metrics #endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_FRAME_TREE_DATA_H_