blob: 1f9808b67cb1a37c8921ecdf62bc87fe3c4426ba [file] [log] [blame]
// 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;
}