| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_OPTIMIZATION_GUIDE_STORE_UPDATE_DATA_H_ |
| #define COMPONENTS_OPTIMIZATION_GUIDE_STORE_UPDATE_DATA_H_ |
| |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "base/optional.h" |
| #include "base/sequence_checker.h" |
| #include "base/time/time.h" |
| #include "base/version.h" |
| #include "components/leveldb_proto/public/proto_database.h" |
| |
| namespace optimization_guide { |
| namespace proto { |
| class Hint; |
| class HostModelFeatures; |
| class PredictionModel; |
| class StoreEntry; |
| } // namespace proto |
| |
| using EntryVector = |
| leveldb_proto::ProtoDatabase<proto::StoreEntry>::KeyEntryVector; |
| |
| // Holds hint, prediction model, or host model features data for updating the |
| // OptimizationGuideStore. |
| class StoreUpdateData { |
| public: |
| ~StoreUpdateData(); |
| |
| // Creates an update data object for a component hint update. |
| static std::unique_ptr<StoreUpdateData> CreateComponentStoreUpdateData( |
| const base::Version& component_version); |
| |
| // Creates an update data object for a fetched hint update. |
| static std::unique_ptr<StoreUpdateData> CreateFetchedStoreUpdateData( |
| base::Time fetch_update_time, |
| base::Time expiry_time); |
| |
| // Creates an update data object for a prediction model update. |
| static std::unique_ptr<StoreUpdateData> |
| CreatePredictionModelStoreUpdateData(); |
| |
| // Creates an update data object for a host model features update. |
| static std::unique_ptr<StoreUpdateData> |
| CreateHostModelFeaturesStoreUpdateData( |
| base::Time host_model_features_update_time, |
| base::Time expiry_time); |
| |
| // Returns the component version of a component hint update. |
| const base::Optional<base::Version> component_version() const { |
| return component_version_; |
| } |
| |
| // Returns the next update time for the entries in the store update. |
| const base::Optional<base::Time> update_time() const { return update_time_; } |
| |
| // Returns the expiry time for the hints in a fetched hint update. |
| const base::Optional<base::Time> expiry_time() const { return expiry_time_; } |
| |
| // Moves |hint| into this update data. After MoveHintIntoUpdateData() is |
| // called, |hint| is no longer valid. |
| void MoveHintIntoUpdateData(proto::Hint&& hint); |
| |
| // Copies |host_model_features| into this update data. |
| void CopyHostModelFeaturesIntoUpdateData( |
| const proto::HostModelFeatures& host_model_features); |
| |
| // Copies |prediction_model| into this update data. |
| void CopyPredictionModelIntoUpdateData( |
| const proto::PredictionModel& prediction_model); |
| |
| // Returns the store entry updates along with ownership to them. |
| std::unique_ptr<EntryVector> TakeUpdateEntries(); |
| |
| private: |
| StoreUpdateData(base::Optional<base::Version> component_version, |
| base::Optional<base::Time> fetch_update_time, |
| base::Optional<base::Time> expiry_time); |
| StoreUpdateData(base::Time host_model_features_update_time, |
| base::Time expiry_time); |
| StoreUpdateData(); |
| |
| // The component version of the update data for a component update. |
| base::Optional<base::Version> component_version_; |
| |
| // The time when the entries in this update need to be updated. |
| base::Optional<base::Time> update_time_; |
| |
| // The time when entries in this update expire. |
| base::Optional<base::Time> expiry_time_; |
| |
| // The prefix to add to the key of every store entry. It is set |
| // during construction for appropriate type of update. |
| std::string entry_key_prefix_; |
| |
| // The vector of entries to save. |
| std::unique_ptr<EntryVector> entries_to_save_; |
| |
| SEQUENCE_CHECKER(sequence_checker_); |
| |
| DISALLOW_COPY_AND_ASSIGN(StoreUpdateData); |
| }; |
| |
| } // namespace optimization_guide |
| |
| #endif // COMPONENTS_OPTIMIZATION_GUIDE_STORE_UPDATE_DATA_H_ |