| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Protocol buffers used for storing in SQLite. |
| // CAUTION: When any change is done here, bump kDatabaseVersion in |
| // resource_prefetch_predictor_tables.h. |
| |
| syntax = "proto2"; |
| |
| package predictors; |
| |
| // Required in Chrome. |
| option optimize_for = LITE_RUNTIME; |
| |
| // Represents a single redirect chain endpoint. |
| // When adding a field here, please also update the equality operator and the |
| // output operator in |
| // chrome/browser/predictors/loading_test_util.cc. |
| message RedirectStat { |
| // Represents the host for RedirectData in a host-based table. |
| // |
| // Note that the |url| field contains only the origin portion of the full URL. |
| // The full URL is not available, because in some cases the path and query may |
| // be sanitized away - see https://crbug.com/973885. |
| optional string url = 1; |
| optional uint32 number_of_hits = 2; |
| optional uint32 number_of_misses = 3; |
| optional uint32 consecutive_misses = 4; |
| // |url_scheme| is typically either "http" or "https". This field was added |
| // in M-77 without wiping the database. As such, it may be empty in some |
| // cases even when originally |url| had a non-empty scheme. |
| optional string url_scheme = 5; |
| // |url_port| field was added in M-77 without wiping the database. As such, |
| // it may be empty in some cases even when originally |url| had a non-empty |
| // port number. |
| optional int32 url_port = 6; |
| } |
| |
| // Represents a mapping from URL or host to a list of redirect endpoints. |
| message RedirectData { |
| // Main frame URL or host. |
| optional string primary_key = 1; |
| optional uint64 last_visit_time = 2; |
| repeated RedirectStat redirect_endpoints = 3; |
| } |
| |
| // Historical data for a single origin accessed from a host. |
| message OriginStat { |
| optional string origin = 1; |
| optional uint32 number_of_hits = 2; |
| optional uint32 number_of_misses = 3; |
| optional uint32 consecutive_misses = 4; |
| optional double average_position = 5; |
| optional bool always_access_network = 6; |
| optional bool accessed_network = 7; |
| } |
| |
| // Collection of origins accessed from a host. |
| message OriginData { |
| optional string host = 1; |
| optional uint64 last_visit_time = 2; |
| repeated OriginStat origins = 3; |
| } |
| |
| // `LcpElementLocatorBucket` is a bucket of lcp_element_locator's histogram. |
| message LcpElementLocatorBucket { |
| // `lcp_element_locator` contains LCP element locator information as bytes |
| // encoded with a protobuf wire format. |
| optional bytes lcp_element_locator = 1; |
| optional double frequency = 2; |
| } |
| |
| message LcpElementLocatorStat { |
| // Conceptually, `lcp_element_locator_buckets` could be a `map<bytes, |
| // double>`. But proto3 doesn't support bytes as a key. Hence we use |
| // `repeated`. (see: https://protobuf.dev/programming-guides/proto3/#maps) |
| repeated LcpElementLocatorBucket lcp_element_locator_buckets = 1; |
| optional double other_bucket_frequency = 2; |
| } |
| |
| // A string-keyed data structure for applying the algorithm explained in: |
| // https://docs.google.com/document/d/1T80d4xW8xIEqfo792g1nC1deFqzMraunFJW_5ft4ziQ/edit |
| // Explanation can be found in resource_prefetch_predictor.cc. |
| message LcppStringFrequencyStatData { |
| map<string, double> main_buckets = 1; |
| optional double other_bucket_frequency = 2; |
| } |
| |
| // `LcppStat` contains all LCP predictor related statistics |
| // accessed from a host. |
| message LcppStat { |
| optional LcpElementLocatorStat lcp_element_locator_stat = 1; |
| optional LcppStringFrequencyStatData lcp_script_url_stat = 2; |
| optional LcppStringFrequencyStatData fetched_font_url_stat = 3; |
| optional LcppStringFrequencyStatData fetched_subresource_url_stat = 4; |
| optional LcppStringFrequencyStatData preconnect_origin_stat = 5; |
| } |
| |
| // [LCP Critical Path Predictor (LCPP)] |
| // `LcppData` stores LCP related optimization data. |
| // TODO(crbug.com/1419756): This feature is still under development and proto |
| // definition will likely change in the future. |
| // LCPP: |
| // https://docs.google.com/document/d/18qTNRyv_9K2CtvVrl_ancLzPxiAnfAcbvrCNegU9IBM |
| // LCP: https://web.dev/lcp/ |
| message LcppData { |
| optional string host = 1; |
| optional uint64 last_visit_time = 2; |
| optional LcppStat lcpp_stat = 3; |
| } |